diff --git a/Core/GameEngineDevice/Include/W3DDevice/GameClient/W3DShaderManager.h b/Core/GameEngineDevice/Include/W3DDevice/GameClient/W3DShaderManager.h index bb86bca8057..2e563a760bf 100644 --- a/Core/GameEngineDevice/Include/W3DDevice/GameClient/W3DShaderManager.h +++ b/Core/GameEngineDevice/Include/W3DDevice/GameClient/W3DShaderManager.h @@ -70,7 +70,6 @@ class W3DShaderManager ST_FLAT_TERRAIN_BASE_NOISE1, //shader to apply base texture and cloud/noise 1. ST_FLAT_TERRAIN_BASE_NOISE2, //shader to apply base texture and cloud/noise 2. ST_FLAT_TERRAIN_BASE_NOISE12,//shader to apply base texture and both cloud/noise - ST_FLAT_SHROUD_TEXTURE, //shader to apply shroud texture projection. ST_MAX }; diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp index ae3cd18ae11..9b929a2882e 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp @@ -83,6 +83,7 @@ #include "W3DDevice/GameClient/W3DWater.h" #include "W3DDevice/GameClient/W3DShroud.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/light.h" #include "WW3D2/scene.h" #include "W3DDevice/GameClient/W3DPoly.h" @@ -2295,7 +2296,7 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera) return; //Check if video card is capable of using this effect - if (DX8Wrapper::getBackBufferFormat() != WW3D_FORMAT_A8R8G8B8) + if (Renderer::Get_Back_Buffer_Format() != WW3D_FORMAT_A8R8G8B8) return; //can't apply effect on cards without destination alpha Int vertexCount = 0; @@ -2312,12 +2313,12 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera) ShaderClass unlitShader=ShaderClass::_PresetOpaque2DShader; unlitShader.Set_Depth_Compare(ShaderClass::PASS_LEQUAL); - DX8Wrapper::Set_Shader(unlitShader); + Renderer::Set_Shader(unlitShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,m_destAlphaTexture); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true)); + Renderer::Set_Texture(0,m_destAlphaTexture); + 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); @@ -2433,9 +2434,9 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera) if (indexCount > 0 && vertexCount > 0) { - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(vb_access); + Renderer::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts m_numVisibleShoreLineTiles += indexCount/6; } @@ -2460,7 +2461,7 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera) return; //Check if video card is capable of using this effect - if (DX8Wrapper::getBackBufferFormat() != WW3D_FORMAT_A8R8G8B8) + if (Renderer::Get_Back_Buffer_Format() != WW3D_FORMAT_A8R8G8B8) return; //can't apply effect on cards without destination alpha Int vertexCount = 0; @@ -2498,12 +2499,12 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera) ShaderClass unlitShader=ShaderClass::_PresetOpaque2DShader; unlitShader.Set_Depth_Compare(ShaderClass::PASS_LEQUAL); - DX8Wrapper::Set_Shader(unlitShader); + Renderer::Set_Shader(unlitShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,m_destAlphaTexture); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true)); + Renderer::Set_Texture(0,m_destAlphaTexture); + 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); @@ -2776,9 +2777,9 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera) if (indexCount > 0 && vertexCount > 0) { - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(vb_access); + Renderer::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts m_numVisibleShoreLineTiles += indexCount/6; } @@ -2807,8 +2808,8 @@ void BaseHeightMapRenderObjClass::renderTrees(CameraClass * camera) if (m_map==nullptr) return; if (Scene==nullptr) return; if (m_treeBuffer) { - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); - DX8Wrapper::Set_Material(m_vertexMaterialClass); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); + Renderer::Set_Material(m_vertexMaterialClass); RTS3DScene *pMyScene = (RTS3DScene *)Scene; RefRenderObjListIterator pDynamicLightsIterator(pMyScene->getDynamicLights()); m_treeBuffer->drawTrees(camera, &pDynamicLightsIterator); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp index ca9c3688afb..d0f0191a112 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp @@ -82,6 +82,7 @@ #include "W3DDevice/GameClient/W3DWater.h" #include "W3DDevice/GameClient/W3DShroud.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/light.h" #include "WW3D2/scene.h" #include "W3DDevice/GameClient/W3DPoly.h" @@ -485,19 +486,19 @@ 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); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); ShaderClass::Invalidate(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Shader(m_shaderClass); st=W3DShaderManager::ST_FLAT_TERRAIN_BASE; //set default shader @@ -537,7 +538,7 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) W3DShaderManager::setTexture(2,m_stageTwoTexture); //cloud W3DShaderManager::setTexture(3,m_stageThreeTexture);//noise //Disable writes to destination alpha channel (if there is one) - if (DX8Wrapper::getBackBufferFormat() == WW3D_FORMAT_A8R8G8B8) { + if (Renderer::Get_Back_Buffer_Format() == WW3D_FORMAT_A8R8G8B8) { DX8Wrapper::Set_DX8_Render_State(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_RED); } @@ -549,8 +550,8 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) for (pass=0; passrestore(); ShaderClass::Invalidate(); if (!ShaderClass::Is_Backface_Culling_Inverted()) { - DX8Wrapper::Set_Material(m_vertexMaterialClass); + Renderer::Set_Material(m_vertexMaterialClass); if (Scene) { RTS3DScene *pMyScene = (RTS3DScene *)Scene; RefRenderObjListIterator pDynamicLightsIterator(pMyScene->getDynamicLights()); @@ -605,17 +606,17 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } #endif - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); drawScorches(); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); m_bridgeBuffer->drawBridges(&rinfo.Camera, m_disableTextures, m_stageTwoTexture); @@ -623,18 +624,18 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) TheTerrainTracksRenderObjClassSystem->flush(); ShaderClass::Invalidate(); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); m_waypointBuffer->drawWaypoints(rinfo); m_bibBuffer->renderBibs(); #endif // We do some custom blending, so tell the shader class to reset everything. - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Set_Material(nullptr); + Renderer::Set_Material(nullptr); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index 918bacef382..cf88f296194 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -83,6 +83,7 @@ #include "W3DDevice/GameClient/W3DWater.h" #include "W3DDevice/GameClient/W3DShroud.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/light.h" #include "WW3D2/scene.h" #include "W3DDevice/GameClient/W3DPoly.h" @@ -1922,19 +1923,19 @@ 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); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); ShaderClass::Invalidate(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); //Apply the shader and material - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Index_Buffer(m_indexBuffer,0); Bool doMultiPassWireFrame=FALSE; @@ -1960,11 +1961,11 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) { //wireframe pass //Set to vertex diffuse lighting - DX8Wrapper::Set_Material(m_vertexMaterialClass); + Renderer::Set_Material(m_vertexMaterialClass); //Set shader to non-textured solid color from vertex - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueSolidShader); + Renderer::Set_Shader(ShaderClass::_PresetOpaqueSolidShader); devicePasses=1; //one pass solid, next in wireframe. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR ); DX8Wrapper::Set_DX8_Render_State(D3DRS_TEXTUREFACTOR,0xff808080); doMultiPassWireFrame=TRUE; @@ -1975,8 +1976,8 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } else { - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Shader(m_shaderClass); st=W3DShaderManager::ST_TERRAIN_BASE; //set default shader @@ -2018,7 +2019,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) W3DShaderManager::setTexture(2,m_stageTwoTexture); //cloud W3DShaderManager::setTexture(3,m_stageThreeTexture);//noise //Disable writes to destination alpha channel (if there is one) - if (DX8Wrapper::getBackBufferFormat() == WW3D_FORMAT_A8R8G8B8) + if (Renderer::Get_Back_Buffer_Format() == WW3D_FORMAT_A8R8G8B8) DX8Wrapper::Set_DX8_Render_State(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_RED); } @@ -2029,8 +2030,8 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) if (!doMultiPassWireFrame) //multi-pass wireframe doesn't use regular shaders. { if (m_disableTextures ) { - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaque2DShader); - DX8Wrapper::Set_Texture(0,nullptr); + Renderer::Set_Shader(ShaderClass::_PresetOpaque2DShader); + Renderer::Set_Texture(0,nullptr); } else { W3DShaderManager::setShader(st, pass); } @@ -2039,17 +2040,17 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) for (j=0; jProcessVertices(0, 0, numVertex, m_xformedVertexBuffer[j*m_numVBTilesX+i], 0); ::OutputDebugString("did process vertex\n"); } if (m_xformedVertexBuffer) { // Note - m_xformedVertexBuffer should only be used for non T&L hardware. jba. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::_Get_D3D_Device8()->SetStreamSource( 0, m_xformedVertexBuffer[j*m_numVBTilesX+i], @@ -2058,7 +2059,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } #endif if (Is_Hidden() == 0) { - DX8Wrapper::Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); + Renderer::Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); } } @@ -2081,13 +2082,13 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) Int xCoordMin = m_map->getDrawOrgX(); Int xCoordMax = m_x+m_map->getDrawOrgX()-1; #ifdef DO_ROADS - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); if (!ShaderClass::Is_Backface_Culling_Inverted()) { - DX8Wrapper::Set_Material(m_vertexMaterialClass); + Renderer::Set_Material(m_vertexMaterialClass); if (Scene) { RTS3DScene *pMyScene = (RTS3DScene *)Scene; RefRenderObjListIterator pDynamicLightsIterator(pMyScene->getDynamicLights()); @@ -2099,17 +2100,17 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) if (m_propBuffer) { m_propBuffer->drawProps(rinfo); } - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); drawScorches(); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); m_bridgeBuffer->drawBridges(&rinfo.Camera, m_disableTextures, doCloud?m_stageTwoTexture:nullptr); @@ -2124,7 +2125,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } ShaderClass::Invalidate(); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); } else m_bridgeBuffer->drawBridges(&rinfo.Camera, m_disableTextures, m_stageTwoTexture); @@ -2135,11 +2136,11 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) m_bibBuffer->renderBibs(); // We do some custom blending, so tell the shader class to reset everything. - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Set_Material(nullptr); + Renderer::Set_Material(nullptr); } @@ -2148,26 +2149,26 @@ 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 - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Index_Buffer(m_indexBuffer,0); for (Int j=0; jProcessVertices(0, 0, numVertex, m_xformedVertexBuffer[j*m_numVBTilesX+i], 0); ::OutputDebugString("did process vertex\n"); } if (m_xformedVertexBuffer) { // Note - m_xformedVertexBuffer should only be used for non T&L hardware. jba. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::_Get_D3D_Device8()->SetStreamSource( 0, m_xformedVertexBuffer[j*m_numVBTilesX+i], @@ -2176,7 +2177,7 @@ void HeightMapRenderObjClass::renderTerrainPass(CameraClass *pCamera) } #endif if (Is_Hidden() == 0) { - DX8Wrapper::Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); + Renderer::Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); } } } @@ -2335,23 +2336,23 @@ void HeightMapRenderObjClass::renderExtraBlendTiles() maxBlendTiles += 16; //enlarge by 16 to reduce trashing. ShaderClass::Invalidate(); //invalidate to force shader to reset since we directly changed states - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(vb_access); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); ShaderClass shader=ShaderClass::_PresetOpaqueShader; shader.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); //disable writes to z - DX8Wrapper::Set_Shader(shader); + Renderer::Set_Shader(shader); if (TheGlobalData->m_use3WayTerrainBlends == 2) { shader.Set_Primary_Gradient(ShaderClass::GRADIENT_DISABLE); //disable lighting. shader.Set_Texturing(ShaderClass::TEXTURING_DISABLE); //disable texturing. - DX8Wrapper::Set_Shader(shader); - DX8Wrapper::Set_Texture(0,nullptr); //debug mode which draws terrain tiles in white. + Renderer::Set_Shader(shader); + Renderer::Set_Texture(0,nullptr); //debug mode which draws terrain tiles in white. if (Is_Hidden() == 0) { - DX8Wrapper::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts + Renderer::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts m_numVisibleExtraBlendTiles += indexCount/6; } } @@ -2386,7 +2387,7 @@ void HeightMapRenderObjClass::renderExtraBlendTiles() { W3DShaderManager::setShader(st, pass); if (Is_Hidden() == 0) { - DX8Wrapper::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts + Renderer::Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts m_numVisibleExtraBlendTiles += indexCount/6; } } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp index 5842874f376..43c193f9330 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp @@ -52,6 +52,7 @@ #include "GameLogic/GameLogic.h" #include "Common/MapObject.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #if defined(RTS_DEBUG) @@ -215,13 +216,13 @@ void W3DDebugIcons::Render(RenderInfoClass & rinfo) // Bool anyVanished = false; if (m_numDebugIcons==0) return; - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Texture(0, nullptr); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Texture(0, nullptr); + Renderer::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; @@ -302,10 +303,10 @@ void W3DDebugIcons::Render(RenderInfoClass & rinfo) } } if (numVertex == 0) break; - DX8Wrapper::Set_Shader(ShaderClass(SC_ALPHA)); - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles( 0,curIndex/3, 0, numVertex); //draw a quad, 2 triangles, 4 verts + Renderer::Set_Shader(ShaderClass(SC_ALPHA)); + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(vb_access); + Renderer::Draw_Triangles( 0,curIndex/3, 0, numVertex); //draw a quad, 2 triangles, 4 verts } if (anyVanished) { diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp index 4772d1798d2..3b6b9f9ad6b 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp @@ -2953,7 +2953,7 @@ VideoBuffer* W3DDisplay::createVideoBuffer() // first try to use the native format - WW3DFormat displayFormat = DX8Wrapper::getBackBufferFormat(); + WW3DFormat displayFormat = Renderer::Get_Back_Buffer_Format(); if ( DX8Wrapper::Get_Current_Caps()->Support_Texture_Format( displayFormat )) { diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp index 1a44e3e8fa4..629ddf5a36f 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp @@ -25,6 +25,7 @@ #include "W3DDevice/GameClient/TerrainTex.h" #include "W3DDevice/GameClient/WorldHeightMap.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" W3DScorch::W3DScorch(bool deduplicateScorches) : m_vertexScorch(nullptr) @@ -122,12 +123,12 @@ void W3DScorch::drawScorches(WorldHeightMap& map) { return; } - DX8Wrapper::Set_Index_Buffer(m_indexScorch, 0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexScorch); - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + Renderer::Set_Index_Buffer(m_indexScorch, 0); + Renderer::Set_Vertex_Buffer(m_vertexScorch); + Renderer::Set_Shader(ShaderClass::_PresetAlphaShader); - DX8Wrapper::Set_Texture(0, m_scorchTexture); - DX8Wrapper::Draw_Triangles(0, m_curNumScorchIndices / 3, 0, m_curNumScorchVertices); + Renderer::Set_Texture(0, m_scorchTexture); + Renderer::Draw_Triangles(0, m_curNumScorchIndices / 3, 0, m_curNumScorchVertices); } static Real getMapHeight(WorldHeightMap& map, Int x, Int y) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp index d0390f4eaf6..f07f75e5a34 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp @@ -234,15 +234,15 @@ Bool ScreenDefaultFilter::postRender(FilterModes mode, Coord2D &scrollDelta,Bool Int ScreenDefaultFilter::set(FilterModes mode) { VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Texture(0,nullptr); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_ALWAYS); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZWRITEENABLE,FALSE); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices return true; } @@ -250,7 +250,7 @@ Int ScreenDefaultFilter::set(FilterModes mode) void ScreenDefaultFilter::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } /*========= ScreenBWFilter =============================================================*/ @@ -415,15 +415,15 @@ Int ScreenBWFilter::set(FilterModes mode) } VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Texture(0,nullptr); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_ALWAYS); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZWRITEENABLE,FALSE); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices hr=DX8Wrapper::_Get_D3D_Device8()->SetPixelShader(m_dwBWPixelShader); DX8Wrapper::_Get_D3D_Device8()->SetPixelShaderConstant(0, D3DXVECTOR4(0.3f, 0.59f, 0.11f, 1.0f), 1); @@ -474,7 +474,7 @@ void ScreenBWFilter::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture DX8Wrapper::_Get_D3D_Device8()->SetPixelShader(0); //turn off pixel shader - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } Int ScreenBWFilter::shutdown() @@ -590,8 +590,8 @@ Bool ScreenBWFilterDOT3::postRender(FilterModes mode, Coord2D &scrollDelta,Bool ShaderClass::Invalidate(); //reset DOT3 blend from above. ShaderClass shader=ShaderClass::_PresetAlphaShader; shader.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); - DX8Wrapper::Set_Shader(shader); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(shader); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices //replace texture alpha with vertex alpha DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2); @@ -644,15 +644,15 @@ Int ScreenBWFilterDOT3::set(FilterModes mode) } VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Texture(0,nullptr); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_ALWAYS); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZWRITEENABLE,FALSE); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices return true; } @@ -662,7 +662,7 @@ Int ScreenBWFilterDOT3::set(FilterModes mode) void ScreenBWFilterDOT3::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } Int ScreenBWFilterDOT3::shutdown() @@ -868,12 +868,12 @@ Int ScreenCrossFadeFilter::set(FilterModes mode) { //rendering a quad with redirected rendering surface VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(ShaderClass::_PresetAlphaShader); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP); DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP); @@ -906,7 +906,7 @@ void ScreenCrossFadeFilter::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 1, D3DTSS_COLOROP, D3DTOP_DISABLE ); DX8Wrapper::Set_DX8_Texture_Stage_State( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } Int ScreenCrossFadeFilter::shutdown() @@ -1007,7 +1007,7 @@ Bool ScreenMotionBlurFilter::postRender(FilterModes mode, Coord2D &scrollDelta,B DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHABLENDENABLE,false); //draw polygons like this is very inefficient but for only 2 triangles, it's //not worth bothering with index/vertex buffers. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); pDev->SetVertexShader(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1); Coord2D center; @@ -1078,7 +1078,7 @@ Bool ScreenMotionBlurFilter::postRender(FilterModes mode, Coord2D &scrollDelta,B pDev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, v, sizeof(_TRANS_LIT_TEX_VERTEX)); DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHABLENDENABLE,true); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); { Int limit = m_maxCount; if (m_maxCount>30) limit = 30; @@ -1160,16 +1160,16 @@ Int ScreenMotionBlurFilter::set(FilterModes mode) //rendering a quad with redirected rendering surface motion blurred VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_ALWAYS); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZWRITEENABLE,FALSE); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices } return TRUE; } @@ -1177,7 +1177,7 @@ Int ScreenMotionBlurFilter::set(FilterModes mode) void ScreenMotionBlurFilter::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } Int ScreenMotionBlurFilter::shutdown() @@ -1220,22 +1220,22 @@ Int ShroudTextureShader::set(Int stage) { //force WW3D2 system to set it's states so it won't later overwrite our custom settings. VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. - DX8Wrapper::Set_Texture(stage, W3DShaderManager::getShaderTexture(0)); //shroud always stored in texture 0 + Renderer::Set_Texture(stage, W3DShaderManager::getShaderTexture(0)); //shroud always stored in texture 0 if (stage == 0) { #if defined(RTS_DEBUG) if (TheGlobalData && TheGlobalData->m_fogOfWarOn) - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaSpriteShader); + Renderer::Set_Shader(ShaderClass::_PresetAlphaSpriteShader); else - DX8Wrapper::Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); + Renderer::Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); #else - DX8Wrapper::Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); + Renderer::Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); #endif } - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION); DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2); @@ -1285,102 +1285,7 @@ Int ShroudTextureShader::set(Int stage) void ShroudTextureShader::reset() { - DX8Wrapper::Set_Texture(m_stageOfSet,nullptr); - DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_LESSEQUAL); - DX8Wrapper::Set_DX8_Texture_Stage_State(m_stageOfSet, D3DTSS_TEXCOORDINDEX, m_stageOfSet); - DX8Wrapper::Set_DX8_Texture_Stage_State(m_stageOfSet, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE); -} - -///Shroud layer rendering shader -class FlatShroudTextureShader : public W3DShaderInterface -{ - virtual Int set(Int pass) override; ///Peek_D3D_Texture()); - - DX8Wrapper::Set_DX8_Texture_Stage_State( stage, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - DX8Wrapper::Set_DX8_Texture_Stage_State( stage, D3DTSS_COLORARG2, D3DTA_CURRENT ); - DX8Wrapper::Set_DX8_Texture_Stage_State( stage, D3DTSS_COLOROP, D3DTOP_MODULATE ); - DX8Wrapper::Set_DX8_Texture_Stage_State( stage, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); - //DX8Wrapper::Apply_Render_State_Changes(); - - DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION); - DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2); - - //We need to scale so shroud texel stretches over one full terrain cell. Each texel - //is 1/128 the size of full texture. (assuming 128x128 vid-mem texture). - W3DShroud *shroud; - if ((shroud=TheTerrainRenderObject->getShroud()) != nullptr) - { - ///@todo: All this code really only need to be done once per camera/view. Find a way to optimize it out. - D3DXMATRIX curView; - DX8Wrapper::_Get_DX8_Transform(D3DTS_VIEW, curView); - - D3DXMATRIX inv; - float det; - D3DXMatrixInverse(&inv, &det, &curView); - - D3DXMATRIX scale,offset; - - //We need to make all world coordinates be relative to the heightmap data origin since that - //is where the shroud begins. - - float xoffset = 0; - float yoffset = 0; - Real width=shroud->getCellWidth(); - Real height=shroud->getCellHeight(); - - if (TheTerrainRenderObject->getMap()) - { - //subtract origin position from all coordinates. Origin is shifted by 1 cell width/height to allow for unused border texels. - xoffset = -(float)shroud->getDrawOriginX() + width; - yoffset = -(float)shroud->getDrawOriginY() + height; - } - - D3DXMatrixTranslation(&offset, xoffset, yoffset,0); - - width = 1.0f/(width*shroud->getTextureWidth()); - height = 1.0f/(height*shroud->getTextureHeight()); - D3DXMatrixScaling(&scale, width, height, 1); - curView = (inv * offset) * scale; - DX8Wrapper::_Set_DX8_Transform((D3DTRANSFORMSTATETYPE )(D3DTS_TEXTURE0+stage), curView); - } - m_stageOfSet=stage; - return TRUE; -} - -void FlatShroudTextureShader::reset() -{ - if (m_stageOfSet < MAX_TEXTURE_STAGES) - DX8Wrapper::Set_Texture(m_stageOfSet,nullptr); + Renderer::Set_Texture(m_stageOfSet,nullptr); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_LESSEQUAL); DX8Wrapper::Set_DX8_Texture_Stage_State(m_stageOfSet, D3DTSS_TEXCOORDINDEX, m_stageOfSet); DX8Wrapper::Set_DX8_Texture_Stage_State(m_stageOfSet, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE); @@ -1421,15 +1326,15 @@ Int MaskTextureShader::set(Int pass) //force WW3D2 system to set it's states so it won't later overwrite our custom settings. VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. //For now we're always going to project the texture coming from the crossfade effect - DX8Wrapper::Set_Texture(0, ScreenCrossFadeFilter::getCurrentMaskTexture()); + Renderer::Set_Texture(0, ScreenCrossFadeFilter::getCurrentMaskTexture()); ShaderClass shader=ShaderClass::_PresetOpaqueShader; shader.Set_Primary_Gradient(ShaderClass::GRADIENT_DISABLE); - DX8Wrapper::Set_Shader(shader); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Set_Shader(shader); + Renderer::Apply_Render_State_Changes(); D3DXMATRIX curView; DX8Wrapper::_Get_DX8_Transform(D3DTS_VIEW, curView); @@ -1488,7 +1393,7 @@ Int MaskTextureShader::set(Int pass) void MaskTextureShader::reset() { - DX8Wrapper::Set_Texture(0,nullptr); + Renderer::Set_Texture(0,nullptr); DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_TEXCOORDINDEX, 0); DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE); } @@ -1653,7 +1558,7 @@ void TerrainShader2Stage::updateNoise2(D3DXMATRIX *destMatrix,D3DXMATRIX *curVie Int TerrainShader2Stage::set(Int pass) { //force WW3D2 system to set it's states so it won't later overwrite our custom settings. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); if (TheGlobalData && (TheGlobalData->m_bilinearTerrainTex || TheGlobalData->m_trilinearTerrainTex)) { DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); @@ -1824,7 +1729,7 @@ Int TerrainShader8Stage::set(Int pass) if (pass == 0) { //force WW3D2 system to set it's states so it won't later overwrite our custom settings. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP); DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP); @@ -1930,7 +1835,7 @@ Int TerrainShader8Stage::set(Int pass) DX8Wrapper::Set_DX8_Texture_Stage_State( 2, D3DTSS_ALPHAOP, D3DTOP_DISABLE); DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_COLOROP, D3DTOP_DISABLE); DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_ALPHAOP, D3DTOP_DISABLE); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); terrainShader2Stage.set(2); } @@ -1948,7 +1853,7 @@ void TerrainShader8Stage::reset() DX8Wrapper::_Get_D3D_Device8()->SetTexture(0, nullptr); DX8Wrapper::_Get_D3D_Device8()->SetTexture(1, nullptr); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } Int TerrainShaderPixelShader::shutdown() @@ -2024,7 +1929,7 @@ Int TerrainShaderPixelShader::init() Int TerrainShaderPixelShader::set(Int pass) { //force WW3D2 system to set it's states so it won't later overwrite our custom settings. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); //setup base pass DX8Wrapper::_Get_D3D_Device8()->SetTexture(0, W3DShaderManager::getShaderTexture(0)->Peek_D3D_Texture()); @@ -2155,7 +2060,7 @@ void TerrainShaderPixelShader::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_PASSTHRU|3); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } ///Cloud layer rendering shader - used for objects similar to terrain which only need the cloud layer. @@ -2305,9 +2210,9 @@ Int RoadShaderPixelShader::init() Int RoadShaderPixelShader::set(Int pass) { - DX8Wrapper::Set_Texture(0,W3DShaderManager::getShaderTexture(0)); + Renderer::Set_Texture(0,W3DShaderManager::getShaderTexture(0)); //force WW3D2 system to set it's states so it won't later overwrite our custom settings. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); //tell pixel shader which UV set to use for each stage DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_TEXCOORDINDEX, 0 ); @@ -2346,8 +2251,8 @@ Int RoadShaderPixelShader::set(Int pass) DX8Wrapper::Set_DX8_Texture_Stage_State(2, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP); DX8Wrapper::Set_DX8_Texture_Stage_State(2, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP); - DX8Wrapper::Set_Texture(1,W3DShaderManager::getShaderTexture(1)); - DX8Wrapper::Set_Texture(2,W3DShaderManager::getShaderTexture(2)); + Renderer::Set_Texture(1,W3DShaderManager::getShaderTexture(1)); + Renderer::Set_Texture(2,W3DShaderManager::getShaderTexture(2)); DX8Wrapper::_Get_D3D_Device8()->SetPixelShader(m_dwBaseNoise2PixelShader); @@ -2388,7 +2293,7 @@ void RoadShaderPixelShader::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_PASSTHRU|3); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } Int RoadShader2Stage::init() @@ -2409,9 +2314,9 @@ Int RoadShader2Stage::init() Int RoadShader2Stage::set(Int pass) { //First stage always contains base texture. - DX8Wrapper::Set_Texture(0,W3DShaderManager::getShaderTexture(0)); + Renderer::Set_Texture(0,W3DShaderManager::getShaderTexture(0)); //Force system to apply world/view transforms. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_LESSEQUAL); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZWRITEENABLE,FALSE); @@ -2465,7 +2370,7 @@ Int RoadShader2Stage::set(Int pass) if (W3DShaderManager::getCurrentShader() == W3DShaderManager::ST_ROAD_BASE_NOISE12) { //full shader, apply noise 1 in pass 0. - DX8Wrapper::Set_Texture(1,W3DShaderManager::getShaderTexture(1)); + Renderer::Set_Texture(1,W3DShaderManager::getShaderTexture(1)); DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MINFILTER, D3DTEXF_LINEAR); DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); @@ -2478,7 +2383,7 @@ Int RoadShader2Stage::set(Int pass) if (W3DShaderManager::getCurrentShader() == W3DShaderManager::ST_ROAD_BASE_NOISE1) { //cloud map - DX8Wrapper::Set_Texture(1,W3DShaderManager::getShaderTexture(1)); + Renderer::Set_Texture(1,W3DShaderManager::getShaderTexture(1)); terrainShader2Stage.updateNoise1(&curView, &inv, false); //update curView with texture matrix DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MINFILTER, D3DTEXF_LINEAR); DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); @@ -2486,7 +2391,7 @@ Int RoadShader2Stage::set(Int pass) else { //light map - DX8Wrapper::Set_Texture(1,W3DShaderManager::getShaderTexture(2)); + Renderer::Set_Texture(1,W3DShaderManager::getShaderTexture(2)); terrainShader2Stage.updateNoise2(&curView,&inv, false); //update curView with texture matrix DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MINFILTER, D3DTEXF_POINT); DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); @@ -2516,7 +2421,7 @@ Int RoadShader2Stage::set(Int pass) else DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MIPFILTER, D3DTEXF_POINT); - DX8Wrapper::Set_Texture(1,W3DShaderManager::getShaderTexture(2)); + Renderer::Set_Texture(1,W3DShaderManager::getShaderTexture(2)); terrainShader2Stage.updateNoise2(&curView, &inv, false); //update curView with texture matrix DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_MINFILTER, D3DTEXF_POINT); @@ -2574,7 +2479,6 @@ W3DShaderInterface **MasterShaderList[]= { TerrainShaderList, ShroudShaderList, - FlatShroudShaderList, RoadShaderList, MaskShaderList, CloudShaderList, @@ -2897,10 +2801,10 @@ void W3DShaderManager::startRenderToTexture() ShaderClass shader=ShaderClass::_PresetOpaqueSolidShader; shader.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); shader.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); - DX8Wrapper::Set_Shader(shader); + Renderer::Set_Shader(shader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. drawViewport(0x00ffffff | (((Int)(TheWaterTransparency->m_minWaterOpacity*255.0f)) <<24)); @@ -3242,7 +3146,7 @@ Int W3DShaderManager::setShroudTex(Int stage) W3DShroud *shroud; if ((shroud=TheTerrainRenderObject->getShroud()) != nullptr) { - DX8Wrapper::Set_Texture(stage, shroud->getShroudTexture()); + Renderer::Set_Texture(stage, shroud->getShroudTexture()); DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION); DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2); @@ -3326,7 +3230,7 @@ void FlatTerrainShader2Stage::reset() Int FlatTerrainShader2Stage::set(Int pass) { //force WW3D2 system to set it's states so it won't later overwrite our custom settings. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); if (TheGlobalData && (TheGlobalData->m_bilinearTerrainTex || TheGlobalData->m_trilinearTerrainTex)) { DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); @@ -3605,10 +3509,10 @@ Int FlatTerrainShaderPixelShader::set(Int pass) DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP); DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP); - DX8Wrapper::Set_Texture(0, W3DShaderManager::getShaderTexture(2)); - DX8Wrapper::Set_Texture(1, W3DShaderManager::getShaderTexture(2)); + Renderer::Set_Texture(0, W3DShaderManager::getShaderTexture(2)); + Renderer::Set_Texture(1, W3DShaderManager::getShaderTexture(2)); //force WW3D2 system to set it's states so it won't later overwrite our custom settings. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); @@ -3747,7 +3651,7 @@ Int FlatTerrainShaderPixelShader::set(Int pass) DX8Wrapper::_Get_D3D_Device8()->SetPixelShader(m_dwBaseNoise2PixelShader); } DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_ALPHABLENDENABLE, false); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::_Get_D3D_Device8()->SetTexture(curStage, W3DShaderManager::getShaderTexture(3)->Peek_D3D_Texture()); return TRUE; } @@ -3775,7 +3679,7 @@ void FlatTerrainShaderPixelShader::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_PASSTHRU|3); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index 37fc8609328..5e288c97ca7 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -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" @@ -222,15 +223,15 @@ Bool W3DSmudgeManager::testHardwareSupport() } VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. ShaderClass shader=ShaderClass::_PresetOpaqueShader; shader.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); shader.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); - DX8Wrapper::Set_Shader(shader); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(shader); + Renderer::Set_Texture(0,nullptr); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices struct _TRANS_LIT_TEX_VERTEX { Vector4 p; @@ -446,15 +447,15 @@ 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); + Renderer::Set_Index_Buffer(m_indexBuffer,0); //DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueSpriteShader); - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + Renderer::Set_Shader(ShaderClass::_PresetAlphaShader); - DX8Wrapper::Set_Texture(0,m_backgroundTexture); + Renderer::Set_Texture(0,m_backgroundTexture); //Need these states in case texture is non-power-of-2 DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP); DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP); @@ -463,9 +464,9 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_MIPFILTER, D3DTEXF_NONE); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); //Disable reading texture alpha since it's undefined. //DX8Wrapper::Set_DX8_Texture_Stage_State(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); @@ -541,15 +542,15 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) } flushSmudges: - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles(0,smudgesInRenderBatch*4, 0, smudgesInRenderBatch*5); + Renderer::Draw_Triangles(0,smudgesInRenderBatch*4, 0, smudgesInRenderBatch*5); //Debug Code which draws outline around smudge /* DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME); DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE); DX8Wrapper::Set_DX8_Texture_Stage_State(0,D3DTSS_COLOROP,D3DTOP_SELECTARG2); - DX8Wrapper::Draw_Triangles( 0,smudgesInRenderBatch*4, 0, smudgesInRenderBatch*5); + Renderer::Draw_Triangles( 0,smudgesInRenderBatch*4, 0, smudgesInRenderBatch*5); DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID); DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE); DX8Wrapper::Set_DX8_Texture_Stage_State(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp index 1ae855872cc..a6f47d4eff4 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp @@ -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" @@ -394,12 +395,12 @@ 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); + Renderer::Set_Shader(ShaderClass::_PresetAlphaShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); //make sure we have all the resources we need @@ -409,7 +410,7 @@ void W3DSnowManager::render(RenderInfoClass &rinfo) if (!usePointSprites && !m_indexBuffer) ReAcquireResources(); - DX8Wrapper::Set_Texture(0,m_snowTexture); + Renderer::Set_Texture(0,m_snowTexture); if (!usePointSprites) { @@ -419,7 +420,7 @@ void W3DSnowManager::render(RenderInfoClass &rinfo) Vector3 snowCenter; - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); // Set the render states for using point sprites DX8Wrapper::Set_DX8_Render_State( D3DRS_POINTSPRITEENABLE, TRUE ); @@ -485,9 +486,9 @@ 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); + Renderer::Set_Index_Buffer(m_indexBuffer,0); Int y=cubeOriginY; //loop counter. Int cubeOriginXRemainder = cubeOriginX; //loop counter - adjusted when not all particles fit into render buffer. @@ -565,8 +566,8 @@ void W3DSnowManager::renderAsQuads(RenderInfoClass &rinfo, Int cubeOriginX, Int //Render any particles that may be queued up. if (numberInBatch) { - DX8Wrapper::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles( 0,numberInBatch*2, 0, numberInBatch*4); + Renderer::Set_Vertex_Buffer(vb_access); + Renderer::Draw_Triangles( 0,numberInBatch*2, 0, numberInBatch*4); totalPart -= numberInBatch; } } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp index 04e637acd33..721c0aec043 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp @@ -54,7 +54,7 @@ #include "GameClient/View.h" #include "W3DDevice/GameClient/TerrainTex.h" #include "W3DDevice/GameClient/HeightMap.h" -#include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/dx8renderer.h" #include "WW3D2/camera.h" @@ -763,18 +763,18 @@ void W3DTerrainBackground::drawVisiblePolys(RenderInfoClass & rinfo, Bool disabl return; } // Setup the vertex buffer, shader & texture. - DX8Wrapper::Set_Index_Buffer(m_indexTerrain,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexTerrain); + Renderer::Set_Index_Buffer(m_indexTerrain,0); + Renderer::Set_Vertex_Buffer(m_vertexTerrain); if (!disableTextures) { if (m_terrainTexture4X) { - DX8Wrapper::Set_Texture(1, m_terrainTexture4X); + Renderer::Set_Texture(1, m_terrainTexture4X); } else if (m_terrainTexture2X) { - DX8Wrapper::Set_Texture(1, m_terrainTexture2X); + Renderer::Set_Texture(1, m_terrainTexture2X); } else { - DX8Wrapper::Set_Texture(1, m_terrainTexture); + Renderer::Set_Texture(1, m_terrainTexture); } } - DX8Wrapper::Draw_Triangles( 0, m_curNumTerrainIndices/3, 0, m_curNumTerrainVertices); + Renderer::Draw_Triangles( 0, m_curNumTerrainIndices/3, 0, m_curNumTerrainVertices); #else if (m_curNumTerrainIndices == 0) { return; @@ -783,18 +783,18 @@ void W3DTerrainBackground::drawVisiblePolys(RenderInfoClass & rinfo, Bool disabl return; } // Setup the vertex buffer, shader & texture. - DX8Wrapper::Set_Index_Buffer(m_indexTerrain,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexTerrain); + Renderer::Set_Index_Buffer(m_indexTerrain,0); + Renderer::Set_Vertex_Buffer(m_vertexTerrain); if (!disableTextures) { if (m_terrainTexture4X) { - DX8Wrapper::Set_Texture(0, m_terrainTexture4X); + Renderer::Set_Texture(0, m_terrainTexture4X); } else if (m_terrainTexture2X) { - DX8Wrapper::Set_Texture(0, m_terrainTexture2X); + Renderer::Set_Texture(0, m_terrainTexture2X); } else { - DX8Wrapper::Set_Texture(0, m_terrainTexture); + Renderer::Set_Texture(0, m_terrainTexture); } } - DX8Wrapper::Draw_Triangles( 0, m_curNumTerrainIndices/3, 0, m_curNumTerrainVertices); + Renderer::Draw_Triangles( 0, m_curNumTerrainIndices/3, 0, m_curNumTerrainVertices); #endif } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp index b43c690cc82..f15400f7f5f 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp @@ -54,7 +54,7 @@ #include "WW3D2/rinfo.h" #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" @@ -899,21 +899,21 @@ Try improving the fit to vertical surfaces like cliffs. if (m_edgesToFlush >= 2) { ShaderClass::Invalidate(); - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBuffer); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Shader(m_shaderClass); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(m_vertexBuffer); 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()) { - DX8Wrapper::Set_Texture(0,mod->m_stageZeroTexture); - DX8Wrapper::Set_Index_Buffer_Index_Offset(trackStartIndex); - DX8Wrapper::Draw_Triangles( 0,(mod->m_activeEdgeCount-1)*2, 0, mod->m_activeEdgeCount*2); + Renderer::Set_Texture(0,mod->m_stageZeroTexture); + Renderer::Set_Index_Buffer_Index_Offset(trackStartIndex); + Renderer::Draw_Triangles( 0,(mod->m_activeEdgeCount-1)*2, 0, mod->m_activeEdgeCount*2); trackStartIndex += mod->m_activeEdgeCount*2; } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp index 1e214b9fb50..252915d704f 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp @@ -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" @@ -1573,8 +1574,8 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD //#define DEBUG_TEXTURE 1 #ifdef DEBUG_TEXTURE // Draw the combined texture for debugging. jba. [4/21/2003] // Setup the vertex buffer, shader & texture. - DX8Wrapper::Set_Shader(detailAlphaShader); - DX8Wrapper::Set_Texture(0,m_treeTexture); + Renderer::Set_Shader(detailAlphaShader); + Renderer::Set_Texture(0,m_treeTexture); DynamicIBAccessClass ib_access(BUFFER_TYPE_DYNAMIC_DX8, 6); //draw an infinite sky plane DynamicVBAccessClass vb_access(BUFFER_TYPE_DYNAMIC_DX8, DX8_FVF_XYZNDUV2, 4); @@ -1626,29 +1627,29 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD } } - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::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 + Renderer::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts #endif if (m_curNumTreeIndices[0] == 0) { return; } - DX8Wrapper::Set_Shader(detailAlphaShader); + Renderer::Set_Shader(detailAlphaShader); - DX8Wrapper::Set_Texture(0,m_treeTexture); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,m_treeTexture); + Renderer::Set_Texture(1,nullptr); DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_TEXCOORDINDEX, 0); DX8Wrapper::Set_DX8_Texture_Stage_State(1, D3DTSS_TEXCOORDINDEX, 1); // Draw all the trees. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); W3DShaderManager::setShroudTex(1); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); if (m_dwTreeVertexShader) { D3DXMATRIX matProj, matView, matWorld; @@ -1714,22 +1715,22 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD if (m_curNumTreeIndices[bNdx]==0) { break; } - DX8Wrapper::Set_Index_Buffer(m_indexTree[bNdx],0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexTree[bNdx]); + Renderer::Set_Index_Buffer(m_indexTree[bNdx],0); + Renderer::Set_Vertex_Buffer(m_vertexTree[bNdx]); // Render the waving grass - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); if (m_dwTreeVertexShader) { DX8Wrapper::_Get_D3D_Device8()->SetVertexShader(m_dwTreeVertexShader); DX8Wrapper::_Get_D3D_Device8()->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); DX8Wrapper::_Get_D3D_Device8()->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1); DX8Wrapper::_Get_D3D_Device8()->SetTextureStageState(1, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE); } - DX8Wrapper::Draw_Triangles( 0, m_curNumTreeIndices[bNdx]/3, 0, m_curNumTreeVertices[bNdx]); + Renderer::Draw_Triangles( 0, m_curNumTreeIndices[bNdx]/3, 0, m_curNumTreeVertices[bNdx]); } DX8Wrapper::Set_Vertex_Shader(DX8_FVF_XYZNDUV1); DX8Wrapper::Set_Pixel_Shader(0); - DX8Wrapper::Invalidate_Cached_Render_States(); //code above mucks around with W3D states so make sure we reset + Renderer::Invalidate_Cached_Render_States(); //code above mucks around with W3D states so make sure we reset } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index 47d2faaa7d7..69eaf92a0b6 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -206,12 +206,12 @@ static Bool wireframeForDebug = 0; void WaterRenderObjClass::setupJbaWaterShader() { if (!TheWaterTransparency->m_additiveBlend) - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + Renderer::Set_Shader(ShaderClass::_PresetAlphaShader); else - DX8Wrapper::Set_Shader(ShaderClass::_PresetAdditiveShader); + Renderer::Set_Shader(ShaderClass::_PresetAdditiveShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); m_riverTexture->Get_Filter().Set_Mag_Filter(TextureFilterClass::FILTER_TYPE_BEST); m_riverTexture->Get_Filter().Set_Min_Filter(TextureFilterClass::FILTER_TYPE_BEST); @@ -221,7 +221,7 @@ void WaterRenderObjClass::setupJbaWaterShader() // Setting *setting=&m_settings[m_tod]; - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ALPHAOP, D3DTOP_ADD ); if (!m_riverAlphaEdge->Is_Initialized()) m_riverAlphaEdge->Init(); @@ -1479,7 +1479,7 @@ void WaterRenderObjClass::renderMirror(CameraClass *cam) Matrix3D reflectedTransform(rRight,rUp,rN,rPos); - DX8Wrapper::Set_Render_Target_With_Z((TextureClass*)m_pReflectionTexture); + Renderer::Set_Render_Target_With_Z((TextureClass*)m_pReflectionTexture); // Clear the backbuffer WW3D::Begin_Render(false,true,Vector3(0.0f,0.0f,0.0f)); //clearing only z-buffer since background always filled with clouds @@ -1515,7 +1515,7 @@ void WaterRenderObjClass::renderMirror(CameraClass *cam) WW3D::End_Render(false); // Change the rendertarget back to the main backbuffer - DX8Wrapper::Set_Render_Target((IDirect3DSurface8 *)nullptr); + Renderer::Set_Default_Render_Target(); } //------------------------------------------------------------------------------------------------- @@ -1675,7 +1675,7 @@ void WaterRenderObjClass::Render(RenderInfoClass & rinfo) m_alphaClippingTexture->Set_Mag_Filter(TextureClass::FILTER_TYPE_NONE); m_alphaClippingTexture->Set_Mip_Mapping(TextureClass::FILTER_TYPE_NONE); - DX8Wrapper::Set_Texture(0,m_alphaClippingTexture); + Renderer::Set_Texture(0,m_alphaClippingTexture); //TODO: Will have to make sure that the shader system is not resetting my stage 1 setup //while rendering the scene @@ -1745,8 +1745,8 @@ void WaterRenderObjClass::Render(RenderInfoClass & rinfo) //Clean up after any pixel shaders. //Force render state apply so that the null texture gets applied to D3D, thus releasing shroud reference count. - DX8Wrapper::Apply_Render_State_Changes(); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Apply_Render_State_Changes(); + Renderer::Invalidate_Cached_Render_States(); if (m_waterTrackSystem) m_waterTrackSystem->flush(rinfo); @@ -1815,12 +1815,12 @@ void WaterRenderObjClass::drawSea(RenderInfoClass & rinfo) matWW3D._23=1.0f; matWW3D._44=1.0f; - DX8Wrapper::Set_Transform(D3DTS_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 + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface + Renderer::Set_Texture(0,nullptr); //we'll be setting our own textures, so reset W3D + Renderer::Set_Texture(1,nullptr); //we'll be setting our own textures, so reset W3D - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices Vector3 camTran; @@ -1973,7 +1973,7 @@ void WaterRenderObjClass::drawSea(RenderInfoClass & rinfo) m_pDev->SetPixelShader(0); //turn off pixel shader m_pDev->SetVertexShader(DX8_FVF_XYZDUV1); //turn off custom vertex shader - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); if (TheTerrainRenderObject->getShroud()) { @@ -2081,7 +2081,7 @@ void WaterRenderObjClass::renderSky() VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); ShaderClass m_shader2=ShaderClass::_PresetOpaqueShader; @@ -2089,9 +2089,9 @@ void WaterRenderObjClass::renderSky() m_shader2.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); //no need to check against z-buffer, sky always rendered first. m_shader2.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); //sky is always behind everything so no need to update z-buffer - DX8Wrapper::Set_Shader(m_shader2); + Renderer::Set_Shader(m_shader2); - DX8Wrapper::Set_Texture(0,setting->skyTexture); + Renderer::Set_Texture(0,setting->skyTexture); //draw an infinite sky plane DynamicVBAccessClass vb_access(BUFFER_TYPE_DYNAMIC_DX8,dynamic_fvf_type,4); @@ -2130,14 +2130,14 @@ void WaterRenderObjClass::renderSky() } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(vb_access); 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 + Renderer::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts } //------------------------------------------------------------------------------------------------- @@ -2177,11 +2177,11 @@ 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); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); ShaderClass m_shader2=ShaderClass::_PresetAlphaShader; @@ -2189,13 +2189,13 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) m_shader2.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); //no need to check against z-buffer, sky always rendered first. m_shader2.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); //sky is always behind everything so no need to update z-buffer - DX8Wrapper::Set_Shader(m_shader2); + Renderer::Set_Shader(m_shader2); // DX8Wrapper::Set_Shader(ShaderClass::/*_PresetAdditiveShader*//*_PresetOpaqueShader*/_PresetAlphaShader); // DX8Wrapper::Set_Texture(0,setting->skyBodyTexture); - DX8Wrapper::Set_Texture(0,m_alphaClippingTexture); + Renderer::Set_Texture(0,m_alphaClippingTexture); //draw an infinite sky plane DynamicVBAccessClass vb_access(BUFFER_TYPE_DYNAMIC_DX8,dynamic_fvf_type,4); @@ -2234,10 +2234,10 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts + Renderer::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts } //Defines for procedural water animation. @@ -2386,8 +2386,8 @@ void WaterRenderObjClass::renderWaterMesh() m_vertexBufferD3D->Unlock(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); //position the water surface - DX8Wrapper::Set_Material(m_meshVertexMaterialClass); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface + Renderer::Set_Material(m_meshVertexMaterialClass); ShaderClass::CullModeType oldCullMode=m_shaderClass.Get_Cull_Mode(); @@ -2396,25 +2396,25 @@ void WaterRenderObjClass::renderWaterMesh() m_shaderClass.Set_Cull_Mode(ShaderClass::CULL_MODE_ENABLE); //water should be visible from both sides - DX8Wrapper::Set_Shader(m_shaderClass); + Renderer::Set_Shader(m_shaderClass); #if 1 setupFlatWaterShader(); #else //DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,setting->waterTexture); - DX8Wrapper::Set_Texture(1,setting->waterTexture); + Renderer::Set_Texture(0,setting->waterTexture); + Renderer::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); DX8Wrapper::Set_DX8_Render_State(D3DRS_LOCALVIEWER,TRUE); */ - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices #endif @@ -2456,8 +2456,8 @@ void WaterRenderObjClass::renderWaterMesh() m_vertexBufferD3DOffset += mx*my; //advance past vertices already in buffer - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + Renderer::Set_Texture(0,nullptr); + Renderer::Set_Texture(1,nullptr); ShaderClass::Invalidate(); m_shaderClass.Set_Cull_Mode(oldCullMode); //water should be visible from both sides @@ -2726,7 +2726,7 @@ Real WaterRenderObjClass::getWaterHeight(Real x, Real y) //------------------------------------------------------------------------------------------------- void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) { - DX8Wrapper::Invalidate_Cached_Render_States(); ///@todo: Figure out why rivers don't draw without reset of all states. + Renderer::Invalidate_Cached_Render_States(); ///@todo: Figure out why rivers don't draw without reset of all states. Int rectangleCount = pTrig->getNumPoints()/2; rectangleCount--; @@ -2917,10 +2917,10 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) Matrix3D tm(1); - DX8Wrapper::Set_Transform(D3DTS_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 + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(vb_access); + Renderer::Set_Texture(0,m_riverTexture); //set to blue setupJbaWaterShader(); @@ -2939,7 +2939,7 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) if (wireframeForDebug) { DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME); } - DX8Wrapper::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); + Renderer::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); if (wireframeForDebug) { DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID); } @@ -2958,20 +2958,20 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) void WaterRenderObjClass::setupFlatWaterShader() { - DX8Wrapper::Set_Texture(0,m_riverTexture); + Renderer::Set_Texture(0,m_riverTexture); if (!TheWaterTransparency->m_additiveBlend) - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + Renderer::Set_Shader(ShaderClass::_PresetAlphaShader); else - DX8Wrapper::Set_Shader(ShaderClass::_PresetAdditiveShader); + Renderer::Set_Shader(ShaderClass::_PresetAdditiveShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); m_riverTexture->Get_Filter().Set_Mag_Filter(TextureFilterClass::FILTER_TYPE_BEST); m_riverTexture->Get_Filter().Set_Min_Filter(TextureFilterClass::FILTER_TYPE_BEST); m_riverTexture->Get_Filter().Set_Mip_Mapping(TextureFilterClass::FILTER_TYPE_BEST); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices //Setup shroud to render in same pass as water if (m_trapezoidWaterPixelShader) @@ -3281,14 +3281,14 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4]) Matrix3D tm(1); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); //position the water surface - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(vb_access); setupFlatWaterShader();// lorenzen sez use the alpha shader //If video card supports it and it's enabled, feather the water edge using destination alpha - if (DX8Wrapper::getBackBufferFormat() == WW3D_FORMAT_A8R8G8B8 && TheGlobalData->m_showSoftWaterEdge && TheWaterTransparency->m_transparentWaterDepth !=0) + if (Renderer::Get_Back_Buffer_Format() == WW3D_FORMAT_A8R8G8B8 && TheGlobalData->m_showSoftWaterEdge && TheWaterTransparency->m_transparentWaterDepth !=0) { DX8Wrapper::Set_DX8_Render_State(D3DRS_SRCBLEND, D3DBLEND_DESTALPHA ); if (!TheWaterTransparency->m_additiveBlend) DX8Wrapper::Set_DX8_Render_State(D3DRS_DESTBLEND, D3DBLEND_INVDESTALPHA ); @@ -3319,7 +3319,7 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4]) // } //#endif // FEATHER_WATER //#endif //WAVY_WATER - DX8Wrapper::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2);//lorenzen thinks this is where to itereate the soft shoreline effect + Renderer::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2);//lorenzen thinks this is where to itereate the soft shoreline effect } @@ -3328,7 +3328,7 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4]) if (false) { DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME); m_pDev->SetRenderState(D3DRS_ALPHABLENDENABLE , false); - DX8Wrapper::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); + Renderer::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); m_pDev->SetRenderState(D3DRS_ALPHABLENDENABLE , true); DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID); } @@ -3363,7 +3363,7 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4]) //Shroud shader uses z-compare of EQUAL which wouldn't work on water because it doesn't //write to the zbuffer. Change to LESSEQUAL. DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); - DX8Wrapper::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); + Renderer::Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_ZFUNC, D3DCMP_EQUAL); W3DShaderManager::resetShader(W3DShaderManager::ST_SHROUD_TEXTURE); } @@ -3396,12 +3396,12 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) V3=-vRight-vUp; VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Shader(ShaderClass::/*_PresetAdditiveShader*//*_PresetOpaqueShader*/_PresetAlphaShader); + Renderer::Set_Shader(ShaderClass::/*_PresetAdditiveShader*//*_PresetOpaqueShader*/_PresetAlphaShader); // DX8Wrapper::Set_Texture(0,setting->skyBodyTexture); - DX8Wrapper::Set_Texture(0,m_alphaClippingTexture); + Renderer::Set_Texture(0,m_alphaClippingTexture); //draw an infinite sky plane DynamicVBAccessClass vb_access(BUFFER_TYPE_DYNAMIC_DX8,4); @@ -3440,15 +3440,15 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(vb_access); 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 + Renderer::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts } #endif diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp index 9e34695c46a..09a7cb9bbe4 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp @@ -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. @@ -482,8 +483,8 @@ Int WaterTracksObj::render(DX8VertexBufferClass *vertexBuffer, Int batchStart) Int idxCount=(m_y-1)*(m_x*2+2) - 2; //index count - DX8Wrapper::Set_Index_Buffer(TheWaterTracksRenderSystem->m_indexBuffer,batchStart); - DX8Wrapper::Draw_Strip(0,idxCount-2,0,m_x*m_y); //there are always n-2 primitives for n index strip. + Renderer::Set_Index_Buffer(TheWaterTracksRenderSystem->m_indexBuffer,batchStart); + Renderer::Draw_Strip(0,idxCount-2,0,m_x*m_y); //there are always n-2 primitives for n index strip. return batchStart+m_x*m_y; //return new offset into unused area of vertex buffer } @@ -898,15 +899,15 @@ 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); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Shader(m_shaderClass); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBuffer); + Renderer::Set_Vertex_Buffer(m_vertexBuffer); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZBIAS,8); //Force apply of render states so we can override them. - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); if (TheTerrainRenderObject->getShroud()) { @@ -931,7 +932,7 @@ Try improving the fit to vertical surfaces like cliffs. while( mod ) { if (LastTextureType != mod->m_type) - DX8Wrapper::Set_Texture(0,mod->m_stageZeroTexture); + Renderer::Set_Texture(0,mod->m_stageZeroTexture); Int vertsRendered=mod->render(m_vertexBuffer,m_batchStart); @@ -1320,7 +1321,7 @@ void TestWaterUpdate() Real ydiff=terrainPointEnd.y - terrainPointStart.y; if (sqrt (xdiff * xdiff + ydiff * ydiff) <= waveTypeInfo[currentWaveType].m_finalWidth) { TheDisplay->drawLine(mouseAnchor.x, mouseAnchor.y, screenPoint.x, screenPoint.y,1,0xffccccff); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); ShaderClass::Invalidate(); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp index d2c63d5f9cc..00b63579c40 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp @@ -28,6 +28,28 @@ #include "WW3D2/lightenvironment.h" #include "WWDebug/wwdebug.h" +static unsigned short To_Unsigned_Short(unsigned int value) +{ + const unsigned short narrowed = static_cast(value); + WWASSERT(narrowed == value); + return narrowed; +} + +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; @@ -60,6 +82,66 @@ void Renderer::Shutdown() Initialized = false; } +int Renderer::Get_Render_Device_Count() +{ + return DX8Wrapper::Get_Render_Device_Count(); +} + +int Renderer::Get_Render_Device() +{ + return DX8Wrapper::Get_Render_Device(); +} + +const char * Renderer::Get_Render_Device_Name(int device_index) +{ + return DX8Wrapper::Get_Render_Device_Name(device_index); +} + +void Renderer::Get_Device_Resolution(int & width, int & height, int & bits, bool & windowed) +{ + DX8Wrapper::Get_Device_Resolution(width, height, bits, windowed); +} + +void Renderer::Get_Render_Target_Resolution(int & width, int & height, int & bits, bool & windowed) +{ + DX8Wrapper::Get_Render_Target_Resolution(width, height, bits, windowed); +} + +int Renderer::Get_Device_Resolution_Width() +{ + return DX8Wrapper::Get_Device_Resolution_Width(); +} + +int Renderer::Get_Device_Resolution_Height() +{ + return DX8Wrapper::Get_Device_Resolution_Height(); +} + +bool Renderer::Is_Windowed() +{ + return DX8Wrapper::Is_Windowed(); +} + +int Renderer::Get_Texture_Bitdepth() +{ + return DX8Wrapper::Get_Texture_Bitdepth(); +} + +int Renderer::Get_Swap_Interval() +{ + return DX8Wrapper::Get_Swap_Interval(); +} + +bool Renderer::Has_Stencil() +{ + return DX8Wrapper::Has_Stencil(); +} + +WW3DFormat Renderer::Get_Back_Buffer_Format() +{ + return DX8Wrapper::getBackBufferFormat(); +} + void Renderer::Set_Gamma(float gamma, float bright, float contrast, bool calibrate, bool uselimit) { DX8Wrapper::Set_Gamma(gamma, bright, contrast, calibrate, uselimit); @@ -104,6 +186,117 @@ void Renderer::Invalidate_Cached_Render_States() DX8Wrapper::Invalidate_Cached_Render_States(); } +void Renderer::Set_Render_Target_With_Z(TextureClass * texture, ZTextureClass * ztexture) +{ + DX8Wrapper::Set_Render_Target_With_Z(texture, ztexture); +} + +void Renderer::Set_Default_Render_Target() +{ + DX8Wrapper::Set_Render_Target(static_cast(nullptr)); +} + +bool Renderer::Is_Render_To_Texture() +{ + return DX8Wrapper::Is_Render_To_Texture(); +} + +void Renderer::Set_Shader(const ShaderClass & shader) +{ + DX8Wrapper::Set_Shader(shader); +} + +void Renderer::Set_Material(const VertexMaterialClass * material) +{ + DX8Wrapper::Set_Material(material); +} + +void Renderer::Set_Texture(unsigned stage, TextureBaseClass * texture) +{ + DX8Wrapper::Set_Texture(stage, texture); +} + +void Renderer::Apply_Render_State_Changes() +{ + DX8Wrapper::Apply_Render_State_Changes(); +} + +void Renderer::Set_Vertex_Buffer(const VertexBufferClass * vb, unsigned stream) +{ + DX8Wrapper::Set_Vertex_Buffer(vb, stream); +} + +void Renderer::Set_Vertex_Buffer(const DynamicVBAccessClass & vba) +{ + DX8Wrapper::Set_Vertex_Buffer(vba); +} + +void Renderer::Set_Index_Buffer(const IndexBufferClass * ib, unsigned int index_base_offset) +{ + DX8Wrapper::Set_Index_Buffer(ib, To_Unsigned_Short(index_base_offset)); +} + +void Renderer::Set_Index_Buffer(const DynamicIBAccessClass & iba, unsigned int index_base_offset) +{ + DX8Wrapper::Set_Index_Buffer(iba, To_Unsigned_Short(index_base_offset)); +} + +void Renderer::Set_Index_Buffer_Index_Offset(unsigned offset) +{ + DX8Wrapper::Set_Index_Buffer_Index_Offset(offset); +} + +void Renderer::Draw_Triangles(unsigned buffer_type, unsigned int start_index, unsigned int polygon_count, + unsigned int min_vertex_index, unsigned int vertex_count) +{ + DX8Wrapper::Draw_Triangles(buffer_type, To_Unsigned_Short(start_index), To_Unsigned_Short(polygon_count), + To_Unsigned_Short(min_vertex_index), To_Unsigned_Short(vertex_count)); +} + +void Renderer::Draw_Triangles(unsigned int start_index, unsigned int polygon_count, + unsigned int min_vertex_index, unsigned int vertex_count) +{ + DX8Wrapper::Draw_Triangles(To_Unsigned_Short(start_index), To_Unsigned_Short(polygon_count), + To_Unsigned_Short(min_vertex_index), To_Unsigned_Short(vertex_count)); +} + +void Renderer::Draw_Strip(unsigned int start_index, unsigned int polygon_count, + unsigned int min_vertex_index, unsigned int vertex_count) +{ + DX8Wrapper::Draw_Strip(To_Unsigned_Short(start_index), To_Unsigned_Short(polygon_count), + To_Unsigned_Short(min_vertex_index), To_Unsigned_Short(vertex_count)); +} + +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); @@ -113,3 +306,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); +} diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Renderer.h b/Core/Libraries/Source/WWVegas/WW3D2/Renderer.h index 435e4845a73..6e671f60f20 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Renderer.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/Renderer.h @@ -23,11 +23,25 @@ #pragma once +#include "WW3D2/ww3dformat.h" + // Forward declarations keep this header includable without pulling in the full -// WW3D2 header graph. All W3D types below are passed by pointer or reference. +// WW3D2 header graph. All W3D classes below are passed by pointer or reference. +class DynamicIBAccessClass; +class DynamicVBAccessClass; +class IndexBufferClass; +class LightClass; class LightEnvironmentClass; +class Matrix3D; +class Matrix4x4; +class ShaderClass; +class TextureBaseClass; +class TextureClass; class Vector3; +class VertexBufferClass; +class VertexMaterialClass; +class ZTextureClass; struct RenderViewport { @@ -39,13 +53,15 @@ struct RenderViewport float max_z; }; -// A method appears here once a caller routes through it, not in anticipation of -// one. The set below is what current callers route through; the rest of the -// DX8Wrapper API stays reachable through DX8Wrapper's static methods until a -// caller migrates, at which point the method it needs moves here. -// -// Method names intentionally match the existing DX8Wrapper names so migrating a -// caller is a mechanical DX8Wrapper::X(...) -> Renderer::X(...) rewrite. +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. class Renderer { @@ -54,6 +70,19 @@ class Renderer static bool Init(void * window, bool lite); static void Shutdown(); + static int Get_Render_Device_Count(); + static int Get_Render_Device(); + static const char * Get_Render_Device_Name(int device_index); + static void Get_Device_Resolution(int & width, int & height, int & bits, bool & windowed); + static void Get_Render_Target_Resolution(int & width, int & height, int & bits, bool & windowed); + static int Get_Device_Resolution_Width(); + static int Get_Device_Resolution_Height(); + static bool Is_Windowed(); + static int Get_Texture_Bitdepth(); + static int Get_Swap_Interval(); + static bool Has_Stencil(); + static WW3DFormat Get_Back_Buffer_Format(); + static void Set_Gamma(float gamma, float bright, float contrast, bool calibrate = true, bool uselimit = true); static void Begin_Scene(); @@ -65,6 +94,38 @@ class Renderer static void Set_Viewport(const RenderViewport & viewport); static void Invalidate_Cached_Render_States(); + static void Set_Render_Target_With_Z(TextureClass * texture, ZTextureClass * ztexture = nullptr); + static void Set_Default_Render_Target(); + static bool Is_Render_To_Texture(); + + static void Set_Shader(const ShaderClass & shader); + static void Set_Material(const VertexMaterialClass * material); + static void Set_Texture(unsigned stage, TextureBaseClass * texture); + static void Apply_Render_State_Changes(); + + static void Set_Vertex_Buffer(const VertexBufferClass * vb, unsigned stream = 0); + static void Set_Vertex_Buffer(const DynamicVBAccessClass & vba); + static void Set_Index_Buffer(const IndexBufferClass * ib, unsigned int index_base_offset); + static void Set_Index_Buffer(const DynamicIBAccessClass & iba, unsigned int index_base_offset); + static void Set_Index_Buffer_Index_Offset(unsigned offset); + + static void Draw_Triangles(unsigned buffer_type, unsigned int start_index, unsigned int polygon_count, + unsigned int min_vertex_index, unsigned int vertex_count); + static void Draw_Triangles(unsigned int start_index, unsigned int polygon_count, + unsigned int min_vertex_index, unsigned int vertex_count); + static void Draw_Strip(unsigned int start_index, unsigned int polygon_count, + unsigned int min_vertex_index, unsigned int vertex_count); + + 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); }; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8polygonrenderer.h b/Core/Libraries/Source/WWVegas/WW3D2/dx8polygonrenderer.h index 17b7558049a..0fc32fcdf7d 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8polygonrenderer.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8polygonrenderer.h @@ -44,6 +44,8 @@ #include "sortingrenderer.h" #include "WW3D2/mesh.h" #include "dx8wrapper.h" +#include "ww3d.h" +#include "Renderer.h" class DX8PolygonRendererClass; class DX8TextureCategoryClass; @@ -114,10 +116,10 @@ inline void DX8PolygonRendererClass::Render(/*const Matrix3D & tm,*/int base_ver // SNAPSHOT_SAY(("Set_Transform")); SNAPSHOT_SAY(("Set_Index_Buffer_Index_Offset(%d)",base_vertex_offset)); - DX8Wrapper::Set_Index_Buffer_Index_Offset(base_vertex_offset); + Renderer::Set_Index_Buffer_Index_Offset(base_vertex_offset); if (strip) { SNAPSHOT_SAY(("Draw_Strip(%d,%d,%d,%d)",index_offset,index_count-2,min_vertex_index,vertex_index_range)); - DX8Wrapper::Draw_Strip( + Renderer::Draw_Strip( index_offset, index_count-2, min_vertex_index, @@ -125,7 +127,7 @@ inline void DX8PolygonRendererClass::Render(/*const Matrix3D & tm,*/int base_ver } else { SNAPSHOT_SAY(("Draw_Triangles(%d,%d,%d,%d)",index_offset,index_count-2,min_vertex_index,vertex_index_range)); - DX8Wrapper::Draw_Triangles( + Renderer::Draw_Triangles( index_offset, index_count/3, min_vertex_index, @@ -141,7 +143,7 @@ inline void DX8PolygonRendererClass::Render_Sorted(/*const Matrix3D & tm,*/int b SNAPSHOT_SAY(("Set_Index_Buffer_Index_Offset(%d)",base_vertex_offset)); SNAPSHOT_SAY(("Insert_Sorting_Triangles(%d,%d,%d,%d)",index_offset,index_count-2,min_vertex_index,vertex_index_range)); - DX8Wrapper::Set_Index_Buffer_Index_Offset(base_vertex_offset); + Renderer::Set_Index_Buffer_Index_Offset(base_vertex_offset); SortingRendererClass::Insert_Triangles( bounding_sphere, index_offset, diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp index 579a467f6c2..dc461868c1c 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp @@ -42,6 +42,7 @@ #include "dx8renderer.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "dx8polygonrenderer.h" #include "dx8vertexbuffer.h" #include "dx8indexbuffer.h" @@ -350,8 +351,8 @@ void DX8RigidFVFCategoryContainer::Render_Delayed_Procedural_Material_Passes() if (!Any_Delayed_Passes_To_Render()) return; AnyDelayedPassesToRender=false; - DX8Wrapper::Set_Vertex_Buffer(vertex_buffer); - DX8Wrapper::Set_Index_Buffer(index_buffer,0); + Renderer::Set_Vertex_Buffer(vertex_buffer); + Renderer::Set_Index_Buffer(index_buffer,0); SNAPSHOT_SAY(("DX8RigidFVFCategoryContainer::Render_Delayed_Procedural_Material_Passes()")); @@ -808,8 +809,8 @@ void DX8RigidFVFCategoryContainer::Render() if (!Anything_To_Render()) return; AnythingToRender=false; - DX8Wrapper::Set_Vertex_Buffer(vertex_buffer); - DX8Wrapper::Set_Index_Buffer(index_buffer,0); + Renderer::Set_Vertex_Buffer(vertex_buffer); + Renderer::Set_Index_Buffer(index_buffer,0); SNAPSHOT_SAY(("DX8RigidFVFCategoryContainer::Render()")); for (unsigned p=0;pGet_Texture_Name().str() : "null")); - DX8Wrapper::Set_Texture(i,Peek_Texture(i)); + Renderer::Set_Texture(i,Peek_Texture(i)); } #ifdef WWDEBUG @@ -1703,7 +1704,7 @@ void DX8TextureCategoryClass::Render() SNAPSHOT_SAY(("Set_Material(%s)",Peek_Material() ? Peek_Material()->Get_Name() : "null")); VertexMaterialClass *vmaterial=(VertexMaterialClass *)Peek_Material(); //ugly cast from const but we'll restore it after changes so okay. -MW - DX8Wrapper::Set_Material(vmaterial); + Renderer::Set_Material(vmaterial); SNAPSHOT_SAY(("Set_Shader(%x)",Get_Shader().Get_Bits())); ShaderClass theShader = Get_Shader(); @@ -1716,16 +1717,16 @@ void DX8TextureCategoryClass::Render() //this will cause sorting errors on this mesh. //theAlphaShader.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); - DX8Wrapper::Set_Shader(theShader); + Renderer::Set_Shader(theShader); if (m_gForceMultiply && theShader.Get_Dst_Blend_Func() == ShaderClass::DSTBLEND_ZERO) { theShader.Set_Dst_Blend_Func(ShaderClass::DSTBLEND_SRC_COLOR); theShader.Set_Src_Blend_Func(ShaderClass::SRCBLEND_ZERO); - DX8Wrapper::Set_Shader(theShader); + Renderer::Set_Shader(theShader); //VertexMaterialClass *material = VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); //DX8Wrapper::Set_Material(material); //REF_PTR_RELEASE(material); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::Set_DX8_Render_State(D3DRS_SRCBLEND,D3DBLEND_DESTCOLOR); } @@ -1812,7 +1813,7 @@ void DX8TextureCategoryClass::Render() LightEnvironmentClass * lenv = mesh->Get_Lighting_Environment(); if (lenv != nullptr) { SNAPSHOT_SAY(("LightEnvironment, lights: %d",lenv->Get_Light_Count())); - DX8Wrapper::Set_Light_Environment(lenv); + Renderer::Set_Light_Environment(lenv); } else { SNAPSHOT_SAY(("No light environment")); @@ -1860,11 +1861,11 @@ void DX8TextureCategoryClass::Render() if (identity) { SNAPSHOT_SAY(("Set_World_Identity")); - DX8Wrapper::Set_World_Identity(); + Renderer::Set_World_Identity(); } else { SNAPSHOT_SAY(("Set_World_Transform")); - DX8Wrapper::Set_Transform(D3DTS_WORLD,*world_transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,*world_transform); } @@ -1913,8 +1914,8 @@ void DX8TextureCategoryClass::Render() theAlphaShader = theShader; //keep using additive blending. } vmaterial->Set_Opacity(mesh->Get_Alpha_Override()); - DX8Wrapper::Set_Shader(theAlphaShader); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Set_Shader(theAlphaShader); + Renderer::Apply_Render_State_Changes(); DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHAREF,(int)((float)0x60*mesh->Get_Alpha_Override())); renderer->Render(mesh->Get_Base_Vertex_Offset()); @@ -1922,7 +1923,7 @@ void DX8TextureCategoryClass::Render() DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHAREF,0x60); vmaterial->Set_Opacity(oldOpacity); //restore previous value vmaterial->Set_Diffuse(oldDiffuse.X,oldDiffuse.Y,oldDiffuse.Z); - DX8Wrapper::Set_Shader(theShader); //restore previous value + Renderer::Set_Shader(theShader); //restore previous value } else renderer->Render(mesh->Get_Base_Vertex_Offset()); @@ -1931,8 +1932,8 @@ void DX8TextureCategoryClass::Render() { oldMapper->Set_LastUsedSyncTime(oldUVOffsetSyncTime); oldMapper->Set_Current_UV_Offset(oldUVOffset); } - DX8Wrapper::Set_Material(nullptr); //force a reset of vertex material since we secretly changed opacity - DX8Wrapper::Set_Material(vmaterial); //restore previous material. + Renderer::Set_Material(nullptr); //force a reset of vertex material since we secretly changed opacity + Renderer::Set_Material(vmaterial); //restore previous material. } else renderer->Render(mesh->Get_Base_Vertex_Offset()); @@ -2213,8 +2214,8 @@ void DX8MeshRendererClass::Flush() Render_FVF_Category_Container_List_Delayed_Passes(*texture_category_container_lists_rigid[i]); } - DX8Wrapper::Set_Vertex_Buffer(nullptr); - DX8Wrapper::Set_Index_Buffer(nullptr,0); + Renderer::Set_Vertex_Buffer(nullptr); + Renderer::Set_Index_Buffer(nullptr,0); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h b/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h index ce3c723744b..b698ee6623b 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h @@ -706,6 +706,7 @@ class DX8Wrapper friend void DX8_Assert(); friend class WW3D; + friend class Renderer; friend class DX8IndexBufferClass; friend class DX8VertexBufferClass; }; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp index 3a93a8cfa56..e8431ade447 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp @@ -38,6 +38,7 @@ #include "dx8vertexbuffer.h" #include "dx8indexbuffer.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "sortingrenderer.h" #include "rinfo.h" #include "camera.h" @@ -250,8 +251,8 @@ void DynamicMeshModel::Render(RenderInfoClass & rinfo) /* ** Set vertex and index buffers */ - DX8Wrapper::Set_Vertex_Buffer(dynamic_vb); - DX8Wrapper::Set_Index_Buffer(dynamic_ib,0); + Renderer::Set_Vertex_Buffer(dynamic_vb); + Renderer::Set_Index_Buffer(dynamic_ib,0); /* ** Draw dynamesh, one pass at a time @@ -303,26 +304,26 @@ void DynamicMeshModel::Render(RenderInfoClass & rinfo) // Set the DX8 state to the first triangle's state if (texture_array0) { - DX8Wrapper::Set_Texture(0,texture_array0[0]); + Renderer::Set_Texture(0,texture_array0[0]); } else { - DX8Wrapper::Set_Texture(0,MatDesc->Peek_Single_Texture(pass, 0)); + Renderer::Set_Texture(0,MatDesc->Peek_Single_Texture(pass, 0)); } if (texture_array1) { - DX8Wrapper::Set_Texture(1,texture_array1[0]); + Renderer::Set_Texture(1,texture_array1[0]); } else { - DX8Wrapper::Set_Texture(1,MatDesc->Peek_Single_Texture(pass, 1)); + Renderer::Set_Texture(1,MatDesc->Peek_Single_Texture(pass, 1)); } if (material_array) { - DX8Wrapper::Set_Material(material_array[tris[0].I]); + Renderer::Set_Material(material_array[tris[0].I]); } else { - DX8Wrapper::Set_Material(MatDesc->Peek_Single_Material(pass)); + Renderer::Set_Material(MatDesc->Peek_Single_Material(pass)); } if (shader_array) { - DX8Wrapper::Set_Shader(shader_array[0]); + Renderer::Set_Shader(shader_array[0]); } else { - DX8Wrapper::Set_Shader(MatDesc->Get_Single_Shader(pass)); + Renderer::Set_Shader(MatDesc->Get_Single_Shader(pass)); } SphereClass sphere; @@ -334,7 +335,7 @@ void DynamicMeshModel::Render(RenderInfoClass & rinfo) SortingRendererClass::Insert_Triangles(sphere,0, DynamicMeshPNum, 0, DynamicMeshVNum); } else { - DX8Wrapper::Draw_Triangles(0, DynamicMeshPNum, 0, DynamicMeshVNum); + Renderer::Draw_Triangles(0, DynamicMeshPNum, 0, DynamicMeshVNum); } continue; } @@ -374,7 +375,7 @@ void DynamicMeshModel::Render(RenderInfoClass & rinfo) 1 + max_vert_idx - min_vert_idx); } else { - DX8Wrapper::Draw_Triangles( + Renderer::Draw_Triangles( (start_tri_idx * 3), (1 + cur_tri_idx - start_tri_idx), min_vert_idx, @@ -383,10 +384,10 @@ void DynamicMeshModel::Render(RenderInfoClass & rinfo) start_tri_idx = next_tri_idx; min_vert_idx = DynamicMeshVNum - 1; max_vert_idx = 0; - if (texture_changed) DX8Wrapper::Set_Texture(0,texture_array0[next_tri_idx]); - if (texture1_changed) DX8Wrapper::Set_Texture(1,texture_array1[next_tri_idx]); - if (material_changed) DX8Wrapper::Set_Material(material_array[tris[next_tri_idx].I]); - if (shader_changed) DX8Wrapper::Set_Shader(shader_array[next_tri_idx]); + if (texture_changed) Renderer::Set_Texture(0,texture_array0[next_tri_idx]); + if (texture1_changed) Renderer::Set_Texture(1,texture_array1[next_tri_idx]); + if (material_changed) Renderer::Set_Material(material_array[tris[next_tri_idx].I]); + if (shader_changed) Renderer::Set_Shader(shader_array[next_tri_idx]); } cur_tri_idx = next_tri_idx; @@ -432,7 +433,7 @@ void DynamicMeshClass::Render(RenderInfoClass & rinfo) const FrustumClass & frustum = rinfo.Camera.Get_Frustum(); if (CollisionMath::Overlap_Test(frustum, Get_Bounding_Box()) != CollisionMath::OUTSIDE) { - DX8Wrapper::Set_Transform(D3DTS_WORLD, Transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD, Transform); Model->Render(rinfo); } } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp index b2baa3f81aa..f22884ed5e0 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp @@ -54,6 +54,7 @@ #include "ww3d.h" #include "rinfo.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "dx8vertexbuffer.h" #include "dx8indexbuffer.h" #include "dx8fvf.h" @@ -267,13 +268,13 @@ void Line3DClass::Render(RenderInfoClass & rinfo) return; } - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,nullptr); + Renderer::Set_Shader(Shader); + Renderer::Set_Texture(0,nullptr); VertexMaterialClass *vm=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vm); + Renderer::Set_Material(vm); REF_PTR_RELEASE(vm); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); DynamicVBAccessClass vb(BUFFER_TYPE_DYNAMIC_DX8,dynamic_fvf_type,8); { @@ -299,9 +300,9 @@ void Line3DClass::Render(RenderInfoClass & rinfo) mem[i]=Indices[i]; } - DX8Wrapper::Set_Vertex_Buffer(vb); - DX8Wrapper::Set_Index_Buffer(ib,0); - DX8Wrapper::Draw_Triangles(0,36/3,0,8); + Renderer::Set_Vertex_Buffer(vb); + Renderer::Set_Index_Buffer(ib,0); + Renderer::Draw_Triangles(0,36/3,0,8); } /************************************************************************** diff --git a/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp b/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp index f0a6dbb72b9..df8e560e9a5 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp @@ -52,6 +52,7 @@ #include "texture.h" #include "statistics.h" #include "dx8wrapper.h" +#include "Renderer.h" bool MaterialPassClass::EnablePerPolygonCulling = true; @@ -117,11 +118,11 @@ MaterialPassClass::~MaterialPassClass() *=============================================================================================*/ void MaterialPassClass::Install_Materials() const { - DX8Wrapper::Set_Material(Peek_Material()); - DX8Wrapper::Set_Shader(Peek_Shader()); + Renderer::Set_Material(Peek_Material()); + Renderer::Set_Shader(Peek_Shader()); for (int i=0;iGet_Max_Textures_Per_Pass();++i) { - DX8Wrapper::Set_Texture(i,Peek_Texture(i)); + Renderer::Set_Texture(i,Peek_Texture(i)); } } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp b/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp index 58b9dfaf712..fee247c9a2e 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp @@ -81,6 +81,7 @@ #include "WWMath/vp.h" #include "WWMath/matrix4.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "dx8vertexbuffer.h" #include "dx8indexbuffer.h" #include "rinfo.h" @@ -880,7 +881,7 @@ void PointGroupClass::Render(RenderInfoClass &rinfo) // Get the world and view matrices Matrix4x4 view; - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view); // Transform the point locations from worldspace to camera space if needed // (i.e. if they are not already in camera space): @@ -919,12 +920,12 @@ void PointGroupClass::Render(RenderInfoClass &rinfo) // so set world and view matrices to identity and render 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_Material(PointMaterial); - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,Texture); + Renderer::Set_Material(PointMaterial); + Renderer::Set_Shader(Shader); + Renderer::Set_Texture(0,Texture); // Enable sorting if the primitives are translucent and alpha testing is not enabled. // TheSuperHackers @bugfix stephanmeesters 30/06/2026 However, do not apply sorting to ground-aligned particles. @@ -996,7 +997,7 @@ void PointGroupClass::Render(RenderInfoClass &rinfo) } // restore the matrices - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,view); } @@ -1220,7 +1221,7 @@ void PointGroupClass::Update_Arrays( Matrix4x4 view; Vector4 result; if (!Billboard) { - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view); } // Scale vertex offsets and add them to point locations to get vertex locations @@ -1710,7 +1711,7 @@ void PointGroupClass::RenderVolumeParticle(RenderInfoClass &rinfo, unsigned int // Get the world and view matrices Matrix4x4 view; - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view); @@ -1849,12 +1850,12 @@ void PointGroupClass::RenderVolumeParticle(RenderInfoClass &rinfo, unsigned int // so set world and view matrices to identity and render 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_Material(PointMaterial); - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,Texture); + Renderer::Set_Material(PointMaterial); + Renderer::Set_Shader(Shader); + Renderer::Set_Texture(0,Texture); // Enable sorting if the primitives are translucent and alpha testing is not enabled. // TheSuperHackers @info Volumetric particles, both billboarded and ground-aligned, must have sorting enabled to @@ -1932,5 +1933,5 @@ void PointGroupClass::RenderVolumeParticle(RenderInfoClass &rinfo, unsigned int // restore the matrices - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,view); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp index e82c97476ca..1336ff79498 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp @@ -89,6 +89,7 @@ #include "statistics.h" #include "predlod.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "dx8indexbuffer.h" #include "dx8vertexbuffer.h" #include "sortingrenderer.h" @@ -531,9 +532,9 @@ void RingRenderObjClass::render_ring(RenderInfoClass & rinfo,const Vector3 & cen } else { RingShader.Set_Texturing (ShaderClass::TEXTURING_DISABLE); } - DX8Wrapper::Set_Shader(RingShader); - DX8Wrapper::Set_Texture(0,RingTexture); - DX8Wrapper::Set_Material(RingMaterial); + Renderer::Set_Shader(RingShader); + Renderer::Set_Texture(0,RingTexture); + Renderer::Set_Material(RingMaterial); // Enable sorting if the primitive is translucent, alpha testing is not enabled, and sorting is enabled globally. const bool sort = (RingShader.Get_Dst_Blend_Func() != ShaderClass::DSTBLEND_ZERO) && (RingShader.Get_Alpha_Test() == ShaderClass::ALPHATEST_DISABLE) && (WW3D::Is_Sorting_Enabled()); @@ -586,13 +587,13 @@ void RingRenderObjClass::render_ring(RenderInfoClass & rinfo,const Vector3 & cen } } - DX8Wrapper::Set_Vertex_Buffer(vb); - DX8Wrapper::Set_Index_Buffer(ib,0); + Renderer::Set_Vertex_Buffer(vb); + Renderer::Set_Index_Buffer(ib,0); if (sort) { SortingRendererClass::Insert_Triangles(Get_Bounding_Sphere(), 0, ring.face_ct, 0, ring.Vertex_ct); } else { - DX8Wrapper::Draw_Triangles(0, ring.face_ct, 0, ring.Vertex_ct); + Renderer::Draw_Triangles(0, ring.face_ct, 0, ring.Vertex_ct); } } @@ -720,9 +721,9 @@ void RingRenderObjClass::Render(RenderInfoClass & rinfo) Matrix3D temp; temp.Look_At(obj_position, obj_position + camera_z_vector, 0.0f); - DX8Wrapper::Set_Transform(D3DTS_WORLD, temp); + Renderer::Set_Transform(RB_TRANSFORM_WORLD, temp); } else { - DX8Wrapper::Set_Transform(D3DTS_WORLD, Transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD, Transform); } // diff --git a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp index 14ea0a98d74..da5ebff801b 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp @@ -41,6 +41,7 @@ #include "ww3d.h" #include "rinfo.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "sortingrenderer.h" #include "WWMath/vp.h" #include "WWMath/Vector3i.h" @@ -218,11 +219,11 @@ void SegLineRendererClass::Render ) { Matrix4x4 view; - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view); 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); /* ** Handle texture UV offset animation (done once for entire line). @@ -1175,23 +1176,23 @@ void SegLineRendererClass::Render } } - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(Verts); - DX8Wrapper::Set_Material(mat); - DX8Wrapper::Set_Texture(0,Texture); - DX8Wrapper::Set_Shader(shader); + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(Verts); + Renderer::Set_Material(mat); + Renderer::Set_Texture(0,Texture); + Renderer::Set_Shader(shader); if (sorting) { SortingRendererClass::Insert_Triangles(obj_sphere,0,tidx,0,vnum); } else { - DX8Wrapper::Draw_Triangles(0,tidx,0,vnum); + Renderer::Draw_Triangles(0,tidx,0,vnum); } REF_PTR_RELEASE(mat); } - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,view); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp index 4ae57efd214..3a6f8b24427 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp @@ -42,6 +42,7 @@ #include "dx8vertexbuffer.h" #include "dx8indexbuffer.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "vertmaterial.h" #include "texture.h" #include "d3d8.h" @@ -216,7 +217,7 @@ void SortingRendererClass::Insert_Triangles( unsigned short vertex_count) { if (!WW3D::Is_Sorting_Enabled()) { - DX8Wrapper::Draw_Triangles(start_index,polygon_count,min_vertex_index,vertex_count); + Renderer::Draw_Triangles(start_index,polygon_count,min_vertex_index,vertex_count); return; } @@ -364,13 +365,13 @@ void SortingRendererClass::Insert_To_Sorting_Pool(SortingNodeStruct* state) static void Apply_Render_State(RenderStateStruct& render_state) { - DX8Wrapper::Set_Shader(render_state.shader); + Renderer::Set_Shader(render_state.shader); - DX8Wrapper::Set_Material(render_state.material); + Renderer::Set_Material(render_state.material); for (int i=0;iGet_Max_Textures_Per_Pass();++i) { - DX8Wrapper::Set_Texture(i,render_state.Textures[i]); + Renderer::Set_Texture(i,render_state.Textures[i]); } DX8Wrapper::_Set_DX8_Transform(D3DTS_WORLD,render_state.world); @@ -541,10 +542,10 @@ void SortingRendererClass::Flush_Sorting_Pool() // Set index buffer and render! - DX8Wrapper::Set_Index_Buffer(dyn_ib_access,0); // Override with this buffer (do something to prevent need for this!) - DX8Wrapper::Set_Vertex_Buffer(dyn_vb_access); // Override with this buffer (do something to prevent need for this!) + Renderer::Set_Index_Buffer(dyn_ib_access,0); // Override with this buffer (do something to prevent need for this!) + Renderer::Set_Vertex_Buffer(dyn_vb_access); // Override with this buffer (do something to prevent need for this!) - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); unsigned count_to_render=1; unsigned start_index=0; @@ -554,7 +555,7 @@ void SortingRendererClass::Flush_Sorting_Pool() SortingNodeStruct* state=overlapping_nodes[node_id]; Apply_Render_State(state->sorting_state); - DX8Wrapper::Draw_Triangles( + Renderer::Draw_Triangles( start_index*3, count_to_render, state->min_vertex_index, @@ -572,7 +573,7 @@ void SortingRendererClass::Flush_Sorting_Pool() SortingNodeStruct* state=overlapping_nodes[node_id]; Apply_Render_State(state->sorting_state); - DX8Wrapper::Draw_Triangles( + Renderer::Draw_Triangles( start_index*3, count_to_render, state->min_vertex_index, @@ -603,8 +604,8 @@ void SortingRendererClass::Flush() WWPROFILE("SortingRenderer::Flush"); Matrix4x4 old_view; Matrix4x4 old_world; - DX8Wrapper::Get_Transform(D3DTS_VIEW,old_view); - DX8Wrapper::Get_Transform(D3DTS_WORLD,old_world); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,old_view); + Renderer::Get_Transform(RB_TRANSFORM_WORLD,old_world); // TheSuperHackers @perf stephanmeesters 04/07/2026 // Splice nodes that have no bounding information (Z=0.0) at the correct location into the sorted list. @@ -624,7 +625,7 @@ void SortingRendererClass::Flush() } else { DX8Wrapper::Set_Render_State(state->sorting_state); - DX8Wrapper::Draw_Triangles(state->start_index,state->polygon_count,state->min_vertex_index,state->vertex_count); + Renderer::Draw_Triangles(state->start_index,state->polygon_count,state->min_vertex_index,state->vertex_count); DX8Wrapper::Release_Render_State(); Release_Refs(state); clean_list.push_front(state); @@ -636,16 +637,16 @@ void SortingRendererClass::Flush() Flush_Sorting_Pool(); DX8Wrapper::_Enable_Triangle_Draw(old_enable); - DX8Wrapper::Set_Index_Buffer(nullptr,0); - DX8Wrapper::Set_Vertex_Buffer(nullptr); + Renderer::Set_Index_Buffer(nullptr,0); + Renderer::Set_Vertex_Buffer(nullptr); total_sorting_vertices=0; DynamicIBAccessClass::_Reset(false); DynamicVBAccessClass::_Reset(false); - DX8Wrapper::Set_Transform(D3DTS_VIEW,old_view); - DX8Wrapper::Set_Transform(D3DTS_WORLD,old_world); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,old_view); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,old_world); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp index b4d3cde9dad..bb898c3fcb9 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp @@ -86,6 +86,7 @@ #include "camera.h" #include "statistics.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "dx8vertexbuffer.h" #include "dx8indexbuffer.h" #include "sortingrenderer.h" @@ -468,9 +469,9 @@ void SphereRenderObjClass::render_sphere() } else { SphereShader.Set_Texturing (ShaderClass::TEXTURING_DISABLE); } - DX8Wrapper::Set_Shader(SphereShader); - DX8Wrapper::Set_Texture(0,SphereTexture); - DX8Wrapper::Set_Material(SphereMaterial); + Renderer::Set_Shader(SphereShader); + Renderer::Set_Texture(0,SphereTexture); + Renderer::Set_Material(SphereMaterial); // Enable sorting if the primitive is translucent, alpha testing is not enabled, and sorting is enabled globally. const bool sort = (SphereShader.Get_Dst_Blend_Func() != ShaderClass::DSTBLEND_ZERO) && (SphereShader.Get_Alpha_Test() == ShaderClass::ALPHATEST_DISABLE) && (WW3D::Is_Sorting_Enabled()); @@ -517,13 +518,13 @@ void SphereRenderObjClass::render_sphere() } } - DX8Wrapper::Set_Vertex_Buffer(vb); - DX8Wrapper::Set_Index_Buffer(ib,0); + Renderer::Set_Vertex_Buffer(vb); + Renderer::Set_Index_Buffer(ib,0); if (sort) { SortingRendererClass::Insert_Triangles(Get_Bounding_Sphere(), 0, mesh.face_ct, 0, mesh.Vertex_ct); } else { - DX8Wrapper::Draw_Triangles(0,mesh.face_ct,0,mesh.Vertex_ct); + Renderer::Draw_Triangles(0,mesh.face_ct,0,mesh.Vertex_ct); } } @@ -659,7 +660,7 @@ void SphereRenderObjClass::Render(RenderInfoClass & rinfo) // Camera Align if (Flags & USE_CAMERA_ALIGN) { Matrix4x4 view,ident(true); - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view); Vector4 wpos(Transform[0][3],Transform[1][3],Transform[2][3],1); Vector4 cpos; @@ -670,12 +671,12 @@ void SphereRenderObjClass::Render(RenderInfoClass & rinfo) 1.0f, 0.0f, 0.0f, cpos.Z); tm.Scale(real_scale); - DX8Wrapper::Set_Transform(D3DTS_WORLD,ident); - DX8Wrapper::Set_Transform(D3DTS_VIEW,tm); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,ident); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,tm); render_sphere(); - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,view); } else { - DX8Wrapper::Set_Transform(D3DTS_WORLD,temp); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,temp); render_sphere(); } } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp index 6fd2028dfb4..d2adc5e53e7 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp @@ -29,6 +29,7 @@ #include "ww3d.h" #include "rinfo.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "sortingrenderer.h" #include "WWMath/vp.h" #include "WWMath/Vector3i.h" @@ -311,11 +312,11 @@ void StreakRendererClass::RenderStreak ) { Matrix4x4 view; - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view); 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); /* ** Handle texture UV offset animation (done once for entire line). @@ -1304,7 +1305,7 @@ void StreakRendererClass::RenderStreak VertexMaterialClass *mat; mat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(mat); + Renderer::Set_Material(mat); REF_PTR_RELEASE(mat); // If Texture is non-null enable texturing in shader - otherwise disable. @@ -1367,10 +1368,10 @@ void StreakRendererClass::RenderStreak } - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(Verts); - DX8Wrapper::Set_Texture(0,Texture); - DX8Wrapper::Set_Shader(shader); + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(Verts); + Renderer::Set_Texture(0,Texture); + Renderer::Set_Shader(shader); if (sorting) { @@ -1378,12 +1379,12 @@ void StreakRendererClass::RenderStreak } else { - DX8Wrapper::Draw_Triangles(0,triangleIndex,0,vnum); + Renderer::Draw_Triangles(0,triangleIndex,0,vnum); } } - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,view); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texproject.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texproject.cpp index 38b5137398d..d30cc7776d8 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texproject.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texproject.cpp @@ -84,7 +84,7 @@ #include "matpass.h" #include "bwrender.h" #include "assetmgr.h" -#include "dx8wrapper.h" +#include "Renderer.h" // DEBUG DEBUG @@ -1136,7 +1136,7 @@ bool TexProjectClass::Compute_Texture /* ** Set the render target */ - DX8Wrapper::Set_Render_Target_With_Z (rtarget,ztarget); + Renderer::Set_Render_Target_With_Z (rtarget,ztarget); /* ** Set up the camera @@ -1161,7 +1161,7 @@ bool TexProjectClass::Compute_Texture WW3D::End_Render(false); WW3D::Activate_Snapshot(snapshot); // End_Render() ends the shapsnot, so restore the state - DX8Wrapper::Set_Render_Target((IDirect3DSurface8 *)nullptr); + Renderer::Set_Default_Render_Target(); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp b/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp index 3f2b9265f89..90c90865a91 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp @@ -503,7 +503,7 @@ void *WW3D::Get_Window() *=============================================================================================*/ bool WW3D::Is_Windowed() { - return DX8Wrapper::Is_Windowed(); + return Renderer::Is_Windowed(); } /*********************************************************************************************** @@ -547,7 +547,7 @@ WW3DErrorType WW3D::Toggle_Windowed () *=============================================================================================*/ int WW3D::Get_Render_Device() { - return DX8Wrapper::Get_Render_Device(); + return Renderer::Get_Render_Device(); } @@ -586,7 +586,7 @@ const RenderDeviceDescClass & WW3D::Get_Render_Device_Desc(int deviceidx) *=============================================================================================*/ int WW3D::Get_Render_Device_Count() { - return DX8Wrapper::Get_Render_Device_Count(); + return Renderer::Get_Render_Device_Count(); } @@ -605,7 +605,7 @@ int WW3D::Get_Render_Device_Count() *=============================================================================================*/ const char * WW3D::Get_Render_Device_Name(int device_index) { - return DX8Wrapper::Get_Render_Device_Name(device_index); + return Renderer::Get_Render_Device_Name(device_index); } @@ -648,7 +648,7 @@ WW3DErrorType WW3D::Set_Device_Resolution(int width,int height,int bits,int wind *=============================================================================================*/ void WW3D::Get_Render_Target_Resolution(int & set_w,int & set_h,int & set_bits,bool & set_windowed) { - DX8Wrapper::Get_Render_Target_Resolution(set_w,set_h,set_bits,set_windowed); + Renderer::Get_Render_Target_Resolution(set_w,set_h,set_bits,set_windowed); } @@ -667,7 +667,7 @@ void WW3D::Get_Render_Target_Resolution(int & set_w,int & set_h,int & set_bits,b *=============================================================================================*/ void WW3D::Get_Device_Resolution(int & set_w,int & set_h,int & set_bits,bool & set_windowed) { - DX8Wrapper::Get_Device_Resolution(set_w,set_h,set_bits,set_windowed); + Renderer::Get_Device_Resolution(set_w,set_h,set_bits,set_windowed); } @@ -1233,7 +1233,7 @@ void WW3D::Set_Ext_Swap_Interval(long swap) *=============================================================================================*/ long WW3D::Get_Ext_Swap_Interval() { - return DX8Wrapper::Get_Swap_Interval(); + return Renderer::Get_Swap_Interval(); } @@ -1290,12 +1290,12 @@ int WW3D::Get_Collision_Box_Display_Mask() void WW3D::Normalize_Coordinates(int x, int y, float &fx, float &fy) { // clip the coordinates back into the resolution of the screen - x = Bound(x, 0, DX8Wrapper::Get_Device_Resolution_Width()); - y = Bound(y, 0, DX8Wrapper::Get_Device_Resolution_Height()); + x = Bound(x, 0, Renderer::Get_Device_Resolution_Width()); + y = Bound(y, 0, Renderer::Get_Device_Resolution_Height()); // now that the coordinates are clipped convert them to their normalized values. - fx = (float)x / DX8Wrapper::Get_Device_Resolution_Width(); - fy = (float)y / DX8Wrapper::Get_Device_Resolution_Height(); + fx = (float)x / Renderer::Get_Device_Resolution_Width(); + fy = (float)y / Renderer::Get_Device_Resolution_Height(); } @@ -2025,7 +2025,7 @@ void WW3D::Set_Texture_Bitdepth(int bitdepth) int WW3D::Get_Texture_Bitdepth() { - return DX8Wrapper::Get_Texture_Bitdepth(); + return Renderer::Get_Texture_Bitdepth(); } void WW3D::Set_MSAA_Mode(MultiSampleModeEnum mode) diff --git a/Core/Tools/W3DView/ScreenCursor.cpp b/Core/Tools/W3DView/ScreenCursor.cpp index 8c358221e59..34100d5a22c 100644 --- a/Core/Tools/W3DView/ScreenCursor.cpp +++ b/Core/Tools/W3DView/ScreenCursor.cpp @@ -41,6 +41,7 @@ #include "WW3D2/rinfo.h" #include "WW3D2/texture.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/dx8vertexbuffer.h" #include "WW3D2/dx8indexbuffer.h" #include "WW3D2/sortingrenderer.h" @@ -288,12 +289,12 @@ ScreenCursorClass::Render (RenderInfoClass &rinfo) /* ** Apply the shader and material */ - DX8Wrapper::Set_Material(m_pVertMaterial.Peek()); - DX8Wrapper::Set_Shader(ShaderClass::_PresetATestBlend2DShader); - DX8Wrapper::Set_Texture(0,m_pTexture.Peek()); + Renderer::Set_Material(m_pVertMaterial.Peek()); + Renderer::Set_Shader(ShaderClass::_PresetATestBlend2DShader); + Renderer::Set_Texture(0,m_pTexture.Peek()); - DX8Wrapper::Set_Vertex_Buffer(vbaccess); - DX8Wrapper::Set_Index_Buffer(ibaccess,0); + Renderer::Set_Vertex_Buffer(vbaccess); + Renderer::Set_Index_Buffer(ibaccess,0); SphereClass sphere; Get_Obj_Space_Bounding_Sphere(sphere); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp index e0ac3a3d310..edebf1d9b00 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp @@ -37,6 +37,7 @@ #include "WW3D2/camera.h" #include "WW3D2/light.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/hlod.h" #include "WW3D2/mesh.h" #include "WW3D2/meshmdl.h" @@ -631,14 +632,14 @@ static void RenderVBTile(TextureClass *text, Real ox, Real oy, Real ou, Real ov, ib[4]=0; } - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Set_Texture(0, text); + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Vertex_Buffer(vb_access); + Renderer::Set_Texture(0, text); DX8Wrapper::Set_DX8_Render_State(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); DX8Wrapper::Set_DX8_Render_State(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHABLENDENABLE, TRUE ); ShaderClass::Invalidate(); //invalidate to force shader to reset since we directly changed states - DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts + Renderer::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts } //Debug code used to draw some dummy polygons. @@ -654,12 +655,12 @@ void TestBlendRender(RenderInfoClass & rinfo) } VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); Matrix3D tm(1); //identity - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); //grass RenderVBTile(grass,580.0f,480.0f,0.0f,0.0f); RenderVBTile(grass,590.0f,480.0f,0.25f,0.0f); @@ -694,21 +695,21 @@ void W3DProjectedShadowManager::flushDecals(W3DShadowTexture *texture, ShadowTyp if (!m_pDev) return; //no D3D Device to render VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,texture->getTexture()); + Renderer::Set_Texture(0,texture->getTexture()); // DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); //good for debugging, draws without alpha switch (type) { case SHADOW_DECAL: - DX8Wrapper::Set_Shader(ShaderClass::_PresetMultiplicativeShader); + Renderer::Set_Shader(ShaderClass::_PresetMultiplicativeShader); break; case SHADOW_ALPHA_DECAL: - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + Renderer::Set_Shader(ShaderClass::_PresetAlphaShader); break; case SHADOW_ADDITIVE_DECAL: - DX8Wrapper::Set_Shader(ShaderClass::_PresetAdditiveShader); + Renderer::Set_Shader(ShaderClass::_PresetAdditiveShader); break; } @@ -716,7 +717,7 @@ void W3DProjectedShadowManager::flushDecals(W3DShadowTexture *texture, ShadowTyp // DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL); //_PresetAlphaSpriteShader - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices //Alpha Blended Shadows // m_pDev->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); @@ -1399,7 +1400,7 @@ Int W3DProjectedShadowManager::renderShadows(RenderInfoClass & rinfo) //terrain is always visible and affected by all shadows so must render projector->Peek_Material_Pass()->Install_Materials(); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices if (renderProjectedTerrainShadow(shadow, aaBox)) projectionCount++; projector->Peek_Material_Pass()->UnInstall_Materials(); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp index e2ca0168767..9801337f5bd 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp @@ -43,6 +43,7 @@ #include "WW3D2/camera.h" #include "WW3D2/light.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/hlod.h" #include "WW3D2/mesh.h" #include "WW3D2/meshmdl.h" @@ -3478,13 +3479,13 @@ void W3DVolumetricShadowManager::renderShadows( Bool forceStencilFill ) //Set W3D to some known state VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); //turn off textures - DX8Wrapper::Set_Texture(1,nullptr); //turn off textures - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Texture(0,nullptr); //turn off textures + Renderer::Set_Texture(1,nullptr); //turn off textures + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices // turn off z writing m_pDev->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); @@ -3656,7 +3657,7 @@ void W3DVolumetricShadowManager::renderShadows( Bool forceStencilFill ) m_pDev->SetRenderState(D3DRS_ALPHABLENDENABLE , FALSE); m_pDev->SetRenderState(D3DRS_LIGHTING, FALSE); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } else if (forceStencilFill) @@ -3666,15 +3667,15 @@ void W3DVolumetricShadowManager::renderShadows( Bool forceStencilFill ) //Set W3D to some known state VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Texture(0,nullptr); + Renderer::Apply_Render_State_Changes(); //force update of view and projection matrices renderStencilShadows(); - DX8Wrapper::Invalidate_Cached_Render_States(); + Renderer::Invalidate_Cached_Render_States(); } } @@ -3850,7 +3851,7 @@ void W3DVolumetricShadowManager::reset() // ============================================================================ W3DVolumetricShadow* W3DVolumetricShadowManager::addShadow(RenderObjClass *robj, Shadow::ShadowTypeInfo *shadowInfo, Drawable *draw) { - if (!DX8Wrapper::Has_Stencil() || !robj || !TheGlobalData->m_useShadowVolumes) + if (!Renderer::Has_Stencil() || !robj || !TheGlobalData->m_useShadowVolumes) return nullptr; //right now we require a stencil buffer W3DShadowGeometry *sg=nullptr; diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp index 5f47d7362d7..c62d71953fc 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp @@ -56,7 +56,7 @@ #include "W3DDevice/GameClient/HeightMap.h" #include "W3DDevice/GameClient/W3DDynamicLight.h" #include "WW3D2/camera.h" -#include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/dx8renderer.h" #include "WW3D2/mesh.h" #include "WW3D2/meshmdl.h" @@ -424,16 +424,16 @@ void W3DBibBuffer::renderBibs() return; } // Setup the vertex buffer, shader & texture. - DX8Wrapper::Set_Index_Buffer(m_indexBib,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBib); - DX8Wrapper::Set_Shader(detailAlphaShader); + Renderer::Set_Index_Buffer(m_indexBib,0); + Renderer::Set_Vertex_Buffer(m_vertexBib); + Renderer::Set_Shader(detailAlphaShader); if (m_curNumNormalBibIndices) { - DX8Wrapper::Set_Texture(0,m_bibTexture); - DX8Wrapper::Draw_Triangles( 0, m_curNumNormalBibIndices/3, 0, m_curNumNormalBibVertex); + Renderer::Set_Texture(0,m_bibTexture); + Renderer::Draw_Triangles( 0, m_curNumNormalBibIndices/3, 0, m_curNumNormalBibVertex); } if (m_curNumBibIndices>m_curNumNormalBibIndices) { - DX8Wrapper::Set_Texture(0,m_highlightBibTexture); - DX8Wrapper::Draw_Triangles( m_curNumNormalBibIndices, (m_curNumBibIndices-m_curNumNormalBibIndices)/3, + Renderer::Set_Texture(0,m_highlightBibTexture); + Renderer::Draw_Triangles( m_curNumNormalBibIndices, (m_curNumBibIndices-m_curNumNormalBibIndices)/3, m_curNumNormalBibVertex, m_curNumBibVertices-m_curNumNormalBibVertex); } } diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp index 7d1bdd79387..d7cb2c1c5bd 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp @@ -66,6 +66,7 @@ #include "W3DDevice/GameClient/W3DShroud.h" #include "WW3D2/camera.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/dx8renderer.h" #include "WW3D2/mesh.h" #include "WW3D2/meshmdl.h" @@ -131,9 +132,9 @@ are already set. */ void W3DBridge::renderBridge(Bool wireframe) { if (m_visible && m_numPolygons && m_numVertex) { - if (!wireframe) DX8Wrapper::Set_Texture(0,m_bridgeTexture); + if (!wireframe) Renderer::Set_Texture(0,m_bridgeTexture); // Draw all the bridges. - DX8Wrapper::Draw_Triangles( m_firstIndex, m_numPolygons, m_firstVertex, m_numVertex); + Renderer::Draw_Triangles( m_firstIndex, m_numPolygons, m_firstVertex, m_numVertex); } } @@ -1160,16 +1161,16 @@ void W3DBridgeBuffer::drawBridges(CameraClass * camera, Bool wireframe, TextureC return; } - DX8Wrapper::Set_Material(m_vertexMaterial); + Renderer::Set_Material(m_vertexMaterial); // Setup the vertex buffer, shader & texture. - DX8Wrapper::Set_Index_Buffer(m_indexBridge,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBridge); - DX8Wrapper::Set_Shader(detailAlphaShader); + Renderer::Set_Index_Buffer(m_indexBridge,0); + Renderer::Set_Vertex_Buffer(m_vertexBridge); + Renderer::Set_Shader(detailAlphaShader); #ifdef RTS_DEBUG //DX8Wrapper::Set_Shader(detailShader); // shows alpha clipping. #endif - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); if (!wireframe && cloudTexture) { @@ -1192,12 +1193,12 @@ void W3DBridgeBuffer::drawBridges(CameraClass * camera, Bool wireframe, TextureC if (!wireframe && TheTerrainRenderObject->getShroud()) { //Reset to a known shader. - DX8Wrapper::Invalidate_Cached_Render_States(); - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Material(m_vertexMaterial); - DX8Wrapper::Set_Index_Buffer(m_indexBridge,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBridge); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Invalidate_Cached_Render_States(); + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Set_Material(m_vertexMaterial); + Renderer::Set_Index_Buffer(m_indexBridge,0); + Renderer::Set_Vertex_Buffer(m_vertexBridge); + Renderer::Apply_Render_State_Changes(); //Apply custom shroud projection shader. W3DShaderManager::setTexture(0,TheTerrainRenderObject->getShroud()->getShroudTexture()); W3DShaderManager::setShader(W3DShaderManager::ST_SHROUD_TEXTURE, 0); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp index cf193188048..a98354f00df 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp @@ -48,6 +48,7 @@ #include "W3DDevice/GameClient/W3DScene.h" #include "W3DDevice/Common/W3DConvert.h" #include "WW3D2/ww3d.h" +#include "WW3D2/Renderer.h" #include "WW3D2/hanim.h" #include "Common/UnitTimings.h" //Contains the DO_UNIT_TIMINGS define jba. @@ -240,18 +241,18 @@ void DebugHintObject::Render(RenderInfoClass & rinfo) SphereClass bounds(Vector3(m_myLoc.x, m_myLoc.y, m_myLoc.z), m_mySize); if (!rinfo.Camera.Cull_Sphere(bounds)) { - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); - DX8Wrapper::Set_Texture(0, nullptr); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Shader(m_shaderClass); + Renderer::Set_Texture(0, nullptr); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile); Matrix3D tm = Transform; Vector3 vec(m_myLoc.x, m_myLoc.y, m_myLoc.z); tm.Set_Translation(vec); - DX8Wrapper::Set_Transform(D3DTS_WORLD, tm); + Renderer::Set_Transform(RB_TRANSFORM_WORLD, tm); - DX8Wrapper::Draw_Triangles( 0, 1, 0, 3); + Renderer::Draw_Triangles( 0, 1, 0, 3); } } #endif // RTS_DEBUG diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp index dd9bc793968..7cd1b38d558 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp @@ -63,6 +63,7 @@ #include "W3DDevice/GameClient/W3DShaderManager.h" #include "WW3D2/camera.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/dx8renderer.h" #include "WW3D2/mesh.h" #include "WW3D2/meshmdl.h" @@ -159,8 +160,8 @@ RoadType::~RoadType() void RoadType::applyTexture() { W3DShaderManager::setTexture(0,m_roadTexture); - DX8Wrapper::Set_Index_Buffer(m_indexRoad,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexRoad); + Renderer::Set_Index_Buffer(m_indexRoad,0); + Renderer::Set_Vertex_Buffer(m_vertexRoad); } @@ -3334,7 +3335,7 @@ void W3DRoadBuffer::drawRoads(CameraClass * camera, TextureClass *cloudTexture, if (m_roadTypes[i].getNumIndices() == 0) continue; if (wireframe) { m_roadTypes[i].applyTexture(); - DX8Wrapper::Set_Texture(0,nullptr); + Renderer::Set_Texture(0,nullptr); } else { m_roadTypes[i].applyTexture(); } @@ -3346,7 +3347,7 @@ void W3DRoadBuffer::drawRoads(CameraClass * camera, TextureClass *cloudTexture, if (!wireframe) W3DShaderManager::setShader(st, pass); //Draw all this road type. - DX8Wrapper::Draw_Triangles( 0, m_roadTypes[i].getNumIndices()/3, 0, m_roadTypes[i].getNumVertices()); + Renderer::Draw_Triangles( 0, m_roadTypes[i].getNumIndices()/3, 0, m_roadTypes[i].getNumVertices()); #ifdef LOG_STATS polys += m_roadTypes[i].getNumIndices()/3; #endif @@ -3364,8 +3365,8 @@ void W3DRoadBuffer::drawRoads(CameraClass * camera, TextureClass *cloudTexture, #if 0 // Need to use a separate set of index & vertex buffers for this. jba. - DX8Wrapper::Set_Index_Buffer(nullptr,0); - DX8Wrapper::Set_Vertex_Buffer(nullptr); + Renderer::Set_Index_Buffer(nullptr,0); + Renderer::Set_Vertex_Buffer(nullptr); if (pDynamicLightsIterator) { for (i=0; im_curNumRoadIndices == 0) continue; if (wireframe) { - DX8Wrapper::Set_Texture(0,nullptr); + Renderer::Set_Texture(0,nullptr); } else { m_roadTypes[i].applyTexture(); if (cloudTexture) { - DX8Wrapper::Set_Texture(1,cloudTexture); + Renderer::Set_Texture(1,cloudTexture); } } - DX8Wrapper::Set_Shader(detailAlphaShader); + Renderer::Set_Shader(detailAlphaShader); //Draw all the roads. - DX8Wrapper::Draw_Triangles( 0, m_curNumRoadIndices/3, 0, m_curNumRoadVertices); + Renderer::Draw_Triangles( 0, m_curNumRoadIndices/3, 0, m_curNumRoadVertices); } } #endif diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp index 13ff3b4b3e5..0d7dd3f2bb5 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp @@ -859,7 +859,7 @@ void RTS3DScene::Flush(RenderInfoClass & rinfo) #ifdef USE_NON_STENCIL_OCCLUSION flushOccludedObjects(rinfo); #else - if (DX8Wrapper::Has_Stencil()) + if (Renderer::Has_Stencil()) flushOccludedObjectsIntoStencil(rinfo); #endif @@ -972,10 +972,10 @@ void RTS3DScene::updatePlayerColorPasses() void RTS3DScene::Render(RenderInfoClass & rinfo) { //USE_PERF_TIMER(NonTerrainRender) - DX8Wrapper::Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); + Renderer::Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); //Override the behind building selection if it's not available on current hardware (needs stencil). - TheWritableGlobalData->m_enableBehindBuildingMarkers = TheWritableGlobalData->m_enableBehindBuildingMarkers && DX8Wrapper::Has_Stencil(); + TheWritableGlobalData->m_enableBehindBuildingMarkers = TheWritableGlobalData->m_enableBehindBuildingMarkers && Renderer::Has_Stencil(); if (Get_Extra_Pass_Polygon_Mode() == EXTRA_PASS_DISABLE) { @@ -1263,11 +1263,11 @@ void renderStenciledPlayerColor( UnsignedInt color, UnsignedInt stencilRef, Bool v[2].color = color; v[3].color = color; - DX8Wrapper::Set_Shader(PlayerColorShader); + Renderer::Set_Shader(PlayerColorShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + Renderer::Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Apply_Render_State_Changes(); //force update all render states + Renderer::Apply_Render_State_Changes(); //force update all render states LPDIRECT3DDEVICE8 m_pDev=DX8Wrapper::_Get_D3D_Device8(); @@ -1575,7 +1575,7 @@ void RTS3DScene::flushOccludedObjects(RenderInfoClass & rinfo) { const Int localPlayerIndex = rts::getObservedOrLocalPlayerIndex_Safe(); - if (DX8Wrapper::Has_Stencil()) //just in case we have shadows, disable them over occluded pixels. + if (Renderer::Has_Stencil()) //just in case we have shadows, disable them over occluded pixels. { //Set all stencil pixels of potentially occluded objects to 128. DX8Wrapper::Set_DX8_Render_State(D3DRS_STENCILENABLE, TRUE ); @@ -1614,7 +1614,7 @@ void RTS3DScene::flushOccludedObjects(RenderInfoClass & rinfo) //Now draw the normal models so they cover up the colored models on any pixels that //Normal models will clear stencil value from 128 back to 0 where the object pixels are //not occluded but will leave 128 in stencil where still occluded. - if (DX8Wrapper::Has_Stencil()) + if (Renderer::Has_Stencil()) DX8Wrapper::Set_DX8_Render_State(D3DRS_STENCILREF, 0 ); for (i=0; i #include #include "WW3D2/dx8wrapper.h" +#include "WW3D2/Renderer.h" #include "WW3D2/shader.h" #include "Common/GlobalData.h" #include "Common/MapObject.h" @@ -317,11 +318,11 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) updateCircleVB(); } //Apply the shader and material - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); - DX8Wrapper::Set_Texture(0, nullptr); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferCircle); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Shader(m_shaderClass); + Renderer::Set_Texture(0, nullptr); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(m_vertexBufferCircle); setIndex = true; Vector3 vec(0.95f, 0.67f, 0); @@ -329,8 +330,8 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) tm.Set_Translation(vec); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); - DX8Wrapper::Draw_Triangles( 0,NUM_TRI, 0, (m_numTriangles*3)); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); + Renderer::Draw_Triangles( 0,NUM_TRI, 0, (m_numTriangles*3)); } @@ -340,9 +341,9 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) } if (!setIndex) { - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Texture(0, nullptr); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Texture(0, nullptr); } tm.Make_Identity(); @@ -350,32 +351,32 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) Int clr = 255*intensity; Int diffuse = (0xff<<24)|(clr<<16)|(clr<<8)|clr; // b g<<8 r<<16 a<<24. updateScreenVB(diffuse); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); - DX8Wrapper::Set_Shader(ShaderClass(SC_ADD)); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferScreen); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); + Renderer::Set_Shader(ShaderClass(SC_ADD)); + Renderer::Set_Vertex_Buffer(m_vertexBufferScreen); + Renderer::Apply_Render_State_Changes(); switch (fade) { default: case ScriptEngine::FADE_ADD: - DX8Wrapper::Draw_Triangles( 0,2, 0, (2*3)); + Renderer::Draw_Triangles( 0,2, 0, (2*3)); break; case ScriptEngine::FADE_SUBTRACT: DX8Wrapper::Set_DX8_Render_State(D3DRS_BLENDOP, D3DBLENDOP_REVSUBTRACT ); - DX8Wrapper::Draw_Triangles( 0,2, 0, (2*3)); + Renderer::Draw_Triangles( 0,2, 0, (2*3)); DX8Wrapper::Set_DX8_Render_State(D3DRS_BLENDOP, D3DBLENDOP_ADD ); break; case ScriptEngine::FADE_SATURATE: // 4x multiply DX8Wrapper::Set_DX8_Render_State(D3DRS_SRCBLEND,D3DBLEND_DESTCOLOR); DX8Wrapper::Set_DX8_Render_State(D3DRS_DESTBLEND,D3DBLEND_SRCCOLOR); - DX8Wrapper::Draw_Triangles( 0,2, 0, (2*3)); - DX8Wrapper::Draw_Triangles( 0,2, 0, (2*3)); + Renderer::Draw_Triangles( 0,2, 0, (2*3)); + Renderer::Draw_Triangles( 0,2, 0, (2*3)); break; case ScriptEngine::FADE_MULTIPLY: // Straight multiply DX8Wrapper::Set_DX8_Render_State(D3DRS_SRCBLEND,D3DBLEND_ZERO); DX8Wrapper::Set_DX8_Render_State(D3DRS_DESTBLEND,D3DBLEND_SRCCOLOR); - DX8Wrapper::Draw_Triangles( 0,2, 0, (2*3)); + Renderer::Draw_Triangles( 0,2, 0, (2*3)); break; } ShaderClass::Invalidate(); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp index 1256e5d41eb..713162134f4 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp @@ -98,6 +98,7 @@ #include "coltest.h" #include "inttest.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "dx8indexbuffer.h" #include "dx8vertexbuffer.h" #include "dx8fvf.h" @@ -504,14 +505,14 @@ void BoxRenderObjClass::render_box(RenderInfoClass & rinfo,const Vector3 & cente /* ** Apply the shader and material */ - DX8Wrapper::Set_Material(_BoxMaterial); - DX8Wrapper::Set_Shader(_BoxShader); - DX8Wrapper::Set_Texture(0,nullptr); + Renderer::Set_Material(_BoxMaterial); + Renderer::Set_Shader(_BoxShader); + Renderer::Set_Texture(0,nullptr); - DX8Wrapper::Set_Index_Buffer(ibaccess,0); - DX8Wrapper::Set_Vertex_Buffer(vbaccess); + Renderer::Set_Index_Buffer(ibaccess,0); + Renderer::Set_Vertex_Buffer(vbaccess); - DX8Wrapper::Draw_Triangles(buffer_type,0,NUM_BOX_FACES,0,NUM_BOX_VERTS); + Renderer::Draw_Triangles(buffer_type,0,NUM_BOX_FACES,0,NUM_BOX_VERTS); } } @@ -701,7 +702,7 @@ void AABoxRenderObjClass::Render(RenderInfoClass & rinfo) { Matrix3D temp(1); temp.Translate(Transform.Get_Translation()); - DX8Wrapper::Set_Transform(D3DTS_WORLD,temp); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,temp); render_box(rinfo,ObjSpaceCenter,ObjSpaceExtent); } @@ -1085,7 +1086,7 @@ int OBBoxRenderObjClass::Class_ID() const *=============================================================================================*/ void OBBoxRenderObjClass::Render(RenderInfoClass & rinfo) { - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); render_box(rinfo,ObjSpaceCenter,ObjSpaceExtent); } diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp index 0e2af8a84de..cad1a7c9631 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp @@ -75,7 +75,6 @@ #include "ww3d.h" #include "Renderer.h" #include "WWMath/matrix4.h" -#include "dx8wrapper.h" /*********************************************************************************************** @@ -750,8 +749,8 @@ void CameraClass::Apply() Matrix4x4 d3dprojection; Get_D3D_Projection_Matrix(&d3dprojection); - DX8Wrapper::Set_Projection_Transform_With_Z_Bias(d3dprojection,ZNear,ZFar); - DX8Wrapper::Set_Transform(D3DTS_VIEW,CameraInvTransform); + Renderer::Set_Projection_Transform_With_Z_Bias(d3dprojection,ZNear,ZFar); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,CameraInvTransform); } void CameraClass::Set_Clip_Planes(float znear,float zfar) diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp index cfe2e251433..511ee78dc37 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp @@ -58,6 +58,7 @@ #include "WWSaveLoad/persistfactory.h" #include "ww3dids.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "dx8vertexbuffer.h" #include "dx8indexbuffer.h" #include "sortingrenderer.h" @@ -919,7 +920,7 @@ void DazzleRenderObjClass::Render(RenderInfoClass & rinfo) if ( Is_Not_Hidden_At_All() && _dazzle_rendering_enabled && - !DX8Wrapper::Is_Render_To_Texture() ) + !Renderer::Is_Render_To_Texture() ) { // First check if the dazzle is blinking and is "off" bool is_on = true; @@ -944,8 +945,8 @@ void DazzleRenderObjClass::Render(RenderInfoClass & rinfo) // visibility = _VisibilityHandler->Compute_Dazzle_Visibility(rinfo,this,position); Matrix4x4 view_transform,projection_transform; - DX8Wrapper::Get_Transform(D3DTS_VIEW,view_transform); - DX8Wrapper::Get_Transform(D3DTS_PROJECTION,projection_transform); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view_transform); + Renderer::Get_Transform(RB_TRANSFORM_PROJECTION,projection_transform); Vector3 camera_loc(rinfo.Camera.Get_Position()); Vector3 camera_dir(-view_transform[2][0],-view_transform[2][1],-view_transform[2][2]); // const Matrix3D& cam = rinfo.Camera.Get_Transform(); @@ -1021,9 +1022,9 @@ void DazzleRenderObjClass::Render_Dazzle(CameraClass* camera) Matrix4x4 view_transform; Matrix4x4 world_transform; Matrix4x4 projection_transform; - DX8Wrapper::Get_Transform(D3DTS_VIEW,view_transform); - DX8Wrapper::Get_Transform(D3DTS_WORLD,world_transform); - DX8Wrapper::Get_Transform(D3DTS_PROJECTION,projection_transform); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view_transform); + Renderer::Get_Transform(RB_TRANSFORM_WORLD,world_transform); + Renderer::Get_Transform(RB_TRANSFORM_PROJECTION,projection_transform); old_view_transform=view_transform; old_world_transform=world_transform; old_projection_transform=projection_transform; @@ -1201,7 +1202,7 @@ void DazzleRenderObjClass::Render_Dazzle(CameraClass* camera) return; } - DX8Wrapper::Set_Vertex_Buffer(vb_access); + Renderer::Set_Vertex_Buffer(vb_access); DynamicIBAccessClass ib_access(BUFFER_TYPE_DYNAMIC_DX8,poly_count*3); { @@ -1219,34 +1220,34 @@ void DazzleRenderObjClass::Render_Dazzle(CameraClass* camera) } } - DX8Wrapper::Set_World_Identity(); - DX8Wrapper::Set_View_Identity(); - DX8Wrapper::Set_Transform(D3DTS_PROJECTION,Matrix4x4(true)); + Renderer::Set_World_Identity(); + Renderer::Set_View_Identity(); + Renderer::Set_Transform(RB_TRANSFORM_PROJECTION,Matrix4x4(true)); if (halo_poly_count) { - DX8Wrapper::Set_Index_Buffer(ib_access,dazzle_vertex_count); - DX8Wrapper::Set_Shader(default_halo_shader); - DX8Wrapper::Set_Texture(0,types[type]->Get_Halo_Texture()); - DX8Wrapper::Draw_Triangles(0,halo_poly_count,0,vertex_count); + Renderer::Set_Index_Buffer(ib_access,dazzle_vertex_count); + Renderer::Set_Shader(default_halo_shader); + Renderer::Set_Texture(0,types[type]->Get_Halo_Texture()); + Renderer::Draw_Triangles(0,halo_poly_count,0,vertex_count); } if (dazzle_poly_count) { - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Shader(default_dazzle_shader); - DX8Wrapper::Set_Texture(0,types[type]->Get_Dazzle_Texture()); - DX8Wrapper::Draw_Triangles(0,dazzle_poly_count,0,vertex_count); + Renderer::Set_Index_Buffer(ib_access,0); + Renderer::Set_Shader(default_dazzle_shader); + Renderer::Set_Texture(0,types[type]->Get_Dazzle_Texture()); + Renderer::Draw_Triangles(0,dazzle_poly_count,0,vertex_count); } if (lensflare_poly_count) { - DX8Wrapper::Set_Index_Buffer(ib_access,dazzle_vertex_count+halo_vertex_count); - DX8Wrapper::Set_Shader(default_dazzle_shader); - DX8Wrapper::Set_Texture(0,lensflare->Get_Texture()); - DX8Wrapper::Draw_Triangles(0,lensflare_poly_count,0,vertex_count); + Renderer::Set_Index_Buffer(ib_access,dazzle_vertex_count+halo_vertex_count); + Renderer::Set_Shader(default_dazzle_shader); + Renderer::Set_Texture(0,lensflare->Get_Texture()); + Renderer::Draw_Triangles(0,lensflare_poly_count,0,vertex_count); } - DX8Wrapper::Set_Transform(D3DTS_PROJECTION,old_projection_transform); - DX8Wrapper::Set_Transform(D3DTS_VIEW,old_view_transform); - DX8Wrapper::Set_Transform(D3DTS_WORLD,old_world_transform); + Renderer::Set_Transform(RB_TRANSFORM_PROJECTION,old_projection_transform); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,old_view_transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,old_world_transform); } // ---------------------------------------------------------------------------- @@ -1576,7 +1577,7 @@ void DazzleLayerClass::Render(CameraClass* camera) camera->Apply(); - DX8Wrapper::Set_Material(nullptr); + Renderer::Set_Material(nullptr); for (unsigned type=0;typeGet_Transform()); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Parent->Get_Transform()); /* ** Copy the vertices into the dynamic vb @@ -354,9 +355,9 @@ void RigidDecalMeshClass::Render() while (next_poly_index < Polys.Count()) { next_poly_index = Process_Material_Run(cur_poly_index); - DX8Wrapper::Set_Index_Buffer(dynamic_ib,0); - DX8Wrapper::Set_Vertex_Buffer(dynamic_vb); - DX8Wrapper::Draw_Triangles( 3*cur_poly_index, + Renderer::Set_Index_Buffer(dynamic_ib,0); + Renderer::Set_Vertex_Buffer(dynamic_vb); + Renderer::Draw_Triangles( 3*cur_poly_index, (next_poly_index - cur_poly_index), // poly count Polys[cur_poly_index].I, 1 + Polys[next_poly_index-1].K - Polys[cur_poly_index].I); @@ -383,9 +384,9 @@ void RigidDecalMeshClass::Render() *=============================================================================================*/ int RigidDecalMeshClass::Process_Material_Run(int start_index) { - DX8Wrapper::Set_Texture(0,Textures[start_index]); - DX8Wrapper::Set_Material(VertexMaterials[Polys[start_index].I]); - DX8Wrapper::Set_Shader(Shaders[start_index]); + Renderer::Set_Texture(0,Textures[start_index]); + Renderer::Set_Material(VertexMaterials[Polys[start_index].I]); + Renderer::Set_Shader(Shaders[start_index]); int next_index = start_index; while ( (next_index < Polys.Count()) && @@ -788,7 +789,7 @@ void SkinDecalMeshClass::Render() /* ** Skin decals coordinates are in world space */ - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D::Identity); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Matrix3D::Identity); /* ** Skin decals have to get the deformed vertices of their parent meshes. For this @@ -852,9 +853,9 @@ void SkinDecalMeshClass::Render() while (next_poly_index < Polys.Count()) { next_poly_index = Process_Material_Run(cur_poly_index); - DX8Wrapper::Set_Index_Buffer(dynamic_ib,0); - DX8Wrapper::Set_Vertex_Buffer(dynamic_vb); - DX8Wrapper::Draw_Triangles(3*cur_poly_index, + Renderer::Set_Index_Buffer(dynamic_ib,0); + Renderer::Set_Vertex_Buffer(dynamic_vb); + Renderer::Draw_Triangles(3*cur_poly_index, (next_poly_index - cur_poly_index), // poly count Polys[cur_poly_index].I, 1 + Polys[next_poly_index-1].K - Polys[cur_poly_index].I); @@ -881,9 +882,9 @@ void SkinDecalMeshClass::Render() *=============================================================================================*/ int SkinDecalMeshClass::Process_Material_Run(int start_index) { - DX8Wrapper::Set_Texture(0,Textures[start_index]); - DX8Wrapper::Set_Material(VertexMaterials[Polys[start_index].I]); - DX8Wrapper::Set_Shader(Shaders[start_index]); + Renderer::Set_Texture(0,Textures[start_index]); + Renderer::Set_Material(VertexMaterials[Polys[start_index].I]); + Renderer::Set_Shader(Shaders[start_index]); int next_index = start_index; while ( (next_index < Polys.Count()) && diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp index 797b36fbcb9..07ec0e6fd8f 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp @@ -42,6 +42,7 @@ #include "texture.h" #include "vertmaterial.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "WWMath/wwmath.h" #include "rinfo.h" #include "camera.h" @@ -257,9 +258,9 @@ void LineGroupClass::Render(RenderInfoClass &rinfo) } VertexMaterialClass * linemat = VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(linemat); - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Set_Texture(0, Texture); + Renderer::Set_Material(linemat); + Renderer::Set_Shader(Shader); + Renderer::Set_Texture(0, Texture); REF_PTR_RELEASE(linemat); WWASSERT(StartLineLoc && StartLineLoc->Get_Array()); @@ -281,10 +282,10 @@ void LineGroupClass::Render(RenderInfoClass &rinfo) // Save off the view matrix Matrix4x4 view; - DX8Wrapper::Get_Transform(D3DTS_VIEW, view); + Renderer::Get_Transform(RB_TRANSFORM_VIEW, view); Matrix4x4 identity(true); - DX8Wrapper::Set_Transform(D3DTS_WORLD, identity); + Renderer::Set_Transform(RB_TRANSFORM_WORLD, identity); // if the points are in world space, transform the offsets if (Get_Flag(TRANSFORM)) { @@ -296,7 +297,7 @@ void LineGroupClass::Render(RenderInfoClass &rinfo) Matrix3D::Transform_Vector(xform_mat, offset[i], &offset[i]); } } else { - DX8Wrapper::Set_Transform(D3DTS_VIEW, identity); + Renderer::Set_Transform(RB_TRANSFORM_VIEW, identity); } int num_tris=0; @@ -465,17 +466,17 @@ void LineGroupClass::Render(RenderInfoClass &rinfo) } } - DX8Wrapper::Set_Index_Buffer(iba, 0); - DX8Wrapper::Set_Vertex_Buffer(vba); + Renderer::Set_Index_Buffer(iba, 0); + Renderer::Set_Vertex_Buffer(vba); if (sort) { SortingRendererClass::Insert_Triangles(0, num_tris, 0, num_vertices); } else { - DX8Wrapper::Draw_Triangles(0, num_tris, 0, num_vertices); + Renderer::Draw_Triangles(0, num_tris, 0, num_vertices); } // restore the matrices - DX8Wrapper::Set_Transform(D3DTS_VIEW, view); + Renderer::Set_Transform(RB_TRANSFORM_VIEW, view); } int LineGroupClass::Get_Polygon_Count() diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mapper.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mapper.cpp index e6fec961b06..c85238b8dbb 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mapper.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mapper.cpp @@ -42,6 +42,7 @@ #include "w3derr.h" #include "meshmatdesc.h" #include "dx8wrapper.h" +#include "Renderer.h" #include "WWDebug/wwdebug.h" #include "matinfo.h" #include "rendobj.h" @@ -791,7 +792,7 @@ void WSEnvMapperClass::Calculate_Texture_Matrix(Matrix4x4 &tex_matrix) } // multiply by inverse of view transform Matrix4x4 mat; - DX8Wrapper::Get_Transform(D3DTS_VIEW,mat); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,mat); Matrix4x4 mat2( mat[0].X, mat[1].X, mat[2].X, 0.0f, mat[0].Y, mat[1].Y, mat[2].Y, 0.0f, mat[0].Z, mat[1].Z, mat[2].Z, 0.0f, @@ -924,7 +925,7 @@ void ScreenMapperClass::Calculate_Texture_Matrix(Matrix4x4 &tex_matrix) // multiply by projection matrix // followed by scale and translation - DX8Wrapper::Get_Transform(D3DTS_PROJECTION, tex_matrix); + Renderer::Get_Transform(RB_TRANSFORM_PROJECTION, tex_matrix); tex_matrix[0] *= Scale.X; // entire row since we're pre-multiplying tex_matrix[1] *= Scale.Y; Vector4 last(tex_matrix[3]); // this gets the w @@ -1151,7 +1152,7 @@ void GridWSEnvMapperClass::Calculate_Texture_Matrix(Matrix4x4 &tex_matrix) { // multiply by inverse of view transform Matrix4x4 mat; - DX8Wrapper::Get_Transform(D3DTS_VIEW,mat); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,mat); Matrix4x4 mv ( mat[0].X, mat[1].X, mat[2].X, 0.0f, mat[0].Y, mat[1].Y, mat[2].Y, 0.0f, mat[0].Z, mat[1].Z, mat[2].Z, 0.0f, diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp index 11ffb49fe0d..0ed57f3cf63 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp @@ -105,6 +105,7 @@ #include "meshmdl.h" #include "meshgeometry.h" #include "ww3d.h" +#include "Renderer.h" #include "camera.h" #include "texture.h" #include "rinfo.h" @@ -827,7 +828,7 @@ void MeshClass::Render_Material_Pass(MaterialPassClass * pass,IndexBufferClass * Vector3 oldEmissive(-1,-1,-1); if (LightEnvironment != nullptr) { - DX8Wrapper::Set_Light_Environment(LightEnvironment); + Renderer::Set_Light_Environment(LightEnvironment); } if (Model->Get_Flag(MeshModelClass::SKIN)) { @@ -852,10 +853,10 @@ void MeshClass::Render_Material_Pass(MaterialPassClass * pass,IndexBufferClass * } } pass->Install_Materials(); - DX8Wrapper::Set_Index_Buffer(ib,0); + Renderer::Set_Index_Buffer(ib,0); SNAPSHOT_SAY(("Set_World_Identity")); - DX8Wrapper::Set_World_Identity(); + Renderer::Set_World_Identity(); DX8PolygonRendererListIterator it(&Model->PolygonRendererList); while (!it.Is_Done()) { @@ -947,10 +948,10 @@ void MeshClass::Render_Material_Pass(MaterialPassClass * pass,IndexBufferClass * int vertex_offset = Model->PolygonRendererList.Peek_Head()->Get_Vertex_Offset(); pass->Install_Materials(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Get_Transform()); - DX8Wrapper::Set_Index_Buffer(dynamic_ib,vertex_offset); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Get_Transform()); + Renderer::Set_Index_Buffer(dynamic_ib,vertex_offset); - DX8Wrapper::Draw_Triangles( + Renderer::Draw_Triangles( 0, temp_apt.Count(), min_v, @@ -980,10 +981,10 @@ void MeshClass::Render_Material_Pass(MaterialPassClass * pass,IndexBufferClass * } } pass->Install_Materials(); - DX8Wrapper::Set_Index_Buffer(ib,0); + Renderer::Set_Index_Buffer(ib,0); SNAPSHOT_SAY(("Set_World_Transform")); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); DX8PolygonRendererListIterator it(&Model->PolygonRendererList); while (!it.Is_Done()) { diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp index 1b2fdc3d93d..9827e8e75fb 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp @@ -609,8 +609,8 @@ void Render2DClass::Render() Matrix4x4 view,proj; Matrix4x4 identity(true); - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); - DX8Wrapper::Get_Transform(D3DTS_PROJECTION,proj); + Renderer::Get_Transform(RB_TRANSFORM_VIEW,view); + Renderer::Get_Transform(RB_TRANSFORM_PROJECTION,proj); // // Configure the viewport for entire screen @@ -626,15 +626,15 @@ void Render2DClass::Render() vp.min_z = 0; vp.max_z = 1; Renderer::Set_Viewport(vp); - DX8Wrapper::Set_Texture(0,Texture); + Renderer::Set_Texture(0,Texture); VertexMaterialClass *vm=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vm); + Renderer::Set_Material(vm); REF_PTR_RELEASE(vm); - DX8Wrapper::Set_World_Identity(); - DX8Wrapper::Set_View_Identity(); - DX8Wrapper::Set_Transform(D3DTS_PROJECTION,identity); + Renderer::Set_World_Identity(); + Renderer::Set_View_Identity(); + Renderer::Set_Transform(RB_TRANSFORM_PROJECTION,identity); DynamicVBAccessClass vb(BUFFER_TYPE_DYNAMIC_DX8,dynamic_fvf_type,Vertices.Count()); { @@ -661,14 +661,14 @@ void Render2DClass::Render() mem[i]=Indices[i]; } - DX8Wrapper::Set_Vertex_Buffer(vb); - DX8Wrapper::Set_Index_Buffer(ib,0); + Renderer::Set_Vertex_Buffer(vb); + Renderer::Set_Index_Buffer(ib,0); if (IsGrayScale) { //special case added to draw grayscale non-alpha blended images. - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Apply_Render_State_Changes(); //force update of all regular W3D states. + Renderer::Set_Shader(ShaderClass::_PresetOpaqueShader); + Renderer::Apply_Render_State_Changes(); //force update of all regular W3D states. if (DX8Wrapper::Get_Current_Caps()->Support_Dot3()) { //Override W3D states with customizations for grayscale @@ -695,11 +695,11 @@ void Render2DClass::Render() } } else - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Draw_Triangles(0,Indices.Count()/3,0,Vertices.Count()); + Renderer::Set_Shader(Shader); + Renderer::Draw_Triangles(0,Indices.Count()/3,0,Vertices.Count()); - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); - DX8Wrapper::Set_Transform(D3DTS_PROJECTION,proj); + Renderer::Set_Transform(RB_TRANSFORM_VIEW,view); + Renderer::Set_Transform(RB_TRANSFORM_PROJECTION,proj); if (IsGrayScale) ShaderClass::Invalidate(); //force both stages to be reset. diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp index a8993708be2..63e076ac3fc 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp @@ -216,7 +216,7 @@ void SceneClass::Render(RenderInfoClass & rinfo) // Any stuff that needs to get done before anything else Pre_Render_Processing(rinfo); - DX8Wrapper::Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); + Renderer::Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); if (Get_Extra_Pass_Polygon_Mode()==EXTRA_PASS_DISABLE) { Customized_Render(rinfo); @@ -557,10 +557,10 @@ void SimpleSceneClass::Customized_Render(RenderInfoClass & rinfo) // derived classes should use light environment WWASSERT(rinfo.light_environment==nullptr); // Turn off lights in case we have none - DX8Wrapper::Set_Light(0,nullptr); - DX8Wrapper::Set_Light(1,nullptr); - DX8Wrapper::Set_Light(2,nullptr); - DX8Wrapper::Set_Light(3,nullptr); + Renderer::Clear_Light(0); + Renderer::Clear_Light(1); + Renderer::Clear_Light(2); + Renderer::Clear_Light(3); // (gth) WWShade only works with light environments. We need to upgrade LightEnvironment to // support real point lights, etc. It will likely just evolve into "the n most important" lights @@ -571,7 +571,7 @@ void SimpleSceneClass::Customized_Render(RenderInfoClass & rinfo) { if (count<4) { - DX8Wrapper::Set_Light(count,*(LightClass*)it.Peek_Obj()); + Renderer::Set_Light(count,*(LightClass*)it.Peek_Obj()); } else { // Simple scene only supports 4 global lights diff --git a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp index f2fe2bc5621..de4f41e4da6 100644 --- a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp +++ b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp @@ -35,6 +35,8 @@ #include "W3DDevice/GameClient/W3DAssetManager.h" #include "W3DDevice/GameClient/W3DWater.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/ww3d.h" +#include "WW3D2/Renderer.h" #include "WW3D2/mesh.h" #include "WW3D2/meshmdl.h" #include "WW3D2/shader.h" @@ -2078,13 +2080,13 @@ if (_skip_drawobject_render) { m_lineRenderer->Enable_Texturing(FALSE); } - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Apply_Render_State_Changes(); - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); - DX8Wrapper::Set_Texture(0, nullptr); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Apply_Render_State_Changes(); + Renderer::Set_Material(m_vertexMaterialClass); + Renderer::Set_Shader(m_shaderClass); + Renderer::Set_Texture(0, nullptr); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Apply_Render_State_Changes(); Int count=0; Int i; bool linesToRender = false; @@ -2094,7 +2096,7 @@ if (_skip_drawobject_render) { curHighlight = 0; } m_waterDrawObject->update(); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile1); if (m_drawObjects || m_drawWaypoints || m_drawBoundingBoxes || m_drawSightRanges || m_drawWeaponRanges || m_drawSoundRanges || m_drawTestArtHighlight) { //Apply the shader and material @@ -2182,7 +2184,7 @@ if (pMapObj->isSelected()) { rememberLastSettingVB1 = setting; updateVB(m_vertexBufferTile1,pMapObj->getColor(), doArrow, doDiamond); } - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile1); } else { int setting = pMapObj->getColor(); @@ -2198,7 +2200,7 @@ if (pMapObj->isSelected()) { rememberLastSettingVB2 = setting; updateVB(m_vertexBufferTile2, pMapObj->getColor(), doArrow, doDiamond); } - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile2); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile2); } ///@todo - remove the istree stuff, or get the info from the thing template. jba. @@ -2213,22 +2215,22 @@ if (pMapObj->isSelected()) { polyCount -= NUM_ARROW_TRI+NUM_SELECT_TRI; } - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); if (isTree) { - DX8Wrapper::Draw_Triangles( NUM_TRI*3,polyCount, 0, (m_numTriangles*3)); + Renderer::Draw_Triangles( NUM_TRI*3,polyCount, 0, (m_numTriangles*3)); } else { - DX8Wrapper::Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); + Renderer::Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); } count++; } } if (m_drawPolygonAreas) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferWater); + Renderer::Set_Vertex_Buffer(m_vertexBufferWater); Int selected; for (selected = 0; selected < 2; selected++) { for (PolygonTrigger *pTrig=PolygonTrigger::getFirstPolygonTrigger(); pTrig; pTrig = pTrig->getNext()) { - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Index_Buffer(m_indexBuffer,0); if (!pTrig->getShouldRender()) continue; Bool polySelected = PolygonTool::isSelected(pTrig); if (polySelected && !selected) continue; @@ -2254,10 +2256,10 @@ if (pMapObj->isSelected()) { } if (count&1) { updateVB(m_vertexBufferTile1, color, ARROW, DIAMOND); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile1); } else { updateVB(m_vertexBufferTile2, color, ARROW, DIAMOND); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile2); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile2); } count++; @@ -2270,20 +2272,20 @@ if (pMapObj->isSelected()) { polyCount -= NUM_ARROW_TRI+NUM_SELECT_TRI; } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); - DX8Wrapper::Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tm); + Renderer::Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); } - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile1); updatePolygonVB(pTrig, polySelected, polySelected && PolygonTool::isSelectedOpen()); - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); + Renderer::Set_Vertex_Buffer(m_vertexFeedback); if (m_feedbackIndexCount>0) { - DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + Renderer::Set_Index_Buffer(m_indexFeedback,0); + Renderer::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Index_Buffer(m_indexBuffer,0); } } @@ -2306,10 +2308,10 @@ if (pMapObj->isSelected()) { const Int GREEN = 0x00FF00; // GREEN in BGR. if (count&1) { updateVB(m_vertexBufferTile1, GREEN, true, false); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile1); } else { updateVB(m_vertexBufferTile2, GREEN, true, false); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile2); + Renderer::Set_Vertex_Buffer(m_vertexBufferTile2); } count++; // ok to here. @@ -2323,26 +2325,26 @@ if (pMapObj->isSelected()) { } #if 1 - DX8Wrapper::Set_Transform(D3DTS_WORLD,tmXX); - DX8Wrapper::Draw_Triangles( 0,polyCountA, 0, (m_numTriangles*3)); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,tmXX); + Renderer::Draw_Triangles( 0,polyCountA, 0, (m_numTriangles*3)); #endif } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferWater); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(m_vertexBufferWater); + Renderer::Set_Transform(RB_TRANSFORM_WORLD,Transform); if (m_drawWaypoints) { updateWaypointVB(); if (m_feedbackIndexCount>0) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); - DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Set_Shader(m_shaderClass); - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferWater); + Renderer::Set_Vertex_Buffer(m_vertexFeedback); + Renderer::Set_Index_Buffer(m_indexFeedback,0); + Renderer::Set_Shader(m_shaderClass); + Renderer::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(m_vertexBufferWater); } } @@ -2352,19 +2354,19 @@ if (pMapObj->isSelected()) { if (m_meshFeedback) { updateMeshVB(); if (m_feedbackIndexCount>0) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); - DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Set_Shader(SC_OPAQUE_Z); + Renderer::Set_Vertex_Buffer(m_vertexFeedback); + Renderer::Set_Index_Buffer(m_indexFeedback,0); + Renderer::Set_Shader(SC_OPAQUE_Z); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_WIREFRAME); - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + Renderer::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } else if (m_toolWantsFeedback && !m_disableFeedback) { updateFeedbackVB(); if (m_feedbackIndexCount>0) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); - DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlpha2DShader); - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + Renderer::Set_Vertex_Buffer(m_vertexFeedback); + Renderer::Set_Index_Buffer(m_indexFeedback,0); + Renderer::Set_Shader(ShaderClass::_PresetAlpha2DShader); + Renderer::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } #endif @@ -2373,12 +2375,12 @@ if (pMapObj->isSelected()) { if (m_rampFeedback) { updateRampVB(); if (m_feedbackIndexCount>0) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); - DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Set_Shader(SC_OPAQUE_Z); + Renderer::Set_Vertex_Buffer(m_vertexFeedback); + Renderer::Set_Index_Buffer(m_indexFeedback,0); + Renderer::Set_Shader(SC_OPAQUE_Z); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_WIREFRAME); // we want a solid ramp DX8Wrapper::Set_DX8_Render_State(D3DRS_LIGHTING, FALSE); // disable lighting - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + Renderer::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } #endif @@ -2387,36 +2389,36 @@ if (pMapObj->isSelected()) { if (m_boundaryFeedback) { updateBoundaryVB(); if (m_feedbackIndexCount>0) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); - DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Set_Shader(m_shaderClass); + Renderer::Set_Vertex_Buffer(m_vertexFeedback); + Renderer::Set_Index_Buffer(m_indexFeedback,0); + Renderer::Set_Shader(m_shaderClass); DX8Wrapper::Set_DX8_Render_State(D3DRS_CULLMODE, D3DCULL_NONE); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_SOLID); // we want a solid ramp DX8Wrapper::Set_DX8_Render_State(D3DRS_LIGHTING, FALSE); // disable lighting - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + Renderer::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } #endif - DX8Wrapper::Set_Vertex_Buffer(nullptr); //release reference to vertex buffer - DX8Wrapper::Set_Index_Buffer(nullptr,0); //release reference to vertex buffer + Renderer::Set_Vertex_Buffer(nullptr); //release reference to vertex buffer + Renderer::Set_Index_Buffer(nullptr,0); //release reference to vertex buffer if (m_ambientSoundFeedback) { updateAmbientSoundVB(); if (m_feedbackIndexCount>0) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); - DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Set_Shader(m_shaderClass); + Renderer::Set_Vertex_Buffer(m_vertexFeedback); + Renderer::Set_Index_Buffer(m_indexFeedback,0); + Renderer::Set_Shader(m_shaderClass); DX8Wrapper::Set_DX8_Render_State(D3DRS_CULLMODE, D3DCULL_NONE); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_SOLID); // we want a solid ramp DX8Wrapper::Set_DX8_Render_State(D3DRS_LIGHTING, FALSE); // disable lighting - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + Renderer::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferWater); + Renderer::Set_Index_Buffer(m_indexBuffer,0); + Renderer::Set_Vertex_Buffer(m_vertexBufferWater); if (m_waterDrawObject) { m_waterDrawObject->renderWater(); diff --git a/GeneralsMD/Code/Tools/WorldBuilder/src/ObjectPreview.cpp b/GeneralsMD/Code/Tools/WorldBuilder/src/ObjectPreview.cpp index 66850fee457..a63646768ed 100644 --- a/GeneralsMD/Code/Tools/WorldBuilder/src/ObjectPreview.cpp +++ b/GeneralsMD/Code/Tools/WorldBuilder/src/ObjectPreview.cpp @@ -47,6 +47,8 @@ #include "W3DDevice/GameClient/W3DAssetManager.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/ww3d.h" +#include "WW3D2/Renderer.h" #include "WWLib/TARGA.h" ///////////////////////////////////////////////////////////////////////////// @@ -218,7 +220,7 @@ static UnsignedByte * generatePreview( const ThingTemplate *tt ) } // Set the render target - DX8Wrapper::Set_Render_Target_With_Z(objectTexture); + Renderer::Set_Render_Target_With_Z(objectTexture); // create the camera Bool orthoCamera = false; @@ -248,7 +250,7 @@ static UnsignedByte * generatePreview( const ThingTemplate *tt ) WW3D::End_Render(false); // Change the rendertarget back to the main backbuffer - DX8Wrapper::Set_Render_Target((IDirect3DSurface8 *)nullptr); + Renderer::Set_Default_Render_Target(); SurfaceClass *surface = objectTexture->Get_Surface_Level(); UnsignedByte *data = saveSurface(surface->Peek_D3D_Surface());