diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp index 4cbe7db3bad..954fed9ac3b 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/IRenderBackend.h" #include "WW3D2/light.h" #include "WW3D2/scene.h" #include "W3DDevice/GameClient/W3DPoly.h" @@ -2296,7 +2297,7 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera) return; //Check if video card is capable of using this effect - if (DX8Wrapper::getBackBufferFormat() != WW3D_FORMAT_A8R8G8B8) + if (WW3D::Get_Render_Backend()->Get_Back_Buffer_Format() != WW3D_FORMAT_A8R8G8B8) return; //can't apply effect on cards without destination alpha Int vertexCount = 0; @@ -2313,12 +2314,12 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera) ShaderClass unlitShader=ShaderClass::_PresetOpaque2DShader; unlitShader.Set_Depth_Compare(ShaderClass::PASS_LEQUAL); - DX8Wrapper::Set_Shader(unlitShader); + WW3D::Get_Render_Backend()->Set_Shader(unlitShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,m_destAlphaTexture); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true)); + WW3D::Get_Render_Backend()->Set_Texture(0,m_destAlphaTexture); + WW3D::Get_Render_Backend()->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); @@ -2434,9 +2435,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 + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts m_numVisibleShoreLineTiles += indexCount/6; } @@ -2461,7 +2462,7 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera) return; //Check if video card is capable of using this effect - if (DX8Wrapper::getBackBufferFormat() != WW3D_FORMAT_A8R8G8B8) + if (WW3D::Get_Render_Backend()->Get_Back_Buffer_Format() != WW3D_FORMAT_A8R8G8B8) return; //can't apply effect on cards without destination alpha Int vertexCount = 0; @@ -2499,12 +2500,12 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera) ShaderClass unlitShader=ShaderClass::_PresetOpaque2DShader; unlitShader.Set_Depth_Compare(ShaderClass::PASS_LEQUAL); - DX8Wrapper::Set_Shader(unlitShader); + WW3D::Get_Render_Backend()->Set_Shader(unlitShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,m_destAlphaTexture); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true)); + WW3D::Get_Render_Backend()->Set_Texture(0,m_destAlphaTexture); + WW3D::Get_Render_Backend()->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); @@ -2777,9 +2778,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 + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts m_numVisibleShoreLineTiles += indexCount/6; } @@ -2808,8 +2809,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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); + WW3D::Get_Render_Backend()->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 0dc03cfb1bb..eb0f0d2c557 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Light_Environment(rinfo.light_environment); // Force shaders to update. m_stageTwoTexture->restore(); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); ShaderClass::Invalidate(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->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 (WW3D::Get_Render_Backend()->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; passSet_Shader(ShaderClass::_PresetOpaque2DShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); } else { W3DShaderManager::setShader(st, pass); } @@ -589,13 +590,13 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) renderShoreLines(&rinfo.Camera); #ifdef DO_ROADS - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); if (!ShaderClass::Is_Backface_Culling_Inverted()) { - DX8Wrapper::Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); drawScorches(); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Set_Material(nullptr); + WW3D::Get_Render_Backend()->Set_Material(nullptr); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index cea9b8e7275..21eee0fdff3 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/IRenderBackend.h" #include "WW3D2/light.h" #include "WW3D2/scene.h" #include "W3DDevice/GameClient/W3DPoly.h" @@ -1923,19 +1924,19 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } #endif - DX8Wrapper::Set_Light_Environment(rinfo.light_environment); + WW3D::Get_Render_Backend()->Set_Light_Environment(rinfo.light_environment); // Force shaders to update. m_stageTwoTexture->restore(); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); ShaderClass::Invalidate(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); //Apply the shader and material - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); Bool doMultiPassWireFrame=FALSE; @@ -1961,11 +1962,11 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) { //wireframe pass //Set to vertex diffuse lighting - DX8Wrapper::Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); //Set shader to non-textured solid color from vertex - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueSolidShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueSolidShader); devicePasses=1; //one pass solid, next in wireframe. - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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; @@ -1976,8 +1977,8 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } else { - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); st=W3DShaderManager::ST_TERRAIN_BASE; //set default shader @@ -2019,7 +2020,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 (WW3D::Get_Render_Backend()->Get_Back_Buffer_Format() == WW3D_FORMAT_A8R8G8B8) DX8Wrapper::Set_DX8_Render_State(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_RED); } @@ -2030,8 +2031,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); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaque2DShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); } else { W3DShaderManager::setShader(st, pass); } @@ -2040,17 +2041,17 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) for (j=0; jSet_Vertex_Buffer(getVertexBufferTile(i, j)); #ifdef PRE_TRANSFORM_VERTEX if (m_xformedVertexBuffer && pass==0) { // Note - m_xformedVertexBuffer should only be used for non T&L hardware. jba. - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); int code = DX8Wrapper::_Get_D3D_Device8()->ProcessVertices(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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); DX8Wrapper::_Get_D3D_Device8()->SetStreamSource( 0, m_xformedVertexBuffer[j*m_numVBTilesX+i], @@ -2059,7 +2060,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } #endif if (Is_Hidden() == 0) { - DX8Wrapper::Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); + WW3D::Get_Render_Backend()->Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); } } @@ -2082,13 +2083,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); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); if (!ShaderClass::Is_Backface_Culling_Inverted()) { - DX8Wrapper::Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); if (Scene) { RTS3DScene *pMyScene = (RTS3DScene *)Scene; RefRenderObjListIterator pDynamicLightsIterator(pMyScene->getDynamicLights()); @@ -2100,17 +2101,17 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) if (m_propBuffer) { m_propBuffer->drawProps(rinfo); } - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); drawScorches(); - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); m_bridgeBuffer->drawBridges(&rinfo.Camera, m_disableTextures, doCloud?m_stageTwoTexture:nullptr); @@ -2125,7 +2126,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) } ShaderClass::Invalidate(); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); } else m_bridgeBuffer->drawBridges(&rinfo.Camera, m_disableTextures, m_stageTwoTexture); @@ -2136,11 +2137,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); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Set_Material(nullptr); + WW3D::Get_Render_Backend()->Set_Material(nullptr); } @@ -2149,26 +2150,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)); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Matrix3D(true)); //Apply the shader and material - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); for (Int j=0; jSet_Vertex_Buffer(getVertexBufferTile(i, j)); #ifdef PRE_TRANSFORM_VERTEX if (m_xformedVertexBuffer && pass==0) { // Note - m_xformedVertexBuffer should only be used for non T&L hardware. jba. - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); int code = DX8Wrapper::_Get_D3D_Device8()->ProcessVertices(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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); DX8Wrapper::_Get_D3D_Device8()->SetStreamSource( 0, m_xformedVertexBuffer[j*m_numVBTilesX+i], @@ -2177,7 +2178,7 @@ void HeightMapRenderObjClass::renderTerrainPass(CameraClass *pCamera) } #endif if (Is_Hidden() == 0) { - DX8Wrapper::Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); + WW3D::Get_Render_Backend()->Draw_Triangles(0, HEIGHTMAP_POLYGON_NUM, 0, HEIGHTMAP_VERTEX_NUM); } } } @@ -2336,23 +2337,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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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. + WW3D::Get_Render_Backend()->Set_Shader(shader); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Draw_Triangles( 0,indexCount/3, 0, vertexCount); //draw a quad, 2 triangles, 4 verts m_numVisibleExtraBlendTiles += indexCount/6; } } @@ -2387,7 +2388,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 + WW3D::Get_Render_Backend()->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..3d70c08f350 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/IRenderBackend.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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Texture(0, nullptr); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass(SC_ALPHA)); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->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 b7d6a44a5b5..fcac1d9d5fd 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp @@ -86,6 +86,7 @@ static void drawFramerateBar(); #include "WWMath/wwmath.h" #include "WWLib/registry.h" #include "WW3D2/ww3d.h" +#include "WW3D2/IRenderBackend.h" #include "WW3D2/predlod.h" #include "WW3D2/part_emt.h" #include "WW3D2/part_ldr.h" @@ -549,7 +550,7 @@ void W3DDisplay::setGamma(Real gamma, Real bright, Real contrast, Bool calibrate if (m_windowed) return; //we don't allow gamma to change in window because it would affect desktop. - DX8Wrapper::Set_Gamma(gamma,bright,contrast,calibrate, false); + WW3D::Get_Render_Backend()->Set_Gamma(gamma,bright,contrast,calibrate, false); } /** Set resolution of display */ @@ -2936,7 +2937,7 @@ VideoBuffer* W3DDisplay::createVideoBuffer() // first try to use the native format - WW3DFormat displayFormat = DX8Wrapper::getBackBufferFormat(); + WW3DFormat displayFormat = WW3D::Get_Render_Backend()->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..8c5dc5e2a12 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexScorch, 0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexScorch); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); - DX8Wrapper::Set_Texture(0, m_scorchTexture); - DX8Wrapper::Draw_Triangles(0, m_curNumScorchIndices / 3, 0, m_curNumScorchVertices); + WW3D::Get_Render_Backend()->Set_Texture(0, m_scorchTexture); + WW3D::Get_Render_Backend()->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 bed86510ad0..5774eb40b79 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp @@ -54,6 +54,7 @@ //----------------------------------------------------------------------------- #include "WW3D2/dx8wrapper.h" +#include "WW3D2/IRenderBackend.h" #include "WW3D2/assetmgr.h" #include "Lib/BaseType.h" #include "Common/file.h" @@ -233,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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices return true; } @@ -249,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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } /*========= ScreenBWFilter =============================================================*/ @@ -414,15 +415,15 @@ Int ScreenBWFilter::set(FilterModes mode) } VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->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); @@ -473,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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenBWFilter::shutdown() @@ -589,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 + WW3D::Get_Render_Backend()->Set_Shader(shader); + WW3D::Get_Render_Backend()->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); @@ -643,15 +644,15 @@ Int ScreenBWFilterDOT3::set(FilterModes mode) } VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices return true; } @@ -661,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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenBWFilterDOT3::shutdown() @@ -867,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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->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); @@ -905,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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenCrossFadeFilter::shutdown() @@ -1006,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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); pDev->SetVertexShader(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1); Coord2D center; @@ -1077,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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); { Int limit = m_maxCount; if (m_maxCount>30) limit = 30; @@ -1159,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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices } return TRUE; } @@ -1176,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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenMotionBlurFilter::shutdown() @@ -1219,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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaSpriteShader); else - DX8Wrapper::Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); #else - DX8Wrapper::Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetMultiplicativeSpriteShader); #endif } - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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); @@ -1284,7 +1285,7 @@ Int ShroudTextureShader::set(Int stage) void ShroudTextureShader::reset() { - DX8Wrapper::Set_Texture(m_stageOfSet,nullptr); + WW3D::Get_Render_Backend()->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); @@ -1321,7 +1322,7 @@ Int FlatShroudTextureShader::set(Int stage) { //force WW3D2 system to set it's states so it won't later overwrite our custom settings. if (stage < 2) - DX8Wrapper::Set_Texture(stage, W3DShaderManager::getShaderTexture(stage)); + WW3D::Get_Render_Backend()->Set_Texture(stage, W3DShaderManager::getShaderTexture(stage)); else //stages larger than 1 are not supported by W3D so set them directly DX8Wrapper::Set_DX8_Texture(stage, W3DShaderManager::getShaderTexture(stage)->Peek_D3D_Texture()); @@ -1379,7 +1380,7 @@ Int FlatShroudTextureShader::set(Int stage) void FlatShroudTextureShader::reset() { if (m_stageOfSet < MAX_TEXTURE_STAGES) - DX8Wrapper::Set_Texture(m_stageOfSet,nullptr); + WW3D::Get_Render_Backend()->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); @@ -1420,15 +1421,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); + WW3D::Get_Render_Backend()->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()); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Set_Shader(shader); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); D3DXMATRIX curView; DX8Wrapper::_Get_DX8_Transform(D3DTS_VIEW, curView); @@ -1487,7 +1488,7 @@ Int MaskTextureShader::set(Int pass) void MaskTextureShader::reset() { - DX8Wrapper::Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->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); } @@ -1652,7 +1653,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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); if (TheGlobalData && (TheGlobalData->m_bilinearTerrainTex || TheGlobalData->m_trilinearTerrainTex)) { DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); @@ -1823,7 +1824,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(); + WW3D::Get_Render_Backend()->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); @@ -1929,7 +1930,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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); terrainShader2Stage.set(2); } @@ -1947,7 +1948,7 @@ void TerrainShader8Stage::reset() DX8Wrapper::_Get_D3D_Device8()->SetTexture(0, nullptr); DX8Wrapper::_Get_D3D_Device8()->SetTexture(1, nullptr); - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int TerrainShaderPixelShader::shutdown() @@ -2023,7 +2024,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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //setup base pass DX8Wrapper::_Get_D3D_Device8()->SetTexture(0, W3DShaderManager::getShaderTexture(0)->Peek_D3D_Texture()); @@ -2154,7 +2155,7 @@ void TerrainShaderPixelShader::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_PASSTHRU|3); - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } ///Cloud layer rendering shader - used for objects similar to terrain which only need the cloud layer. @@ -2304,9 +2305,9 @@ Int RoadShaderPixelShader::init() Int RoadShaderPixelShader::set(Int pass) { - DX8Wrapper::Set_Texture(0,W3DShaderManager::getShaderTexture(0)); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->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 ); @@ -2345,8 +2346,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)); + WW3D::Get_Render_Backend()->Set_Texture(1,W3DShaderManager::getShaderTexture(1)); + WW3D::Get_Render_Backend()->Set_Texture(2,W3DShaderManager::getShaderTexture(2)); DX8Wrapper::_Get_D3D_Device8()->SetPixelShader(m_dwBaseNoise2PixelShader); @@ -2387,7 +2388,7 @@ void RoadShaderPixelShader::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_PASSTHRU|3); - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int RoadShader2Stage::init() @@ -2408,9 +2409,9 @@ Int RoadShader2Stage::init() Int RoadShader2Stage::set(Int pass) { //First stage always contains base texture. - DX8Wrapper::Set_Texture(0,W3DShaderManager::getShaderTexture(0)); + WW3D::Get_Render_Backend()->Set_Texture(0,W3DShaderManager::getShaderTexture(0)); //Force system to apply world/view transforms. - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_LESSEQUAL); DX8Wrapper::Set_DX8_Render_State(D3DRS_ZWRITEENABLE,FALSE); @@ -2464,7 +2465,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)); + WW3D::Get_Render_Backend()->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); @@ -2477,7 +2478,7 @@ Int RoadShader2Stage::set(Int pass) if (W3DShaderManager::getCurrentShader() == W3DShaderManager::ST_ROAD_BASE_NOISE1) { //cloud map - DX8Wrapper::Set_Texture(1,W3DShaderManager::getShaderTexture(1)); + WW3D::Get_Render_Backend()->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); @@ -2485,7 +2486,7 @@ Int RoadShader2Stage::set(Int pass) else { //light map - DX8Wrapper::Set_Texture(1,W3DShaderManager::getShaderTexture(2)); + WW3D::Get_Render_Backend()->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); @@ -2515,7 +2516,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)); + WW3D::Get_Render_Backend()->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); @@ -2896,17 +2897,17 @@ 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); + WW3D::Get_Render_Backend()->Set_Shader(shader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->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)); DX8Wrapper::Set_DX8_Render_State(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_RED|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_BLUE); //disable writes to alpha } else //normal clear that overwrites everything. - DX8Wrapper::Clear(true, false, Vector3( 0.0f, 0.0f, 0.0f ), TheWaterTransparency->m_minWaterOpacity); + WW3D::Get_Render_Backend()->Clear(true, false, Vector3( 0.0f, 0.0f, 0.0f ), TheWaterTransparency->m_minWaterOpacity); } } @@ -3241,7 +3242,7 @@ Int W3DShaderManager::setShroudTex(Int stage) W3DShroud *shroud; if ((shroud=TheTerrainRenderObject->getShroud()) != nullptr) { - DX8Wrapper::Set_Texture(stage, shroud->getShroudTexture()); + WW3D::Get_Render_Backend()->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); @@ -3325,7 +3326,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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); if (TheGlobalData && (TheGlobalData->m_bilinearTerrainTex || TheGlobalData->m_trilinearTerrainTex)) { DX8Wrapper::Set_DX8_Texture_Stage_State(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); @@ -3604,10 +3605,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)); + WW3D::Get_Render_Backend()->Set_Texture(0, W3DShaderManager::getShaderTexture(2)); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); @@ -3746,7 +3747,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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); DX8Wrapper::_Get_D3D_Device8()->SetTexture(curStage, W3DShaderManager::getShaderTexture(3)->Peek_D3D_Texture()); return TRUE; } @@ -3774,7 +3775,7 @@ void FlatTerrainShaderPixelShader::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 3, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_PASSTHRU|3); - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index 37fc8609328..6c53060b878 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(shader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,identity); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,identity); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); //DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueSpriteShader); - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); - DX8Wrapper::Set_Texture(0,m_backgroundTexture); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles(0,smudgesInRenderBatch*4, 0, smudgesInRenderBatch*5); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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 a2d46136211..03e42cdc082 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/IRenderBackend.h" #include "WW3D2/rinfo.h" #include "WW3D2/camera.h" #include "WW3D2/assetmgr.h" @@ -397,12 +398,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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,identity); - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); //make sure we have all the resources we need @@ -412,7 +413,7 @@ void W3DSnowManager::render(RenderInfoClass &rinfo) if (!usePointSprites && !m_indexBuffer) ReAcquireResources(); - DX8Wrapper::Set_Texture(0,m_snowTexture); + WW3D::Get_Render_Backend()->Set_Texture(0,m_snowTexture); if (!usePointSprites) { @@ -422,7 +423,7 @@ void W3DSnowManager::render(RenderInfoClass &rinfo) Vector3 snowCenter; - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); // Set the render states for using point sprites DX8Wrapper::Set_DX8_Render_State( D3DRS_POINTSPRITEENABLE, TRUE ); @@ -488,9 +489,9 @@ void W3DSnowManager::renderAsQuads(RenderInfoClass &rinfo, Int cubeOriginX, Int } Matrix4x4 identity(true); - DX8Wrapper::Set_Transform(D3DTS_VIEW,identity); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,identity); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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. @@ -568,8 +569,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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->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..09aa739aa5c 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexTerrain,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexTerrain); if (!disableTextures) { if (m_terrainTexture4X) { - DX8Wrapper::Set_Texture(1, m_terrainTexture4X); + WW3D::Get_Render_Backend()->Set_Texture(1, m_terrainTexture4X); } else if (m_terrainTexture2X) { - DX8Wrapper::Set_Texture(1, m_terrainTexture2X); + WW3D::Get_Render_Backend()->Set_Texture(1, m_terrainTexture2X); } else { - DX8Wrapper::Set_Texture(1, m_terrainTexture); + WW3D::Get_Render_Backend()->Set_Texture(1, m_terrainTexture); } } - DX8Wrapper::Draw_Triangles( 0, m_curNumTerrainIndices/3, 0, m_curNumTerrainVertices); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexTerrain,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexTerrain); if (!disableTextures) { if (m_terrainTexture4X) { - DX8Wrapper::Set_Texture(0, m_terrainTexture4X); + WW3D::Get_Render_Backend()->Set_Texture(0, m_terrainTexture4X); } else if (m_terrainTexture2X) { - DX8Wrapper::Set_Texture(0, m_terrainTexture2X); + WW3D::Get_Render_Backend()->Set_Texture(0, m_terrainTexture2X); } else { - DX8Wrapper::Set_Texture(0, m_terrainTexture); + WW3D::Get_Render_Backend()->Set_Texture(0, m_terrainTexture); } } - DX8Wrapper::Draw_Triangles( 0, m_curNumTerrainIndices/3, 0, m_curNumTerrainVertices); + WW3D::Get_Render_Backend()->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..0eb9a49efe6 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBuffer); trackStartIndex=0; mod=m_usedModules; - DX8Wrapper::Set_Transform(D3DTS_WORLD,mod->Transform); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Texture(0,mod->m_stageZeroTexture); + WW3D::Get_Render_Backend()->Set_Index_Buffer_Index_Offset(trackStartIndex); + WW3D::Get_Render_Backend()->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 95a80e521e9..9edae818a44 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/IRenderBackend.h" #include "WW3D2/dx8renderer.h" #include "WW3D2/matinfo.h" #include "WW3D2/mesh.h" @@ -1571,8 +1572,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); + WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); + WW3D::Get_Render_Backend()->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); @@ -1624,29 +1625,29 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD } } - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); Matrix3D tm(1); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); - DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts + WW3D::Get_Render_Backend()->Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts #endif if (m_curNumTreeIndices[0] == 0) { return; } - DX8Wrapper::Set_Shader(detailAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); - DX8Wrapper::Set_Texture(0,m_treeTexture); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,m_treeTexture); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); W3DShaderManager::setShroudTex(1); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); if (m_dwTreeVertexShader) { D3DXMATRIX matProj, matView, matWorld; @@ -1712,22 +1713,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]); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexTree[bNdx],0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexTree[bNdx]); // Render the waving grass - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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]); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); //code above mucks around with W3D states so make sure we reset } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DView.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DView.cpp index d438761a744..531acf34b17 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DView.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DView.cpp @@ -94,6 +94,7 @@ #include "WW3D2/light.h" #include "WW3D2/predlod.h" #include "WW3D2/ww3d.h" +#include "WW3D2/IRenderBackend.h" #include "W3DDevice/GameClient/CameraShakeSystem.h" @@ -1916,7 +1917,7 @@ void W3DView::draw() //The pass that rendered into a texture may have left the z-buffer in a weird state //so clear it before rendering normal scene. ///@todo: Don't clear z-buffer unless shader uses z-bias or anything else that would cause <= z to fail on normal render. - DX8Wrapper::Clear(false, true, Vector3(0.0f,0.0f,0.0f), TheWaterTransparency->m_minWaterOpacity); // Clear z but not color + WW3D::Get_Render_Backend()->Clear(false, true, Vector3(0.0f,0.0f,0.0f), TheWaterTransparency->m_minWaterOpacity); // Clear z but not color W3DDisplay::m_3DScene->setCustomPassMode(SCENE_PASS_DEFAULT); W3DDisplay::m_3DScene->doRender( m_3DCamera ); Coord2D deltaScroll; diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index b2375cb1269..40da6844fc4 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -43,6 +43,7 @@ #include "WW3D2/camera.h" #include "WW3D2/scene.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/IRenderBackend.h" #include "WW3D2/light.h" #include "d3dx8math.h" #include "WWLib/simplevec.h" @@ -208,12 +209,12 @@ static Bool wireframeForDebug = 0; void WaterRenderObjClass::setupJbaWaterShader() { if (!TheWaterTransparency->m_additiveBlend) - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); else - DX8Wrapper::Set_Shader(ShaderClass::_PresetAdditiveShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAdditiveShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->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); @@ -223,7 +224,7 @@ void WaterRenderObjClass::setupJbaWaterShader() // Setting *setting=&m_settings[m_tod]; - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + WW3D::Get_Render_Backend()->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(); @@ -1481,7 +1482,7 @@ void WaterRenderObjClass::renderMirror(CameraClass *cam) Matrix3D reflectedTransform(rRight,rUp,rN,rPos); - DX8Wrapper::Set_Render_Target_With_Z((TextureClass*)m_pReflectionTexture); + WW3D::Get_Render_Backend()->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 @@ -1517,7 +1518,7 @@ void WaterRenderObjClass::renderMirror(CameraClass *cam) WW3D::End_Render(false); // Change the rendertarget back to the main backbuffer - DX8Wrapper::Set_Render_Target((IDirect3DSurface8 *)nullptr); + WW3D::Get_Render_Backend()->Set_Default_Render_Target(); } //------------------------------------------------------------------------------------------------- @@ -1677,7 +1678,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); + WW3D::Get_Render_Backend()->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 @@ -1711,7 +1712,7 @@ void WaterRenderObjClass::Render(RenderInfoClass & rinfo) rinfo.Camera.Apply(); //force an update of all the camera dependent parameters like frustum clip planes //clear the z-buffer to remove changes made by objects inside mirror - DX8Wrapper::Clear(false,true,Vector3(0.1f,0.1f,0.1f)); + WW3D::Get_Render_Backend()->Clear(false,true,Vector3(0.1f,0.1f,0.1f)); } #endif @@ -1747,8 +1748,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(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); if (m_waterTrackSystem) m_waterTrackSystem->flush(rinfo); @@ -1817,12 +1818,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 + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); //we'll be setting our own textures, so reset W3D + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices Vector3 camTran; @@ -1975,7 +1976,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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); if (TheTerrainRenderObject->getShroud()) { @@ -2083,7 +2084,7 @@ void WaterRenderObjClass::renderSky() VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); ShaderClass m_shader2=ShaderClass::_PresetOpaqueShader; @@ -2091,9 +2092,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); + WW3D::Get_Render_Backend()->Set_Shader(m_shader2); - DX8Wrapper::Set_Texture(0,setting->skyTexture); + WW3D::Get_Render_Backend()->Set_Texture(0,setting->skyTexture); //draw an infinite sky plane DynamicVBAccessClass vb_access(BUFFER_TYPE_DYNAMIC_DX8,dynamic_fvf_type,4); @@ -2132,14 +2133,14 @@ void WaterRenderObjClass::renderSky() } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); Matrix3D tm(1); tm.Set_Translation(Vector3(0,0,0)); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); - DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts + WW3D::Get_Render_Backend()->Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts } //------------------------------------------------------------------------------------------------- @@ -2179,11 +2180,11 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) tm.Adjust_Translation(Vector3(SKYBODY_X,SKYBODY_Y,SKYBODY_HEIGHT)); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); ShaderClass m_shader2=ShaderClass::_PresetAlphaShader; @@ -2191,13 +2192,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); + WW3D::Get_Render_Backend()->Set_Shader(m_shader2); // DX8Wrapper::Set_Shader(ShaderClass::/*_PresetAdditiveShader*//*_PresetOpaqueShader*/_PresetAlphaShader); // DX8Wrapper::Set_Texture(0,setting->skyBodyTexture); - DX8Wrapper::Set_Texture(0,m_alphaClippingTexture); + WW3D::Get_Render_Backend()->Set_Texture(0,m_alphaClippingTexture); //draw an infinite sky plane DynamicVBAccessClass vb_access(BUFFER_TYPE_DYNAMIC_DX8,dynamic_fvf_type,4); @@ -2236,10 +2237,10 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); - DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts + WW3D::Get_Render_Backend()->Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts } //Defines for procedural water animation. @@ -2388,8 +2389,8 @@ void WaterRenderObjClass::renderWaterMesh() m_vertexBufferD3D->Unlock(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); //position the water surface - DX8Wrapper::Set_Material(m_meshVertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface + WW3D::Get_Render_Backend()->Set_Material(m_meshVertexMaterialClass); ShaderClass::CullModeType oldCullMode=m_shaderClass.Get_Cull_Mode(); @@ -2398,25 +2399,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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Texture(0,setting->waterTexture); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Light(0,*m_meshLight); + WW3D::Get_Render_Backend()->Clear_Light(1); + WW3D::Get_Render_Backend()->Clear_Light(2); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices #endif @@ -2458,8 +2459,8 @@ void WaterRenderObjClass::renderWaterMesh() m_vertexBufferD3DOffset += mx*my; //advance past vertices already in buffer - DX8Wrapper::Set_Texture(0,nullptr); - DX8Wrapper::Set_Texture(1,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); ShaderClass::Invalidate(); m_shaderClass.Set_Cull_Mode(oldCullMode); //water should be visible from both sides @@ -2728,7 +2729,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. + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); ///@todo: Figure out why rivers don't draw without reset of all states. Int rectangleCount = pTrig->getNumPoints()/2; rectangleCount--; @@ -2912,10 +2913,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 + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->Set_Texture(0,m_riverTexture); //set to blue setupJbaWaterShader(); @@ -2934,7 +2935,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); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); if (wireframeForDebug) { DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID); } @@ -2953,20 +2954,20 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) void WaterRenderObjClass::setupFlatWaterShader() { - DX8Wrapper::Set_Texture(0,m_riverTexture); + WW3D::Get_Render_Backend()->Set_Texture(0,m_riverTexture); if (!TheWaterTransparency->m_additiveBlend) - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); else - DX8Wrapper::Set_Shader(ShaderClass::_PresetAdditiveShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAdditiveShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices //Setup shroud to render in same pass as water if (m_trapezoidWaterPixelShader) @@ -3276,14 +3277,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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->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 (WW3D::Get_Render_Backend()->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 ); @@ -3314,7 +3315,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 + WW3D::Get_Render_Backend()->Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2);//lorenzen thinks this is where to itereate the soft shoreline effect } @@ -3323,7 +3324,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); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); m_pDev->SetRenderState(D3DRS_ALPHABLENDENABLE , true); DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID); } @@ -3358,7 +3359,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); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,rectangleCount*2, 0, (rectangleCount+1)*2); DX8Wrapper::_Get_D3D_Device8()->SetRenderState(D3DRS_ZFUNC, D3DCMP_EQUAL); W3DShaderManager::resetShader(W3DShaderManager::ST_SHROUD_TEXTURE); } @@ -3391,12 +3392,12 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) V3=-vRight-vUp; VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Shader(ShaderClass::/*_PresetAdditiveShader*//*_PresetOpaqueShader*/_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::/*_PresetAdditiveShader*//*_PresetOpaqueShader*/_PresetAlphaShader); // DX8Wrapper::Set_Texture(0,setting->skyBodyTexture); - DX8Wrapper::Set_Texture(0,m_alphaClippingTexture); + WW3D::Get_Render_Backend()->Set_Texture(0,m_alphaClippingTexture); //draw an infinite sky plane DynamicVBAccessClass vb_access(BUFFER_TYPE_DYNAMIC_DX8,4); @@ -3435,15 +3436,15 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); - DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts + WW3D::Get_Render_Backend()->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..5ba89947f60 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/IRenderBackend.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. + WW3D::Get_Render_Backend()->Set_Index_Buffer(TheWaterTracksRenderSystem->m_indexBuffer,batchStart); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface - DX8Wrapper::Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBuffer); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->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 fac042dc906..fa8c711531e 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp @@ -35,6 +35,21 @@ IRenderBackend *Create_Render_Backend(void * window, bool lite) return DX8Backend::Create(window, lite); } +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; +} + DX8Backend::DX8Backend(bool lite) : Lite(lite) { } @@ -59,6 +74,66 @@ DX8Backend *DX8Backend::Create(void * window, bool lite) return new DX8Backend(lite); } +int DX8Backend::Get_Render_Device_Count() const +{ + return DX8Wrapper::Get_Render_Device_Count(); +} + +int DX8Backend::Get_Render_Device() const +{ + return DX8Wrapper::Get_Render_Device(); +} + +const char * DX8Backend::Get_Render_Device_Name(int device_index) const +{ + return DX8Wrapper::Get_Render_Device_Name(device_index); +} + +void DX8Backend::Get_Device_Resolution(int & width, int & height, int & bits, bool & windowed) const +{ + DX8Wrapper::Get_Device_Resolution(width, height, bits, windowed); +} + +void DX8Backend::Get_Render_Target_Resolution(int & width, int & height, int & bits, bool & windowed) const +{ + DX8Wrapper::Get_Render_Target_Resolution(width, height, bits, windowed); +} + +int DX8Backend::Get_Device_Resolution_Width() const +{ + return DX8Wrapper::Get_Device_Resolution_Width(); +} + +int DX8Backend::Get_Device_Resolution_Height() const +{ + return DX8Wrapper::Get_Device_Resolution_Height(); +} + +bool DX8Backend::Is_Windowed() const +{ + return DX8Wrapper::Is_Windowed(); +} + +int DX8Backend::Get_Texture_Bitdepth() const +{ + return DX8Wrapper::Get_Texture_Bitdepth(); +} + +int DX8Backend::Get_Swap_Interval() const +{ + return DX8Wrapper::Get_Swap_Interval(); +} + +bool DX8Backend::Has_Stencil() const +{ + return DX8Wrapper::Has_Stencil(); +} + +WW3DFormat DX8Backend::Get_Back_Buffer_Format() const +{ + return DX8Wrapper::getBackBufferFormat(); +} + void DX8Backend::Set_Gamma(float gamma, float bright, float contrast, bool calibrate, bool uselimit) { DX8Wrapper::Set_Gamma(gamma, bright, contrast, calibrate, uselimit); @@ -103,6 +178,114 @@ void DX8Backend::Invalidate_Cached_Render_States() DX8Wrapper::Invalidate_Cached_Render_States(); } +void DX8Backend::Set_Render_Target_With_Z(TextureClass * texture, ZTextureClass * ztexture) +{ + DX8Wrapper::Set_Render_Target_With_Z(texture, ztexture); +} + +void DX8Backend::Set_Default_Render_Target() +{ + DX8Wrapper::Set_Render_Target(static_cast(nullptr)); +} + +bool DX8Backend::Is_Render_To_Texture() const +{ + return DX8Wrapper::Is_Render_To_Texture(); +} + +void DX8Backend::Set_Shader(const ShaderClass & shader) +{ + DX8Wrapper::Set_Shader(shader); +} + +void DX8Backend::Set_Material(const VertexMaterialClass * material) +{ + DX8Wrapper::Set_Material(material); +} + +void DX8Backend::Set_Texture(unsigned stage, TextureBaseClass * texture) +{ + DX8Wrapper::Set_Texture(stage, texture); +} + +void DX8Backend::Apply_Render_State_Changes() +{ + DX8Wrapper::Apply_Render_State_Changes(); +} + +void DX8Backend::Set_Vertex_Buffer(const VertexBufferClass * vb, unsigned stream) +{ + DX8Wrapper::Set_Vertex_Buffer(vb, stream); +} + +void DX8Backend::Set_Vertex_Buffer(const DynamicVBAccessClass & vba) +{ + DX8Wrapper::Set_Vertex_Buffer(vba); +} + +void DX8Backend::Set_Index_Buffer(const IndexBufferClass * ib, unsigned short index_base_offset) +{ + DX8Wrapper::Set_Index_Buffer(ib, index_base_offset); +} + +void DX8Backend::Set_Index_Buffer(const DynamicIBAccessClass & iba, unsigned short index_base_offset) +{ + DX8Wrapper::Set_Index_Buffer(iba, index_base_offset); +} + +void DX8Backend::Set_Index_Buffer_Index_Offset(unsigned offset) +{ + DX8Wrapper::Set_Index_Buffer_Index_Offset(offset); +} + +void DX8Backend::Draw_Triangles(unsigned buffer_type, unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) +{ + DX8Wrapper::Draw_Triangles(buffer_type, start_index, polygon_count, min_vertex_index, vertex_count); +} + +void DX8Backend::Draw_Triangles(unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) +{ + DX8Wrapper::Draw_Triangles(start_index, polygon_count, min_vertex_index, vertex_count); +} + +void DX8Backend::Draw_Strip(unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) +{ + DX8Wrapper::Draw_Strip(start_index, polygon_count, min_vertex_index, vertex_count); +} + +void DX8Backend::Set_Transform(RenderBackendTransform transform, const Matrix4x4 & m) +{ + DX8Wrapper::Set_Transform(To_D3D_Transform(transform), m); +} + +void DX8Backend::Set_Transform(RenderBackendTransform transform, const Matrix3D & m) +{ + DX8Wrapper::Set_Transform(To_D3D_Transform(transform), m); +} + +void DX8Backend::Get_Transform(RenderBackendTransform transform, Matrix4x4 & m) const +{ + DX8Wrapper::Get_Transform(To_D3D_Transform(transform), m); +} + +void DX8Backend::Set_World_Identity() +{ + DX8Wrapper::Set_World_Identity(); +} + +void DX8Backend::Set_View_Identity() +{ + DX8Wrapper::Set_View_Identity(); +} + +void DX8Backend::Set_Projection_Transform_With_Z_Bias(const Matrix4x4 & matrix, float znear, float zfar) +{ + DX8Wrapper::Set_Projection_Transform_With_Z_Bias(matrix, znear, zfar); +} + void DX8Backend::Set_Ambient(const Vector3 & color) { DX8Wrapper::Set_Ambient(color); @@ -112,3 +295,18 @@ void DX8Backend::Set_Light_Environment(LightEnvironmentClass * light_env) { DX8Wrapper::Set_Light_Environment(light_env); } + +void DX8Backend::Set_Light(unsigned index, const LightClass & light) +{ + DX8Wrapper::Set_Light(index, light); +} + +void DX8Backend::Clear_Light(unsigned index) +{ + DX8Wrapper::Set_Light(index, nullptr); +} + +void DX8Backend::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/Backend/DX8Backend.h b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h index a5597c9edef..b2dec948184 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h @@ -31,6 +31,19 @@ class DX8Backend : public IRenderBackend virtual ~DX8Backend() override; + virtual int Get_Render_Device_Count() const override; + virtual int Get_Render_Device() const override; + virtual const char * Get_Render_Device_Name(int device_index) const override; + virtual void Get_Device_Resolution(int & width, int & height, int & bits, bool & windowed) const override; + virtual void Get_Render_Target_Resolution(int & width, int & height, int & bits, bool & windowed) const override; + virtual int Get_Device_Resolution_Width() const override; + virtual int Get_Device_Resolution_Height() const override; + virtual bool Is_Windowed() const override; + virtual int Get_Texture_Bitdepth() const override; + virtual int Get_Swap_Interval() const override; + virtual bool Has_Stencil() const override; + virtual WW3DFormat Get_Back_Buffer_Format() const override; + virtual void Set_Gamma(float gamma, float bright, float contrast, bool calibrate, bool uselimit) override; virtual void Begin_Scene() override; @@ -42,8 +55,40 @@ class DX8Backend : public IRenderBackend virtual void Set_Viewport(const RenderBackendViewport & viewport) override; virtual void Invalidate_Cached_Render_States() override; + virtual void Set_Render_Target_With_Z(TextureClass * texture, ZTextureClass * ztexture) override; + virtual void Set_Default_Render_Target() override; + virtual bool Is_Render_To_Texture() const override; + + virtual void Set_Shader(const ShaderClass & shader) override; + virtual void Set_Material(const VertexMaterialClass * material) override; + virtual void Set_Texture(unsigned stage, TextureBaseClass * texture) override; + virtual void Apply_Render_State_Changes() override; + + virtual void Set_Vertex_Buffer(const VertexBufferClass * vb, unsigned stream) override; + virtual void Set_Vertex_Buffer(const DynamicVBAccessClass & vba) override; + virtual void Set_Index_Buffer(const IndexBufferClass * ib, unsigned short index_base_offset) override; + virtual void Set_Index_Buffer(const DynamicIBAccessClass & iba, unsigned short index_base_offset) override; + virtual void Set_Index_Buffer_Index_Offset(unsigned offset) override; + + virtual void Draw_Triangles(unsigned buffer_type, unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) override; + virtual void Draw_Triangles(unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) override; + virtual void Draw_Strip(unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) override; + + virtual void Set_Transform(RenderBackendTransform transform, const Matrix4x4 & m) override; + virtual void Set_Transform(RenderBackendTransform transform, const Matrix3D & m) override; + virtual void Get_Transform(RenderBackendTransform transform, Matrix4x4 & m) const override; + virtual void Set_World_Identity() override; + virtual void Set_View_Identity() override; + virtual void Set_Projection_Transform_With_Z_Bias(const Matrix4x4 & matrix, float znear, float zfar) override; + virtual void Set_Ambient(const Vector3 & color) override; virtual void Set_Light_Environment(LightEnvironmentClass * light_env) override; + virtual void Set_Light(unsigned index, const LightClass & light) override; + virtual void Clear_Light(unsigned index) override; + virtual void Set_Fog(bool enable, const Vector3 & color, float start, float end) override; private: explicit DX8Backend(bool lite); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h index 28dd3b14ec8..af172d55c48 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h @@ -22,11 +22,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 RenderBackendViewport { @@ -38,20 +52,34 @@ struct RenderBackendViewport 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(...) -> Get_Render_Backend()->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 IRenderBackend { public: virtual ~IRenderBackend() {} + virtual int Get_Render_Device_Count() const = 0; + virtual int Get_Render_Device() const = 0; + virtual const char * Get_Render_Device_Name(int device_index) const = 0; + virtual void Get_Device_Resolution(int & width, int & height, int & bits, bool & windowed) const = 0; + virtual void Get_Render_Target_Resolution(int & width, int & height, int & bits, bool & windowed) const = 0; + virtual int Get_Device_Resolution_Width() const = 0; + virtual int Get_Device_Resolution_Height() const = 0; + virtual bool Is_Windowed() const = 0; + virtual int Get_Texture_Bitdepth() const = 0; + virtual int Get_Swap_Interval() const = 0; + virtual bool Has_Stencil() const = 0; + virtual WW3DFormat Get_Back_Buffer_Format() const = 0; + virtual void Set_Gamma(float gamma, float bright, float contrast, bool calibrate = true, bool uselimit = true) = 0; virtual void Begin_Scene() = 0; @@ -63,6 +91,38 @@ class IRenderBackend virtual void Set_Viewport(const RenderBackendViewport & viewport) = 0; virtual void Invalidate_Cached_Render_States() = 0; + virtual void Set_Render_Target_With_Z(TextureClass * texture, ZTextureClass * ztexture = nullptr) = 0; + virtual void Set_Default_Render_Target() = 0; + virtual bool Is_Render_To_Texture() const = 0; + + virtual void Set_Shader(const ShaderClass & shader) = 0; + virtual void Set_Material(const VertexMaterialClass * material) = 0; + virtual void Set_Texture(unsigned stage, TextureBaseClass * texture) = 0; + virtual void Apply_Render_State_Changes() = 0; + + virtual void Set_Vertex_Buffer(const VertexBufferClass * vb, unsigned stream = 0) = 0; + virtual void Set_Vertex_Buffer(const DynamicVBAccessClass & vba) = 0; + virtual void Set_Index_Buffer(const IndexBufferClass * ib, unsigned short index_base_offset) = 0; + virtual void Set_Index_Buffer(const DynamicIBAccessClass & iba, unsigned short index_base_offset) = 0; + virtual void Set_Index_Buffer_Index_Offset(unsigned offset) = 0; + + virtual void Draw_Triangles(unsigned buffer_type, unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) = 0; + virtual void Draw_Triangles(unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) = 0; + virtual void Draw_Strip(unsigned short start_index, unsigned short polygon_count, + unsigned short min_vertex_index, unsigned short vertex_count) = 0; + + virtual void Set_Transform(RenderBackendTransform transform, const Matrix4x4 & m) = 0; + virtual void Set_Transform(RenderBackendTransform transform, const Matrix3D & m) = 0; + virtual void Get_Transform(RenderBackendTransform transform, Matrix4x4 & m) const = 0; + virtual void Set_World_Identity() = 0; + virtual void Set_View_Identity() = 0; + virtual void Set_Projection_Transform_With_Z_Bias(const Matrix4x4 & matrix, float znear, float zfar) = 0; + virtual void Set_Ambient(const Vector3 & color) = 0; virtual void Set_Light_Environment(LightEnvironmentClass * light_env) = 0; + virtual void Set_Light(unsigned index, const LightClass & light) = 0; + virtual void Clear_Light(unsigned index) = 0; + virtual void Set_Fog(bool enable, const Vector3 & color, float start, float end) = 0; }; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8polygonrenderer.h b/Core/Libraries/Source/WWVegas/WW3D2/dx8polygonrenderer.h index 17b7558049a..b874fbfd6a7 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->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( + WW3D::Get_Render_Backend()->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( + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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..1318f73621a 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vertex_buffer); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vertex_buffer); + WW3D::Get_Render_Backend()->Set_Index_Buffer(index_buffer,0); SNAPSHOT_SAY(("DX8RigidFVFCategoryContainer::Render()")); for (unsigned p=0;pSet_Vertex_Buffer(nullptr); // Free up the reference to the current vertex buffer // (in case it is the dynamic, which may have to be resized) //'Generals' customization to allow more than 65535 vertices @@ -1409,8 +1410,8 @@ void DX8SkinFVFCategoryContainer::Render() SNAPSHOT_SAY(("Set vb: %x ib: %x",&vb.FVF_Info(),index_buffer)); - DX8Wrapper::Set_Vertex_Buffer(vb); - DX8Wrapper::Set_Index_Buffer(index_buffer,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb); + WW3D::Get_Render_Backend()->Set_Index_Buffer(index_buffer,0); //Flush the meshes which fit in the vertex buffer, applying all texture variations for (unsigned pass=0;passGet_Texture_Name().str() : "null")); - DX8Wrapper::Set_Texture(i,Peek_Texture(i)); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Shader(theShader); //VertexMaterialClass *material = VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); //DX8Wrapper::Set_Material(material); //REF_PTR_RELEASE(material); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Set_World_Identity(); } else { SNAPSHOT_SAY(("Set_World_Transform")); - DX8Wrapper::Set_Transform(D3DTS_WORLD,*world_transform); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Set_Shader(theAlphaShader); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->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. + WW3D::Get_Render_Backend()->Set_Material(nullptr); //force a reset of vertex material since we secretly changed opacity + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(nullptr); + WW3D::Get_Render_Backend()->Set_Index_Buffer(nullptr,0); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h b/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h index 746dbedc75c..ce99aa2b6a6 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8wrapper.h @@ -703,6 +703,7 @@ class DX8Wrapper friend void DX8_Assert(); friend class WW3D; + friend class DX8Backend; 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..a9ac0d8a92f 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(dynamic_vb); + WW3D::Get_Render_Backend()->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]); + WW3D::Get_Render_Backend()->Set_Texture(0,texture_array0[0]); } else { - DX8Wrapper::Set_Texture(0,MatDesc->Peek_Single_Texture(pass, 0)); + WW3D::Get_Render_Backend()->Set_Texture(0,MatDesc->Peek_Single_Texture(pass, 0)); } if (texture_array1) { - DX8Wrapper::Set_Texture(1,texture_array1[0]); + WW3D::Get_Render_Backend()->Set_Texture(1,texture_array1[0]); } else { - DX8Wrapper::Set_Texture(1,MatDesc->Peek_Single_Texture(pass, 1)); + WW3D::Get_Render_Backend()->Set_Texture(1,MatDesc->Peek_Single_Texture(pass, 1)); } if (material_array) { - DX8Wrapper::Set_Material(material_array[tris[0].I]); + WW3D::Get_Render_Backend()->Set_Material(material_array[tris[0].I]); } else { - DX8Wrapper::Set_Material(MatDesc->Peek_Single_Material(pass)); + WW3D::Get_Render_Backend()->Set_Material(MatDesc->Peek_Single_Material(pass)); } if (shader_array) { - DX8Wrapper::Set_Shader(shader_array[0]); + WW3D::Get_Render_Backend()->Set_Shader(shader_array[0]); } else { - DX8Wrapper::Set_Shader(MatDesc->Get_Single_Shader(pass)); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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( + WW3D::Get_Render_Backend()->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) WW3D::Get_Render_Backend()->Set_Texture(0,texture_array0[next_tri_idx]); + if (texture1_changed) WW3D::Get_Render_Backend()->Set_Texture(1,texture_array1[next_tri_idx]); + if (material_changed) WW3D::Get_Render_Backend()->Set_Material(material_array[tris[next_tri_idx].I]); + if (shader_changed) WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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..978c6fe018c 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Shader(Shader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); VertexMaterialClass *vm=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vm); + WW3D::Get_Render_Backend()->Set_Material(vm); REF_PTR_RELEASE(vm); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib,0); + WW3D::Get_Render_Backend()->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..f14db833c68 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 "IRenderBackend.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()); + WW3D::Get_Render_Backend()->Set_Material(Peek_Material()); + WW3D::Get_Render_Backend()->Set_Shader(Peek_Shader()); for (int i=0;iGet_Max_Textures_Per_Pass();++i) { - DX8Wrapper::Set_Texture(i,Peek_Texture(i)); + WW3D::Get_Render_Backend()->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..92d70c9c0a9 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,identity); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,identity); - DX8Wrapper::Set_Material(PointMaterial); - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,Texture); + WW3D::Get_Render_Backend()->Set_Material(PointMaterial); + WW3D::Get_Render_Backend()->Set_Shader(Shader); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,identity); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,identity); - DX8Wrapper::Set_Material(PointMaterial); - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,Texture); + WW3D::Get_Render_Backend()->Set_Material(PointMaterial); + WW3D::Get_Render_Backend()->Set_Shader(Shader); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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..11fa5398adb 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Shader(RingShader); + WW3D::Get_Render_Backend()->Set_Texture(0,RingTexture); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD, temp); } else { - DX8Wrapper::Set_Transform(D3DTS_WORLD, Transform); + WW3D::Get_Render_Backend()->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..3fa4dfe08e4 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_VIEW,view); Matrix4x4 identity(true); - DX8Wrapper::Set_Transform(D3DTS_WORLD,identity); - DX8Wrapper::Set_Transform(D3DTS_VIEW,identity); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,identity); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(Verts); + WW3D::Get_Render_Backend()->Set_Material(mat); + WW3D::Get_Render_Backend()->Set_Texture(0,Texture); + WW3D::Get_Render_Backend()->Set_Shader(shader); if (sorting) { SortingRendererClass::Insert_Triangles(obj_sphere,0,tidx,0,vnum); } else { - DX8Wrapper::Draw_Triangles(0,tidx,0,vnum); + WW3D::Get_Render_Backend()->Draw_Triangles(0,tidx,0,vnum); } REF_PTR_RELEASE(mat); } - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + WW3D::Get_Render_Backend()->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..b9453fe6eb0 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Shader(render_state.shader); - DX8Wrapper::Set_Material(render_state.material); + WW3D::Get_Render_Backend()->Set_Material(render_state.material); for (int i=0;iGet_Max_Textures_Per_Pass();++i) { - DX8Wrapper::Set_Texture(i,render_state.Textures[i]); + WW3D::Get_Render_Backend()->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!) + WW3D::Get_Render_Backend()->Set_Index_Buffer(dyn_ib_access,0); // Override with this buffer (do something to prevent need for this!) + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(dyn_vb_access); // Override with this buffer (do something to prevent need for this!) - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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( + WW3D::Get_Render_Backend()->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( + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_VIEW,old_view); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(nullptr,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,old_view); + WW3D::Get_Render_Backend()->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..3d7e6a1757c 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Shader(SphereShader); + WW3D::Get_Render_Backend()->Set_Texture(0,SphereTexture); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,ident); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,tm); render_sphere(); - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,view); } else { - DX8Wrapper::Set_Transform(D3DTS_WORLD,temp); + WW3D::Get_Render_Backend()->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..4f15fa1de68 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_VIEW,view); Matrix4x4 identity(true); - DX8Wrapper::Set_Transform(D3DTS_WORLD,identity); - DX8Wrapper::Set_Transform(D3DTS_VIEW,identity); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,identity); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(Verts); + WW3D::Get_Render_Backend()->Set_Texture(0,Texture); + WW3D::Get_Render_Backend()->Set_Shader(shader); if (sorting) { @@ -1378,12 +1379,12 @@ void StreakRendererClass::RenderStreak } else { - DX8Wrapper::Draw_Triangles(0,triangleIndex,0,vnum); + WW3D::Get_Render_Backend()->Draw_Triangles(0,triangleIndex,0,vnum); } } - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + WW3D::Get_Render_Backend()->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..8310df5dc08 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 "IRenderBackend.h" // DEBUG DEBUG @@ -1136,7 +1136,7 @@ bool TexProjectClass::Compute_Texture /* ** Set the render target */ - DX8Wrapper::Set_Render_Target_With_Z (rtarget,ztarget); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Default_Render_Target(); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp b/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp index c43588d279d..52dd5850ae7 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp @@ -512,7 +512,7 @@ void *WW3D::Get_Window() *=============================================================================================*/ bool WW3D::Is_Windowed() { - return DX8Wrapper::Is_Windowed(); + return Get_Render_Backend()->Is_Windowed(); } /*********************************************************************************************** @@ -556,7 +556,7 @@ WW3DErrorType WW3D::Toggle_Windowed () *=============================================================================================*/ int WW3D::Get_Render_Device() { - return DX8Wrapper::Get_Render_Device(); + return Get_Render_Backend()->Get_Render_Device(); } @@ -595,7 +595,7 @@ const RenderDeviceDescClass & WW3D::Get_Render_Device_Desc(int deviceidx) *=============================================================================================*/ int WW3D::Get_Render_Device_Count() { - return DX8Wrapper::Get_Render_Device_Count(); + return Get_Render_Backend()->Get_Render_Device_Count(); } @@ -614,7 +614,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 Get_Render_Backend()->Get_Render_Device_Name(device_index); } @@ -657,7 +657,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); + Get_Render_Backend()->Get_Render_Target_Resolution(set_w,set_h,set_bits,set_windowed); } @@ -676,7 +676,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); + Get_Render_Backend()->Get_Device_Resolution(set_w,set_h,set_bits,set_windowed); } @@ -1242,7 +1242,7 @@ void WW3D::Set_Ext_Swap_Interval(long swap) *=============================================================================================*/ long WW3D::Get_Ext_Swap_Interval() { - return DX8Wrapper::Get_Swap_Interval(); + return Get_Render_Backend()->Get_Swap_Interval(); } @@ -1299,12 +1299,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, Get_Render_Backend()->Get_Device_Resolution_Width()); + y = Bound(y, 0, Get_Render_Backend()->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 / Get_Render_Backend()->Get_Device_Resolution_Width(); + fy = (float)y / Get_Render_Backend()->Get_Device_Resolution_Height(); } @@ -2034,7 +2034,7 @@ void WW3D::Set_Texture_Bitdepth(int bitdepth) int WW3D::Get_Texture_Bitdepth() { - return DX8Wrapper::Get_Texture_Bitdepth(); + return Get_Render_Backend()->Get_Texture_Bitdepth(); } void WW3D::Set_MSAA_Mode(MultiSampleModeEnum mode) diff --git a/Core/Tools/W3DView/GammaDialog.cpp b/Core/Tools/W3DView/GammaDialog.cpp index 4b9467b11f9..87af72ba4cf 100644 --- a/Core/Tools/W3DView/GammaDialog.cpp +++ b/Core/Tools/W3DView/GammaDialog.cpp @@ -22,7 +22,7 @@ #include "StdAfx.h" #include "W3DView.h" #include "GammaDialog.h" -#include "WW3D2/dx8wrapper.h" +#include "WW3D2/ww3d.h" #ifdef RTS_DEBUG #define new DEBUG_NEW @@ -94,7 +94,7 @@ void GammaDialogClass::OnOK() if (m_gamma<10) m_gamma=10; if (m_gamma>30) m_gamma=30; ::AfxGetApp()->WriteProfileInt("Config","Gamma",m_gamma); - DX8Wrapper::Set_Gamma(m_gamma/10.0f,0.0f,1.0f); + WW3D::Set_Gamma(m_gamma/10.0f,0.0f,1.0f); CDialog::OnOK(); } @@ -103,7 +103,7 @@ void GammaDialogClass::OnReleasedcaptureGammaSlider(NMHDR* pNMHDR, LRESULT* pRes { // TODO: Add your control notification handler code here m_gamma=m_gammaslider.GetPos(); - DX8Wrapper::Set_Gamma(m_gamma/10.0f,0.0f,1.0f); + WW3D::Set_Gamma(m_gamma/10.0f,0.0f,1.0f); CString string; string.Format("%3.2f",m_gamma/10.0f); SetDlgItemText(IDC_GAMMA_DISPLAY,string); diff --git a/Core/Tools/W3DView/MainFrm.cpp b/Core/Tools/W3DView/MainFrm.cpp index e42303f5ee4..34e72ced8f9 100644 --- a/Core/Tools/W3DView/MainFrm.cpp +++ b/Core/Tools/W3DView/MainFrm.cpp @@ -587,7 +587,7 @@ CMainFrame::OnCreateClient gamma=gamma/10.0f; if (gamma<1.0) gamma=1.0; if (gamma>3.0) gamma=3.0; - DX8Wrapper::Set_Gamma(gamma,0.0f,1.0f); + WW3D::Set_Gamma(gamma,0.0f,1.0f); } } } @@ -4206,9 +4206,9 @@ void CMainFrame::OnEnableGammaCorrection() gamma=gamma/10.0f; if (gamma<1.0) gamma=1.0; if (gamma>3.0) gamma=3.0; - DX8Wrapper::Set_Gamma(gamma,0.0f,1.0f); + WW3D::Set_Gamma(gamma,0.0f,1.0f); } else { - DX8Wrapper::Set_Gamma(1.0,0.0f,1.0f); + WW3D::Set_Gamma(1.0,0.0f,1.0f); } } diff --git a/Core/Tools/W3DView/ScreenCursor.cpp b/Core/Tools/W3DView/ScreenCursor.cpp index 8c358221e59..29831db453e 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/IRenderBackend.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()); + WW3D::Get_Render_Backend()->Set_Material(m_pVertMaterial.Peek()); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetATestBlend2DShader); + WW3D::Get_Render_Backend()->Set_Texture(0,m_pTexture.Peek()); - DX8Wrapper::Set_Vertex_Buffer(vbaccess); - DX8Wrapper::Set_Index_Buffer(ibaccess,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vbaccess); + WW3D::Get_Render_Backend()->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..3f0399e1b11 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb_access); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); Matrix3D tm(1); //identity - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,texture->getTexture()); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetMultiplicativeShader); break; case SHADOW_ALPHA_DECAL: - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); break; case SHADOW_ADDITIVE_DECAL: - DX8Wrapper::Set_Shader(ShaderClass::_PresetAdditiveShader); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->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..46e3cc174da 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); //turn off textures + WW3D::Get_Render_Backend()->Set_Texture(1,nullptr); //turn off textures + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices renderStencilShadows(); - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->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 (!WW3D::Get_Render_Backend()->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..575a3bcb5d3 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBib,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBib); + WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); if (m_curNumNormalBibIndices) { - DX8Wrapper::Set_Texture(0,m_bibTexture); - DX8Wrapper::Draw_Triangles( 0, m_curNumNormalBibIndices/3, 0, m_curNumNormalBibVertex); + WW3D::Get_Render_Backend()->Set_Texture(0,m_bibTexture); + WW3D::Get_Render_Backend()->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, + WW3D::Get_Render_Backend()->Set_Texture(0,m_highlightBibTexture); + WW3D::Get_Render_Backend()->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..c35dc141051 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/IRenderBackend.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) WW3D::Get_Render_Backend()->Set_Texture(0,m_bridgeTexture); // Draw all the bridges. - DX8Wrapper::Draw_Triangles( m_firstIndex, m_numPolygons, m_firstVertex, m_numVertex); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBridge,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBridge); + WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); #ifdef RTS_DEBUG //DX8Wrapper::Set_Shader(detailShader); // shows alpha clipping. #endif - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterial); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBridge,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBridge); + WW3D::Get_Render_Backend()->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..1d790f06e08 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD, tm); - DX8Wrapper::Draw_Triangles( 0, 1, 0, 3); + WW3D::Get_Render_Backend()->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..e37a5a2f4e4 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexRoad,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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()); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(nullptr,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(nullptr); if (pDynamicLightsIterator) { for (i=0; im_curNumRoadIndices == 0) continue; if (wireframe) { - DX8Wrapper::Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); } else { m_roadTypes[i].applyTexture(); if (cloudTexture) { - DX8Wrapper::Set_Texture(1,cloudTexture); + WW3D::Get_Render_Backend()->Set_Texture(1,cloudTexture); } } - DX8Wrapper::Set_Shader(detailAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); //Draw all the roads. - DX8Wrapper::Draw_Triangles( 0, m_curNumRoadIndices/3, 0, m_curNumRoadVertices); + WW3D::Get_Render_Backend()->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 aedda9bc0da..75edaf053cc 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp @@ -57,6 +57,7 @@ #include "WW3D2/dx8renderer.h" #include "WW3D2/sortingrenderer.h" #include "WW3D2/dx8wrapper.h" +#include "WW3D2/IRenderBackend.h" #include "WW3D2/light.h" #include "WW3D2/matpass.h" #include "WW3D2/shader.h" @@ -858,7 +859,7 @@ void RTS3DScene::Flush(RenderInfoClass & rinfo) #ifdef USE_NON_STENCIL_OCCLUSION flushOccludedObjects(rinfo); #else - if (DX8Wrapper::Has_Stencil()) + if (WW3D::Get_Render_Backend()->Has_Stencil()) flushOccludedObjectsIntoStencil(rinfo); #endif @@ -971,10 +972,10 @@ void RTS3DScene::updatePlayerColorPasses() void RTS3DScene::Render(RenderInfoClass & rinfo) { //USE_PERF_TIMER(NonTerrainRender) - DX8Wrapper::Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); + WW3D::Get_Render_Backend()->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 && WW3D::Get_Render_Backend()->Has_Stencil(); if (Get_Extra_Pass_Polygon_Mode() == EXTRA_PASS_DISABLE) { @@ -1015,7 +1016,7 @@ void RTS3DScene::Render(RenderInfoClass & rinfo) //a projected alpha texture which will later be used to determine where //wireframe should be visible. ///@todo: Clearing to black may not be needed if the scene already did the clear. - DX8Wrapper::Clear(true, false, Vector3(0.0f,0.0f,0.0f),1.0f); // Clear color but not z + WW3D::Get_Render_Backend()->Clear(true, false, Vector3(0.0f,0.0f,0.0f),1.0f); // Clear color but not z DX8Wrapper::Set_DX8_Render_State(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_ALPHA); DX8Wrapper::Set_DX8_Render_State (D3DRS_ZBIAS, 0); @@ -1075,7 +1076,7 @@ void RTS3DScene::Render(RenderInfoClass & rinfo) Customized_Render(rinfo); break; case EXTRA_PASS_CLEAR_LINE: - DX8Wrapper::Clear(true, false, Vector3(0.0f,0.0f,0.0f), 0.0f); // Clear color but not z + WW3D::Get_Render_Backend()->Clear(true, false, Vector3(0.0f,0.0f,0.0f), 0.0f); // Clear color but not z WW3D::Enable_Texturing(false); WW3D::Enable_Coloring(0xff008000); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_WIREFRAME); @@ -1262,11 +1263,11 @@ void renderStenciledPlayerColor( UnsignedInt color, UnsignedInt stencilRef, Bool v[2].color = color; v[3].color = color; - DX8Wrapper::Set_Shader(PlayerColorShader); + WW3D::Get_Render_Backend()->Set_Shader(PlayerColorShader); VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Apply_Render_State_Changes(); //force update all render states + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update all render states LPDIRECT3DDEVICE8 m_pDev=DX8Wrapper::_Get_D3D_Device8(); @@ -1574,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 (WW3D::Get_Render_Backend()->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 ); @@ -1613,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 (WW3D::Get_Render_Backend()->Has_Stencil()) DX8Wrapper::Set_DX8_Render_State(D3DRS_STENCILREF, 0 ); for (i=0; i #include #include "WW3D2/dx8wrapper.h" +#include "WW3D2/IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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)); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass(SC_ADD)); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBufferScreen); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); switch (fade) { default: case ScriptEngine::FADE_ADD: - DX8Wrapper::Draw_Triangles( 0,2, 0, (2*3)); + WW3D::Get_Render_Backend()->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)); + WW3D::Get_Render_Backend()->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)); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,2, 0, (2*3)); + WW3D::Get_Render_Backend()->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)); + WW3D::Get_Render_Backend()->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..5b431b76fa2 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Material(_BoxMaterial); + WW3D::Get_Render_Backend()->Set_Shader(_BoxShader); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); - DX8Wrapper::Set_Index_Buffer(ibaccess,0); - DX8Wrapper::Set_Vertex_Buffer(vbaccess); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ibaccess,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vbaccess); - DX8Wrapper::Draw_Triangles(buffer_type,0,NUM_BOX_FACES,0,NUM_BOX_VERTS); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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 9666f20940b..e4634fec905 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp @@ -73,8 +73,8 @@ #include "camera.h" #include "ww3d.h" +#include "IRenderBackend.h" #include "WWMath/matrix4.h" -#include "dx8wrapper.h" /*********************************************************************************************** @@ -738,19 +738,19 @@ void CameraClass::Apply() bool windowed; WW3D::Get_Render_Target_Resolution(width,height,bits,windowed); - D3DVIEWPORT8 vp; - vp.X = (DWORD)(Viewport.Min.X * (float)width); - vp.Y = (DWORD)(Viewport.Min.Y * (float)height); - vp.Width = (DWORD)((Viewport.Max.X - Viewport.Min.X) * (float)width); - vp.Height = (DWORD)((Viewport.Max.Y - Viewport.Min.Y) * (float)height); - vp.MinZ = ZBufferMin; - vp.MaxZ = ZBufferMax; - DX8Wrapper::Set_Viewport(&vp); + RenderBackendViewport vp; + vp.x = (unsigned int)(Viewport.Min.X * (float)width); + vp.y = (unsigned int)(Viewport.Min.Y * (float)height); + vp.width = (unsigned int)((Viewport.Max.X - Viewport.Min.X) * (float)width); + vp.height = (unsigned int)((Viewport.Max.Y - Viewport.Min.Y) * (float)height); + vp.min_z = ZBufferMin; + vp.max_z = ZBufferMax; + WW3D::Get_Render_Backend()->Set_Viewport(vp); Matrix4x4 d3dprojection; Get_D3D_Projection_Matrix(&d3dprojection); - DX8Wrapper::Set_Projection_Transform_With_Z_Bias(d3dprojection,ZNear,ZFar); - DX8Wrapper::Set_Transform(D3DTS_VIEW,CameraInvTransform); + WW3D::Get_Render_Backend()->Set_Projection_Transform_With_Z_Bias(d3dprojection,ZNear,ZFar); + WW3D::Get_Render_Backend()->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..dfb7cef3e55 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 "IRenderBackend.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() ) + !WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_VIEW,view_transform); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_VIEW,view_transform); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_WORLD,world_transform); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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)); + WW3D::Get_Render_Backend()->Set_World_Identity(); + WW3D::Get_Render_Backend()->Set_View_Identity(); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,dazzle_vertex_count); + WW3D::Get_Render_Backend()->Set_Shader(default_halo_shader); + WW3D::Get_Render_Backend()->Set_Texture(0,types[type]->Get_Halo_Texture()); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,0); + WW3D::Get_Render_Backend()->Set_Shader(default_dazzle_shader); + WW3D::Get_Render_Backend()->Set_Texture(0,types[type]->Get_Dazzle_Texture()); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib_access,dazzle_vertex_count+halo_vertex_count); + WW3D::Get_Render_Backend()->Set_Shader(default_dazzle_shader); + WW3D::Get_Render_Backend()->Set_Texture(0,lensflare->Get_Texture()); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_PROJECTION,old_projection_transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,old_view_transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,old_world_transform); } // ---------------------------------------------------------------------------- @@ -1576,7 +1577,7 @@ void DazzleLayerClass::Render(CameraClass* camera) camera->Apply(); - DX8Wrapper::Set_Material(nullptr); + WW3D::Get_Render_Backend()->Set_Material(nullptr); for (unsigned type=0;typeGet_Transform()); + WW3D::Get_Render_Backend()->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, + WW3D::Get_Render_Backend()->Set_Index_Buffer(dynamic_ib,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(dynamic_vb); + WW3D::Get_Render_Backend()->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]); + WW3D::Get_Render_Backend()->Set_Texture(0,Textures[start_index]); + WW3D::Get_Render_Backend()->Set_Material(VertexMaterials[Polys[start_index].I]); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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, + WW3D::Get_Render_Backend()->Set_Index_Buffer(dynamic_ib,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(dynamic_vb); + WW3D::Get_Render_Backend()->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]); + WW3D::Get_Render_Backend()->Set_Texture(0,Textures[start_index]); + WW3D::Get_Render_Backend()->Set_Material(VertexMaterials[Polys[start_index].I]); + WW3D::Get_Render_Backend()->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..49faebe94e8 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->Set_Material(linemat); + WW3D::Get_Render_Backend()->Set_Shader(Shader); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_VIEW, view); Matrix4x4 identity(true); - DX8Wrapper::Set_Transform(D3DTS_WORLD, identity); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(iba, 0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Draw_Triangles(0, num_tris, 0, num_vertices); } // restore the matrices - DX8Wrapper::Set_Transform(D3DTS_VIEW, view); + WW3D::Get_Render_Backend()->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 21d44498110..8e92be1e162 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 "IRenderBackend.h" #include "WWDebug/wwdebug.h" #include "matinfo.h" #include "rendobj.h" @@ -794,7 +795,7 @@ void WSEnvMapperClass::Calculate_Texture_Matrix(Matrix4x4 &tex_matrix) } // multiply by inverse of view transform Matrix4x4 mat; - DX8Wrapper::Get_Transform(D3DTS_VIEW,mat); + WW3D::Get_Render_Backend()->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, @@ -927,7 +928,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); + WW3D::Get_Render_Backend()->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 @@ -1154,7 +1155,7 @@ void GridWSEnvMapperClass::Calculate_Texture_Matrix(Matrix4x4 &tex_matrix) { // multiply by inverse of view transform Matrix4x4 mat; - DX8Wrapper::Get_Transform(D3DTS_VIEW,mat); + WW3D::Get_Render_Backend()->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..3e1ac7bbbb5 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 "IRenderBackend.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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib,0); SNAPSHOT_SAY(("Set_World_Identity")); - DX8Wrapper::Set_World_Identity(); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Get_Transform()); + WW3D::Get_Render_Backend()->Set_Index_Buffer(dynamic_ib,vertex_offset); - DX8Wrapper::Draw_Triangles( + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(ib,0); SNAPSHOT_SAY(("Set_World_Transform")); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->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 085a938fe72..83bd6db2836 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp @@ -42,6 +42,7 @@ #include "render2d.h" #include "WWLib/mutex.h" #include "ww3d.h" +#include "IRenderBackend.h" #include "font3d.h" #include "WWMath/rect.h" #include "texture.h" @@ -608,8 +609,8 @@ void Render2DClass::Render() Matrix4x4 view,proj; Matrix4x4 identity(true); - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); - DX8Wrapper::Get_Transform(D3DTS_PROJECTION,proj); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_VIEW,view); + WW3D::Get_Render_Backend()->Get_Transform(RB_TRANSFORM_PROJECTION,proj); // // Configure the viewport for entire screen @@ -617,23 +618,23 @@ void Render2DClass::Render() int width, height, bits; bool windowed; WW3D::Get_Device_Resolution( width, height, bits, windowed ); - D3DVIEWPORT8 vp = { 0 }; - vp.X = 0; - vp.Y = 0; - vp.Width = width; - vp.Height = height; - vp.MinZ = 0; - vp.MaxZ = 1; - DX8Wrapper::Set_Viewport(&vp); - DX8Wrapper::Set_Texture(0,Texture); + RenderBackendViewport vp; + vp.x = 0; + vp.y = 0; + vp.width = width; + vp.height = height; + vp.min_z = 0; + vp.max_z = 1; + WW3D::Get_Render_Backend()->Set_Viewport(vp); + WW3D::Get_Render_Backend()->Set_Texture(0,Texture); VertexMaterialClass *vm=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vm); + WW3D::Get_Render_Backend()->Set_Material(vm); REF_PTR_RELEASE(vm); - DX8Wrapper::Set_World_Identity(); - DX8Wrapper::Set_View_Identity(); - DX8Wrapper::Set_Transform(D3DTS_PROJECTION,identity); + WW3D::Get_Render_Backend()->Set_World_Identity(); + WW3D::Get_Render_Backend()->Set_View_Identity(); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_PROJECTION,identity); DynamicVBAccessClass vb(BUFFER_TYPE_DYNAMIC_DX8,dynamic_fvf_type,Vertices.Count()); { @@ -660,14 +661,14 @@ void Render2DClass::Render() mem[i]=Indices[i]; } - DX8Wrapper::Set_Vertex_Buffer(vb); - DX8Wrapper::Set_Index_Buffer(ib,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(vb); + WW3D::Get_Render_Backend()->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. + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->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 @@ -694,11 +695,11 @@ void Render2DClass::Render() } } else - DX8Wrapper::Set_Shader(Shader); - DX8Wrapper::Draw_Triangles(0,Indices.Count()/3,0,Vertices.Count()); + WW3D::Get_Render_Backend()->Set_Shader(Shader); + WW3D::Get_Render_Backend()->Draw_Triangles(0,Indices.Count()/3,0,Vertices.Count()); - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); - DX8Wrapper::Set_Transform(D3DTS_PROJECTION,proj); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,view); + WW3D::Get_Render_Backend()->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 f7b975da694..2be3cebb2d8 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp @@ -65,6 +65,7 @@ #include "WWMath/plane.h" #include "camera.h" #include "ww3d.h" +#include "IRenderBackend.h" #include "rinfo.h" #include "WWLib/chunkio.h" #include "dx8renderer.h" @@ -215,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); + WW3D::Get_Render_Backend()->Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); if (Get_Extra_Pass_Polygon_Mode()==EXTRA_PASS_DISABLE) { Customized_Render(rinfo); @@ -233,7 +234,7 @@ void SceneClass::Render(RenderInfoClass & rinfo) Customized_Render(rinfo); break; case EXTRA_PASS_CLEAR_LINE: - DX8Wrapper::Clear(true, false, Vector3(0.0f,0.0f,0.0f)); // Clear color but not z + WW3D::Get_Render_Backend()->Clear(true, false, Vector3(0.0f,0.0f,0.0f)); // Clear color but not z WW3D::Enable_Texturing(false); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_WIREFRAME); DX8Wrapper::Set_DX8_Render_State (D3DRS_ZBIAS, 7); @@ -556,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); + WW3D::Get_Render_Backend()->Clear_Light(0); + WW3D::Get_Render_Backend()->Clear_Light(1); + WW3D::Get_Render_Backend()->Clear_Light(2); + WW3D::Get_Render_Backend()->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 @@ -570,7 +571,7 @@ void SimpleSceneClass::Customized_Render(RenderInfoClass & rinfo) { if (count<4) { - DX8Wrapper::Set_Light(count,*(LightClass*)it.Peek_Obj()); + WW3D::Get_Render_Backend()->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..b316d0de127 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/IRenderBackend.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(); + WW3D::Get_Render_Backend()->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(); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); if (isTree) { - DX8Wrapper::Draw_Triangles( NUM_TRI*3,polyCount, 0, (m_numTriangles*3)); + WW3D::Get_Render_Backend()->Draw_Triangles( NUM_TRI*3,polyCount, 0, (m_numTriangles*3)); } else { - DX8Wrapper::Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); } count++; } } if (m_drawPolygonAreas) { - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferWater); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBufferTile1); } else { updateVB(m_vertexBufferTile2, color, ARROW, DIAMOND); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile2); + WW3D::Get_Render_Backend()->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)); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); } - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBufferTile1); updatePolygonVB(pTrig, polySelected, polySelected && PolygonTool::isSelectedOpen()); - DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexFeedback,0); + WW3D::Get_Render_Backend()->Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBufferTile1); } else { updateVB(m_vertexBufferTile2, GREEN, true, false); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile2); + WW3D::Get_Render_Backend()->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)); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tmXX); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBufferWater); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexFeedback); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexFeedback,0); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); + WW3D::Get_Render_Backend()->Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexFeedback); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexFeedback,0); + WW3D::Get_Render_Backend()->Set_Shader(SC_OPAQUE_Z); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_WIREFRAME); - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexFeedback); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexFeedback,0); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlpha2DShader); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexFeedback); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexFeedback,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexFeedback); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexFeedback,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->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 + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(nullptr); //release reference to vertex buffer + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexFeedback); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexFeedback,0); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferWater); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->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..ecc82595ec6 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/IRenderBackend.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); + WW3D::Get_Render_Backend()->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); + WW3D::Get_Render_Backend()->Set_Default_Render_Target(); SurfaceClass *surface = objectTexture->Get_Surface_Level(); UnsignedByte *data = saveSurface(surface->Peek_D3D_Surface());