Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2318,7 +2318,7 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera)
DX8Wrapper::Set_Material(vmat);
REF_PTR_RELEASE(vmat);
DX8Wrapper::Set_Texture(0,m_destAlphaTexture);
DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true));
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Matrix3D(true));
//Enabled writes to destination alpha only
DX8Wrapper::Set_DX8_Render_State(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_ALPHA);
DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_TEXCOORDINDEX, 0);
Expand Down Expand Up @@ -2504,7 +2504,7 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera)
DX8Wrapper::Set_Material(vmat);
REF_PTR_RELEASE(vmat);
DX8Wrapper::Set_Texture(0,m_destAlphaTexture);
DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true));
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Matrix3D(true));
//Enabled writes to destination alpha only
DX8Wrapper::Set_DX8_Render_State(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_ALPHA);
DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_TEXCOORDINDEX, 0);
Expand Down Expand Up @@ -2808,7 +2808,7 @@ void BaseHeightMapRenderObjClass::renderTrees(CameraClass * camera)
if (m_map==nullptr) return;
if (Scene==nullptr) return;
if (m_treeBuffer) {
DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform);
DX8Wrapper::Set_Material(m_vertexMaterialClass);
RTS3DScene *pMyScene = (RTS3DScene *)Scene;
RefRenderObjListIterator pDynamicLightsIterator(pMyScene->getDynamicLights());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -486,15 +486,15 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo)
}
#endif

DX8Wrapper::Set_Light_Environment(rinfo.light_environment);
Renderer::Set_Light_Environment(rinfo.light_environment);

// Force shaders to update.
m_stageTwoTexture->restore();
DX8Wrapper::Set_Texture(0,nullptr);
DX8Wrapper::Set_Texture(1,nullptr);
ShaderClass::Invalidate();

DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform);


DX8Wrapper::Set_Material(m_vertexMaterialClass);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1923,15 +1923,15 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo)
}
#endif

DX8Wrapper::Set_Light_Environment(rinfo.light_environment);
Renderer::Set_Light_Environment(rinfo.light_environment);

// Force shaders to update.
m_stageTwoTexture->restore();
DX8Wrapper::Set_Texture(0,nullptr);
DX8Wrapper::Set_Texture(1,nullptr);
ShaderClass::Invalidate();

DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform);

//Apply the shader and material

Expand Down Expand Up @@ -2149,7 +2149,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo)
///Performs additional terrain rendering pass, blending in the black shroud texture.
void HeightMapRenderObjClass::renderTerrainPass(CameraClass *pCamera)
{
DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true));
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Matrix3D(true));

//Apply the shader and material

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
#include "GameLogic/GameLogic.h"
#include "Common/MapObject.h"
#include "WW3D2/dx8wrapper.h"
#include "WW3D2/Renderer.h"

#if defined(RTS_DEBUG)

Expand Down Expand Up @@ -221,7 +222,7 @@ void W3DDebugIcons::Render(RenderInfoClass & rinfo)
DX8Wrapper::Set_Texture(0, nullptr);
DX8Wrapper::Apply_Render_State_Changes();

DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform);

Int numRect = m_numDebugIcons;
static Real offset = 30;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "WW3D2/texture.h"
#include "WW3D2/dx8indexbuffer.h"
#include "WW3D2/dx8wrapper.h"
#include "WW3D2/Renderer.h"
#include "WW3D2/rinfo.h"
#include "WW3D2/camera.h"
#include "WW3D2/sortingrenderer.h"
Expand Down Expand Up @@ -446,8 +447,8 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo)
REF_PTR_RELEASE(backBuffer);

Matrix4x4 identity(true);
DX8Wrapper::Set_Transform(D3DTS_WORLD,identity);
DX8Wrapper::Set_Transform(D3DTS_VIEW,identity);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,identity);
Renderer::Set_Transform(RB_TRANSFORM_VIEW,identity);

DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0);
//DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueSpriteShader);
Expand Down
5 changes: 3 additions & 2 deletions Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "W3DDevice/GameClient/HeightMap.h"
#include "GameClient/View.h"
#include "WW3D2/dx8wrapper.h"
#include "WW3D2/Renderer.h"
#include "WW3D2/rinfo.h"
#include "WW3D2/camera.h"
#include "WW3D2/assetmgr.h"
Expand Down Expand Up @@ -394,7 +395,7 @@ void W3DSnowManager::render(RenderInfoClass &rinfo)
m_heightTraveled=m_time*m_velocity+cameraOffset; //height that snow flake traveled this frame.

Matrix4x4 identity(true);
DX8Wrapper::Set_Transform(D3DTS_WORLD,identity);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,identity);

DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader);

Expand Down Expand Up @@ -485,7 +486,7 @@ void W3DSnowManager::renderAsQuads(RenderInfoClass &rinfo, Int cubeOriginX, Int
}

Matrix4x4 identity(true);
DX8Wrapper::Set_Transform(D3DTS_VIEW,identity);
Renderer::Set_Transform(RB_TRANSFORM_VIEW,identity);

DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
#include "WW3D2/camera.h"
#include "WW3D2/assetmgr.h"
#include "WW3D2/dx8wrapper.h"
#include "WW3D2/Renderer.h"
#include "WW3D2/scene.h"
#include "GameLogic/TerrainLogic.h"
#include "GameLogic/Object.h"
Expand Down Expand Up @@ -906,7 +907,7 @@ Try improving the fit to vertical surfaces like cliffs.

trackStartIndex=0;
mod=m_usedModules;
DX8Wrapper::Set_Transform(D3DTS_WORLD,mod->Transform);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,mod->Transform);
while (mod)
{
if (mod->m_activeEdgeCount >= 2 && mod->Is_Really_Visible())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ enum
#include "W3DDevice/GameClient/W3DProjectedShadow.h"
#include "WW3D2/camera.h"
#include "WW3D2/dx8wrapper.h"
#include "WW3D2/Renderer.h"
#include "WW3D2/dx8renderer.h"
#include "WW3D2/matinfo.h"
#include "WW3D2/mesh.h"
Expand Down Expand Up @@ -1630,7 +1631,7 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD
DX8Wrapper::Set_Vertex_Buffer(vb_access);

Matrix3D tm(1);
DX8Wrapper::Set_Transform(D3DTS_WORLD,tm);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm);

DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1791,7 +1791,7 @@ void WaterRenderObjClass::drawSea(RenderInfoClass & rinfo)
matWW3D._23=1.0f;
matWW3D._44=1.0f;

DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); //position the water surface
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface
DX8Wrapper::Set_Texture(0,nullptr); //we'll be setting our own textures, so reset W3D
DX8Wrapper::Set_Texture(1,nullptr); //we'll be setting our own textures, so reset W3D

Expand Down Expand Up @@ -2111,7 +2111,7 @@ void WaterRenderObjClass::renderSky()

Matrix3D tm(1);
tm.Set_Translation(Vector3(0,0,0));
DX8Wrapper::Set_Transform(D3DTS_WORLD,tm);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm);

DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts
}
Expand Down Expand Up @@ -2153,7 +2153,7 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat)
tm.Adjust_Translation(Vector3(SKYBODY_X,SKYBODY_Y,SKYBODY_HEIGHT));


DX8Wrapper::Set_Transform(D3DTS_WORLD,tm);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm);


VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE);
Expand Down Expand Up @@ -2362,7 +2362,7 @@ void WaterRenderObjClass::renderWaterMesh()

m_vertexBufferD3D->Unlock();

DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); //position the water surface
Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface
DX8Wrapper::Set_Material(m_meshVertexMaterialClass);

ShaderClass::CullModeType oldCullMode=m_shaderClass.Get_Cull_Mode();
Expand All @@ -2380,10 +2380,10 @@ void WaterRenderObjClass::renderWaterMesh()
DX8Wrapper::Set_Texture(0,setting->waterTexture);
DX8Wrapper::Set_Texture(1,setting->waterTexture);

DX8Wrapper::Set_Light(0,*m_meshLight);
DX8Wrapper::Set_Light(1,nullptr);
DX8Wrapper::Set_Light(2,nullptr);
DX8Wrapper::Set_Light(3,nullptr);
Renderer::Set_Light(0,*m_meshLight);
Renderer::Clear_Light(1);
Renderer::Clear_Light(2);
Renderer::Clear_Light(3);
/*
DX8Wrapper::Set_DX8_Render_State(D3DRS_AMBIENT,0); //turn off scene ambient
DX8Wrapper::Set_DX8_Render_State(D3DRS_SPECULARENABLE,TRUE);
Expand Down Expand Up @@ -2893,7 +2893,7 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig)

Matrix3D tm(1);

DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); //position the water surface
Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface
DX8Wrapper::Set_Index_Buffer(ib_access,0);
DX8Wrapper::Set_Vertex_Buffer(vb_access);
DX8Wrapper::Set_Texture(0,m_riverTexture); //set to blue
Expand Down Expand Up @@ -3257,7 +3257,7 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4])

Matrix3D tm(1);

DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); //position the water surface
Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface
DX8Wrapper::Set_Index_Buffer(ib_access,0);
DX8Wrapper::Set_Vertex_Buffer(vb_access);

Expand Down Expand Up @@ -3422,7 +3422,7 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat)
Matrix3D tm(1);
//set position of skybody in world
// tm.Set_Translation(Vector3(40,0,0));
DX8Wrapper::Set_Transform(D3DTS_WORLD,tm);
Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm);

DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
#include "WW3D2/camera.h"
#include "WW3D2/assetmgr.h"
#include "WW3D2/dx8wrapper.h"
#include "WW3D2/Renderer.h"

//number of vertex pages allocated - allows double buffering of vertex updates.
//while one is being rendered, another is being updated. Improves HW parallelism.
Expand Down Expand Up @@ -900,7 +901,7 @@ Try improving the fit to vertical surfaces like cliffs.
diffuseLight=REAL_TO_INT(shadeB) | (REAL_TO_INT(shadeG) << 8) | (REAL_TO_INT(shadeR) << 16);

Matrix3D tm(1); ///set to identity
DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); //position the water surface
Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface

DX8Wrapper::Set_Material(m_vertexMaterialClass);
DX8Wrapper::Set_Shader(m_shaderClass);
Expand Down
60 changes: 60 additions & 0 deletions Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,21 @@
#include "WW3D2/lightenvironment.h"
#include "WWDebug/wwdebug.h"

static D3DTRANSFORMSTATETYPE To_D3D_Transform(RenderBackendTransform transform)
{
switch (transform)
{
case RB_TRANSFORM_WORLD:
return D3DTS_WORLD;
case RB_TRANSFORM_VIEW:
return D3DTS_VIEW;
case RB_TRANSFORM_PROJECTION:
return D3DTS_PROJECTION;
}
WWASSERT(0);
return D3DTS_WORLD;
}

static bool Initialized = false;
static bool Lite = false;

Expand Down Expand Up @@ -164,6 +179,36 @@ void Renderer::Invalidate_Cached_Render_States()
DX8Wrapper::Invalidate_Cached_Render_States();
}

void Renderer::Set_Transform(RenderBackendTransform transform, const Matrix4x4 & m)
{
DX8Wrapper::Set_Transform(To_D3D_Transform(transform), m);
}

void Renderer::Set_Transform(RenderBackendTransform transform, const Matrix3D & m)
{
DX8Wrapper::Set_Transform(To_D3D_Transform(transform), m);
}

void Renderer::Get_Transform(RenderBackendTransform transform, Matrix4x4 & m)
{
DX8Wrapper::Get_Transform(To_D3D_Transform(transform), m);
}

void Renderer::Set_World_Identity()
{
DX8Wrapper::Set_World_Identity();
}

void Renderer::Set_View_Identity()
{
DX8Wrapper::Set_View_Identity();
}

void Renderer::Set_Projection_Transform_With_Z_Bias(const Matrix4x4 & matrix, float znear, float zfar)
{
DX8Wrapper::Set_Projection_Transform_With_Z_Bias(matrix, znear, zfar);
}

void Renderer::Set_Ambient(const Vector3 & color)
{
DX8Wrapper::Set_Ambient(color);
Expand All @@ -173,3 +218,18 @@ void Renderer::Set_Light_Environment(LightEnvironmentClass * light_env)
{
DX8Wrapper::Set_Light_Environment(light_env);
}

void Renderer::Set_Light(unsigned index, const LightClass & light)
{
DX8Wrapper::Set_Light(index, light);
}

void Renderer::Clear_Light(unsigned index)
{
DX8Wrapper::Set_Light(index, nullptr);
}

void Renderer::Set_Fog(bool enable, const Vector3 & color, float start, float end)
{
DX8Wrapper::Set_Fog(enable, color, start, end);
}
20 changes: 20 additions & 0 deletions Core/Libraries/Source/WWVegas/WW3D2/Renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@
// Forward declarations keep this header includable without pulling in the full
// WW3D2 header graph. All W3D classes below are passed by pointer or reference.

class LightClass;
class LightEnvironmentClass;
class Matrix3D;
class Matrix4x4;
class Vector3;

struct RenderViewport
Expand All @@ -41,6 +44,13 @@ struct RenderViewport
float max_z;
};

enum RenderBackendTransform
{
RB_TRANSFORM_WORLD,
RB_TRANSFORM_VIEW,
RB_TRANSFORM_PROJECTION
};

// The interface holds only the methods that callers route through. The rest of
// the DX8Wrapper API is called directly.

Expand Down Expand Up @@ -75,6 +85,16 @@ class Renderer
static void Set_Viewport(const RenderViewport & viewport);
static void Invalidate_Cached_Render_States();

static void Set_Transform(RenderBackendTransform transform, const Matrix4x4 & m);
static void Set_Transform(RenderBackendTransform transform, const Matrix3D & m);
static void Get_Transform(RenderBackendTransform transform, Matrix4x4 & m);
static void Set_World_Identity();
static void Set_View_Identity();
static void Set_Projection_Transform_With_Z_Bias(const Matrix4x4 & matrix, float znear, float zfar);

static void Set_Ambient(const Vector3 & color);
static void Set_Light_Environment(LightEnvironmentClass * light_env);
static void Set_Light(unsigned index, const LightClass & light);
static void Clear_Light(unsigned index);
static void Set_Fog(bool enable, const Vector3 & color, float start, float end);
};
Loading
Loading