From 36a4d2166cd9bf222986dfcb2e8ffb398469a9e1 Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Sun, 4 Oct 2026 07:47:00 -0400 Subject: [PATCH 1/7] refactor(ww3d2): Route Clear, Set_Viewport, Set_Gamma via the backend --- .../Source/W3DDevice/GameClient/W3DDisplay.cpp | 3 ++- .../W3DDevice/GameClient/W3DShaderManager.cpp | 3 ++- .../Source/W3DDevice/GameClient/W3DView.cpp | 3 ++- .../W3DDevice/GameClient/Water/W3DWater.cpp | 3 ++- Core/Tools/W3DView/GammaDialog.cpp | 6 +++--- Core/Tools/W3DView/MainFrm.cpp | 6 +++--- .../Source/W3DDevice/GameClient/W3DScene.cpp | 5 +++-- .../Libraries/Source/WWVegas/WW3D2/camera.cpp | 17 +++++++++-------- .../Libraries/Source/WWVegas/WW3D2/render2d.cpp | 17 +++++++++-------- .../Libraries/Source/WWVegas/WW3D2/scene.cpp | 3 ++- 10 files changed, 37 insertions(+), 29 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp index b7d6a44a5b5..ac8c8fa6cc0 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 */ diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp index bed86510ad0..9673e73d2d4 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" @@ -2906,7 +2907,7 @@ void W3DShaderManager::startRenderToTexture() 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); } } 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..67ffa309ae5 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" @@ -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 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/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp index aedda9bc0da..f41488fad77 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" @@ -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); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp index 9666f20940b..9dac26bff5d 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp @@ -73,6 +73,7 @@ #include "camera.h" #include "ww3d.h" +#include "IRenderBackend.h" #include "WWMath/matrix4.h" #include "dx8wrapper.h" @@ -738,14 +739,14 @@ 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); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp index 085a938fe72..0a9e1ccead7 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" @@ -617,14 +618,14 @@ 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); + 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); DX8Wrapper::Set_Texture(0,Texture); VertexMaterialClass *vm=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp index f7b975da694..a42c81658be 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" @@ -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); From 9ef857e87d743b04f738c6b8f1250924f739418d Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Sun, 4 Oct 2026 07:49:23 -0400 Subject: [PATCH 2/7] refactor(ww3d2): Route device and display queries via IRenderBackend --- .../W3DDevice/GameClient/BaseHeightMap.cpp | 5 +- .../W3DDevice/GameClient/FlatHeightMap.cpp | 3 +- .../Source/W3DDevice/GameClient/HeightMap.cpp | 3 +- .../W3DDevice/GameClient/W3DDisplay.cpp | 2 +- .../W3DDevice/GameClient/Water/W3DWater.cpp | 2 +- .../WWVegas/WW3D2/Backend/DX8Backend.cpp | 60 +++++++++++++++++++ .../Source/WWVegas/WW3D2/Backend/DX8Backend.h | 13 ++++ .../Source/WWVegas/WW3D2/IRenderBackend.h | 27 ++++++--- .../Source/WWVegas/WW3D2/dx8wrapper.h | 1 + Core/Libraries/Source/WWVegas/WW3D2/ww3d.cpp | 24 ++++---- .../GameClient/Shadow/W3DVolumetricShadow.cpp | 3 +- .../Source/W3DDevice/GameClient/W3DScene.cpp | 8 +-- 12 files changed, 119 insertions(+), 32 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp index 4cbe7db3bad..b8f3e52ea8c 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; @@ -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; diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp index 0dc03cfb1bb..4c6ac103cec 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" @@ -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); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index cea9b8e7275..cff9c53c5cd 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" @@ -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); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp index ac8c8fa6cc0..fcac1d9d5fd 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp @@ -2937,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/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index 67ffa309ae5..cfbf09f880f 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -3284,7 +3284,7 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4]) 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 ); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp index fac042dc906..50f3b06689b 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp @@ -59,6 +59,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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h index a5597c9edef..6eab3aa1a67 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; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h index 28dd3b14ec8..3989829e8f8 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h @@ -22,8 +22,10 @@ #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 LightEnvironmentClass; class Vector3; @@ -38,20 +40,27 @@ 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. +// 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; 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/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/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp index e2ca0168767..b8cd89722cb 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" @@ -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/W3DScene.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp index f41488fad77..f21b80938a0 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp @@ -859,7 +859,7 @@ void RTS3DScene::Flush(RenderInfoClass & rinfo) #ifdef USE_NON_STENCIL_OCCLUSION flushOccludedObjects(rinfo); #else - if (DX8Wrapper::Has_Stencil()) + if (WW3D::Get_Render_Backend()->Has_Stencil()) flushOccludedObjectsIntoStencil(rinfo); #endif @@ -975,7 +975,7 @@ void RTS3DScene::Render(RenderInfoClass & rinfo) DX8Wrapper::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) { @@ -1575,7 +1575,7 @@ void RTS3DScene::flushOccludedObjects(RenderInfoClass & rinfo) { const Int localPlayerIndex = rts::getObservedOrLocalPlayerIndex_Safe(); - if (DX8Wrapper::Has_Stencil()) //just in case we have shadows, disable them over occluded pixels. + if (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 ); @@ -1614,7 +1614,7 @@ void RTS3DScene::flushOccludedObjects(RenderInfoClass & rinfo) //Now draw the normal models so they cover up the colored models on any pixels that //Normal models will clear stencil value from 128 back to 0 where the object pixels are //not occluded but will leave 128 in stencil where still occluded. - if (DX8Wrapper::Has_Stencil()) + if (WW3D::Get_Render_Backend()->Has_Stencil()) DX8Wrapper::Set_DX8_Render_State(D3DRS_STENCILREF, 0 ); for (i=0; i Date: Sun, 4 Oct 2026 07:52:04 -0400 Subject: [PATCH 3/7] refactor(ww3d2): Route transforms via IRenderBackend --- .../W3DDevice/GameClient/BaseHeightMap.cpp | 6 +-- .../W3DDevice/GameClient/FlatHeightMap.cpp | 2 +- .../Source/W3DDevice/GameClient/HeightMap.cpp | 4 +- .../W3DDevice/GameClient/W3DDebugIcons.cpp | 3 +- .../Source/W3DDevice/GameClient/W3DSmudge.cpp | 5 ++- .../Source/W3DDevice/GameClient/W3DSnow.cpp | 5 ++- .../W3DDevice/GameClient/W3DTerrainTracks.cpp | 3 +- .../W3DDevice/GameClient/W3DTreeBuffer.cpp | 3 +- .../W3DDevice/GameClient/Water/W3DWater.cpp | 14 +++--- .../GameClient/Water/W3DWaterTracks.cpp | 3 +- .../WWVegas/WW3D2/Backend/DX8Backend.cpp | 45 +++++++++++++++++++ .../Source/WWVegas/WW3D2/Backend/DX8Backend.h | 7 +++ .../Source/WWVegas/WW3D2/IRenderBackend.h | 16 +++++++ .../Source/WWVegas/WW3D2/dx8renderer.cpp | 5 ++- .../Source/WWVegas/WW3D2/dynamesh.cpp | 3 +- .../Libraries/Source/WWVegas/WW3D2/line3d.cpp | 3 +- .../Source/WWVegas/WW3D2/pointgr.cpp | 19 ++++---- .../Source/WWVegas/WW3D2/ringobj.cpp | 5 ++- .../Source/WWVegas/WW3D2/seglinerenderer.cpp | 9 ++-- .../Source/WWVegas/WW3D2/sortingrenderer.cpp | 9 ++-- .../Source/WWVegas/WW3D2/sphereobj.cpp | 11 ++--- .../Source/WWVegas/WW3D2/streakRender.cpp | 9 ++-- .../GameClient/Shadow/W3DProjectedShadow.cpp | 3 +- .../W3DDevice/GameClient/W3DInGameUI.cpp | 3 +- .../W3DDevice/GameClient/W3DStatusCircle.cpp | 5 ++- .../Source/WWVegas/WW3D2/boxrobj.cpp | 5 ++- .../Libraries/Source/WWVegas/WW3D2/camera.cpp | 5 +-- .../Libraries/Source/WWVegas/WW3D2/dazzle.cpp | 23 +++++----- .../Source/WWVegas/WW3D2/decalmsh.cpp | 5 ++- .../Source/WWVegas/WW3D2/linegrp.cpp | 9 ++-- .../Libraries/Source/WWVegas/WW3D2/mapper.cpp | 7 +-- .../Libraries/Source/WWVegas/WW3D2/mesh.cpp | 7 +-- .../Source/WWVegas/WW3D2/render2d.cpp | 14 +++--- .../Tools/WorldBuilder/src/DrawObject.cpp | 12 ++--- 34 files changed, 190 insertions(+), 97 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp index b8f3e52ea8c..8136dbb6d0e 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp @@ -2319,7 +2319,7 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera) DX8Wrapper::Set_Material(vmat); REF_PTR_RELEASE(vmat); DX8Wrapper::Set_Texture(0,m_destAlphaTexture); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true)); + 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); @@ -2505,7 +2505,7 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera) DX8Wrapper::Set_Material(vmat); REF_PTR_RELEASE(vmat); DX8Wrapper::Set_Texture(0,m_destAlphaTexture); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true)); + 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); @@ -2809,7 +2809,7 @@ void BaseHeightMapRenderObjClass::renderTrees(CameraClass * camera) if (m_map==nullptr) return; if (Scene==nullptr) return; if (m_treeBuffer) { - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); DX8Wrapper::Set_Material(m_vertexMaterialClass); RTS3DScene *pMyScene = (RTS3DScene *)Scene; RefRenderObjListIterator pDynamicLightsIterator(pMyScene->getDynamicLights()); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp index 4c6ac103cec..f33bb6e4da0 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp @@ -494,7 +494,7 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) DX8Wrapper::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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index cff9c53c5cd..274aa838929 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -1932,7 +1932,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) DX8Wrapper::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 @@ -2150,7 +2150,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) ///Performs additional terrain rendering pass, blending in the black shroud texture. void HeightMapRenderObjClass::renderTerrainPass(CameraClass *pCamera) { - DX8Wrapper::Set_Transform(D3DTS_WORLD,Matrix3D(true)); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Matrix3D(true)); //Apply the shader and material diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp index 5842874f376..9d3ac1a059a 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) @@ -221,7 +222,7 @@ void W3DDebugIcons::Render(RenderInfoClass & rinfo) DX8Wrapper::Set_Texture(0, nullptr); DX8Wrapper::Apply_Render_State_Changes(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); Int numRect = m_numDebugIcons; static Real offset = 30; diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index 37fc8609328..37490f9e920 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" @@ -446,8 +447,8 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) REF_PTR_RELEASE(backBuffer); Matrix4x4 identity(true); - DX8Wrapper::Set_Transform(D3DTS_WORLD,identity); - DX8Wrapper::Set_Transform(D3DTS_VIEW,identity); + 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); //DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaqueSpriteShader); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp index a2d46136211..bab48f73afb 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,7 +398,7 @@ void W3DSnowManager::render(RenderInfoClass &rinfo) m_heightTraveled=m_time*m_velocity+cameraOffset; //height that snow flake traveled this frame. Matrix4x4 identity(true); - DX8Wrapper::Set_Transform(D3DTS_WORLD,identity); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,identity); DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); @@ -488,7 +489,7 @@ 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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp index b43c690cc82..d78f5d8f245 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp @@ -55,6 +55,7 @@ #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" @@ -906,7 +907,7 @@ Try improving the fit to vertical surfaces like cliffs. trackStartIndex=0; mod=m_usedModules; - DX8Wrapper::Set_Transform(D3DTS_WORLD,mod->Transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,mod->Transform); while (mod) { if (mod->m_activeEdgeCount >= 2 && mod->Is_Really_Visible()) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp index 95a80e521e9..5156067a434 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" @@ -1628,7 +1629,7 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD DX8Wrapper::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 #endif diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index cfbf09f880f..5012b17f2c4 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -1818,7 +1818,7 @@ void WaterRenderObjClass::drawSea(RenderInfoClass & rinfo) matWW3D._23=1.0f; matWW3D._44=1.0f; - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); //position the water surface + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface DX8Wrapper::Set_Texture(0,nullptr); //we'll be setting our own textures, so reset W3D DX8Wrapper::Set_Texture(1,nullptr); //we'll be setting our own textures, so reset W3D @@ -2138,7 +2138,7 @@ void WaterRenderObjClass::renderSky() 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 } @@ -2180,7 +2180,7 @@ 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); @@ -2389,7 +2389,7 @@ void WaterRenderObjClass::renderWaterMesh() m_vertexBufferD3D->Unlock(); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); //position the water surface + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface DX8Wrapper::Set_Material(m_meshVertexMaterialClass); ShaderClass::CullModeType oldCullMode=m_shaderClass.Get_Cull_Mode(); @@ -2913,7 +2913,7 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) Matrix3D tm(1); - 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_Index_Buffer(ib_access,0); DX8Wrapper::Set_Vertex_Buffer(vb_access); DX8Wrapper::Set_Texture(0,m_riverTexture); //set to blue @@ -3277,7 +3277,7 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4]) Matrix3D tm(1); - 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_Index_Buffer(ib_access,0); DX8Wrapper::Set_Vertex_Buffer(vb_access); @@ -3442,7 +3442,7 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) Matrix3D tm(1); //set position of skybody in world // tm.Set_Translation(Vector3(40,0,0)); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); DX8Wrapper::Draw_Triangles( 0,2, 0, 4); //draw a quad, 2 triangles, 4 verts } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp index 9e34695c46a..fb9273c7e45 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. @@ -898,7 +899,7 @@ Try improving the fit to vertical surfaces like cliffs. diffuseLight=REAL_TO_INT(shadeB) | (REAL_TO_INT(shadeG) << 8) | (REAL_TO_INT(shadeR) << 16); Matrix3D tm(1); ///set to identity - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); //position the water surface + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface DX8Wrapper::Set_Material(m_vertexMaterialClass); DX8Wrapper::Set_Shader(m_shaderClass); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp index 50f3b06689b..d2688ffe21e 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) { } @@ -163,6 +178,36 @@ void DX8Backend::Invalidate_Cached_Render_States() DX8Wrapper::Invalidate_Cached_Render_States(); } +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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h index 6eab3aa1a67..67af262d77c 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h @@ -55,6 +55,13 @@ class DX8Backend : public IRenderBackend virtual void Set_Viewport(const RenderBackendViewport & viewport) override; virtual void Invalidate_Cached_Render_States() 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; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h index 3989829e8f8..2071af762a7 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h @@ -28,6 +28,8 @@ // WW3D2 header graph. All W3D classes below are passed by pointer or reference. class LightEnvironmentClass; +class Matrix3D; +class Matrix4x4; class Vector3; struct RenderBackendViewport @@ -40,6 +42,13 @@ struct RenderBackendViewport float max_z; }; +enum RenderBackendTransform +{ + RB_TRANSFORM_WORLD, + RB_TRANSFORM_VIEW, + RB_TRANSFORM_PROJECTION +}; + // The interface holds only the methods that callers route through. The rest of // the DX8Wrapper API is called directly. @@ -72,6 +81,13 @@ class IRenderBackend virtual void Set_Viewport(const RenderBackendViewport & viewport) = 0; virtual void Invalidate_Cached_Render_States() = 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; }; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp index 579a467f6c2..1931bddc07a 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" @@ -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); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp index 3a93a8cfa56..445db431598 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" @@ -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..0a26ac64227 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" @@ -273,7 +274,7 @@ void Line3DClass::Render(RenderInfoClass & rinfo) DX8Wrapper::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); { diff --git a/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp b/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp index 58b9dfaf712..71852591e63 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,8 +920,8 @@ 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); @@ -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,8 +1850,8 @@ 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); @@ -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..5c44f9654ed 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" @@ -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..d66371d8a51 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). @@ -1191,7 +1192,7 @@ void SegLineRendererClass::Render } - 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..fd30b5f0a6d 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" @@ -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. @@ -644,8 +645,8 @@ void SortingRendererClass::Flush() 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..3a6a8d0e5d3 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" @@ -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..493b4cdc038 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). @@ -1383,7 +1384,7 @@ void StreakRendererClass::RenderStreak } - DX8Wrapper::Set_Transform(D3DTS_VIEW,view); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,view); } diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp index e0ac3a3d310..a87d0968ee8 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" @@ -659,7 +660,7 @@ void TestBlendRender(RenderInfoClass & rinfo) DX8Wrapper::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); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp index cf193188048..2a38ef0d75a 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. @@ -249,7 +250,7 @@ void DebugHintObject::Render(RenderInfoClass & rinfo) 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); } diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp index 796279e802f..8fd1e2ce28d 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp @@ -34,6 +34,7 @@ #include #include #include "WW3D2/dx8wrapper.h" +#include "WW3D2/IRenderBackend.h" #include "WW3D2/shader.h" #include "Common/GlobalData.h" #include "Common/MapObject.h" @@ -329,7 +330,7 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) tm.Set_Translation(vec); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); DX8Wrapper::Draw_Triangles( 0,NUM_TRI, 0, (m_numTriangles*3)); } @@ -350,7 +351,7 @@ 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); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); DX8Wrapper::Set_Shader(ShaderClass(SC_ADD)); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferScreen); DX8Wrapper::Apply_Render_State_Changes(); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp index 1256e5d41eb..be803ee827a 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" @@ -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 9dac26bff5d..e4634fec905 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/camera.cpp @@ -75,7 +75,6 @@ #include "ww3d.h" #include "IRenderBackend.h" #include "WWMath/matrix4.h" -#include "dx8wrapper.h" /*********************************************************************************************** @@ -750,8 +749,8 @@ void CameraClass::Apply() Matrix4x4 d3dprojection; Get_D3D_Projection_Matrix(&d3dprojection); - DX8Wrapper::Set_Projection_Transform_With_Z_Bias(d3dprojection,ZNear,ZFar); - DX8Wrapper::Set_Transform(D3DTS_VIEW,CameraInvTransform); + 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..ba2dda313e2 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" @@ -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; @@ -1219,9 +1220,9 @@ 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); @@ -1244,9 +1245,9 @@ void DazzleRenderObjClass::Render_Dazzle(CameraClass* camera) DX8Wrapper::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); } // ---------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp index 99453e40d98..c452af2a7cd 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp @@ -63,6 +63,7 @@ #include "WWLib/simplevec.h" #include "texture.h" #include "dx8wrapper.h" +#include "IRenderBackend.h" #include "dx8caps.h" #define DISABLE_CLIPPING 0 @@ -298,7 +299,7 @@ void RigidDecalMeshClass::Render() ** transform between the time that the mesh is rendered and the time that the decal ** mesh is rendered... It shouldn't happen though. */ - DX8Wrapper::Set_Transform(D3DTS_WORLD,Parent->Get_Transform()); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Parent->Get_Transform()); /* ** Copy the vertices into the dynamic vb @@ -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 diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp index 797b36fbcb9..aeac2af767e 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" @@ -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; @@ -475,7 +476,7 @@ void LineGroupClass::Render(RenderInfoClass &rinfo) } // 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..17eacec14d2 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" @@ -855,7 +856,7 @@ void MeshClass::Render_Material_Pass(MaterialPassClass * pass,IndexBufferClass * DX8Wrapper::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,7 +948,7 @@ 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()); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Get_Transform()); DX8Wrapper::Set_Index_Buffer(dynamic_ib,vertex_offset); DX8Wrapper::Draw_Triangles( @@ -983,7 +984,7 @@ void MeshClass::Render_Material_Pass(MaterialPassClass * pass,IndexBufferClass * DX8Wrapper::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 0a9e1ccead7..965731c9103 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp @@ -609,8 +609,8 @@ void Render2DClass::Render() Matrix4x4 view,proj; Matrix4x4 identity(true); - DX8Wrapper::Get_Transform(D3DTS_VIEW,view); - DX8Wrapper::Get_Transform(D3DTS_PROJECTION,proj); + 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 @@ -632,9 +632,9 @@ void Render2DClass::Render() DX8Wrapper::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()); { @@ -698,8 +698,8 @@ void Render2DClass::Render() DX8Wrapper::Set_Shader(Shader); DX8Wrapper::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/Tools/WorldBuilder/src/DrawObject.cpp b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp index f2fe2bc5621..331f727d98c 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" @@ -2213,7 +2215,7 @@ 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)); } else { @@ -2271,10 +2273,10 @@ if (pMapObj->isSelected()) { } DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Transform(D3DTS_WORLD,tm); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); DX8Wrapper::Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); } - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); updatePolygonVB(pTrig, polySelected, polySelected && PolygonTool::isSelectedOpen()); DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); @@ -2323,7 +2325,7 @@ if (pMapObj->isSelected()) { } #if 1 - DX8Wrapper::Set_Transform(D3DTS_WORLD,tmXX); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tmXX); DX8Wrapper::Draw_Triangles( 0,polyCountA, 0, (m_numTriangles*3)); #endif @@ -2332,7 +2334,7 @@ if (pMapObj->isSelected()) { DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferWater); - DX8Wrapper::Set_Transform(D3DTS_WORLD,Transform); + WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); if (m_drawWaypoints) { updateWaypointVB(); From 94b423855b5e8d4f0da11a73ed1b44cd0600c710 Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Sun, 4 Oct 2026 07:54:01 -0400 Subject: [PATCH 4/7] refactor(ww3d2): Route lights and fog via IRenderBackend --- .../Source/W3DDevice/GameClient/FlatHeightMap.cpp | 2 +- .../Source/W3DDevice/GameClient/HeightMap.cpp | 2 +- .../W3DDevice/GameClient/Water/W3DWater.cpp | 8 ++++---- .../Source/WWVegas/WW3D2/Backend/DX8Backend.cpp | 15 +++++++++++++++ .../Source/WWVegas/WW3D2/Backend/DX8Backend.h | 3 +++ .../Source/WWVegas/WW3D2/IRenderBackend.h | 4 ++++ .../Source/WWVegas/WW3D2/dx8renderer.cpp | 2 +- .../Source/W3DDevice/GameClient/W3DScene.cpp | 2 +- .../Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp | 2 +- .../Code/Libraries/Source/WWVegas/WW3D2/scene.cpp | 12 ++++++------ 10 files changed, 37 insertions(+), 15 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp index f33bb6e4da0..eff4ce53546 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp @@ -486,7 +486,7 @@ 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(); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index 274aa838929..589ac221f6c 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -1924,7 +1924,7 @@ 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(); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index 5012b17f2c4..e1bb771d777 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -2407,10 +2407,10 @@ void WaterRenderObjClass::renderWaterMesh() DX8Wrapper::Set_Texture(0,setting->waterTexture); DX8Wrapper::Set_Texture(1,setting->waterTexture); - DX8Wrapper::Set_Light(0,*m_meshLight); - DX8Wrapper::Set_Light(1,nullptr); - DX8Wrapper::Set_Light(2,nullptr); - DX8Wrapper::Set_Light(3,nullptr); + 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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp index d2688ffe21e..042d910958b 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp @@ -217,3 +217,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 67af262d77c..02f0478e583 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h @@ -64,6 +64,9 @@ class DX8Backend : public IRenderBackend 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 2071af762a7..ea1760c5a89 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h @@ -27,6 +27,7 @@ // Forward declarations keep this header includable without pulling in the full // WW3D2 header graph. All W3D classes below are passed by pointer or reference. +class LightClass; class LightEnvironmentClass; class Matrix3D; class Matrix4x4; @@ -90,4 +91,7 @@ class IRenderBackend 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/dx8renderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp index 1931bddc07a..da364390575 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp @@ -1813,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")); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp index f21b80938a0..692931a1b69 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp @@ -972,7 +972,7 @@ 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 && WW3D::Get_Render_Backend()->Has_Stencil(); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp index 17eacec14d2..c8a9cd50386 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp @@ -828,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)) { diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp index a42c81658be..2be3cebb2d8 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/scene.cpp @@ -216,7 +216,7 @@ void SceneClass::Render(RenderInfoClass & rinfo) // Any stuff that needs to get done before anything else Pre_Render_Processing(rinfo); - DX8Wrapper::Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); + WW3D::Get_Render_Backend()->Set_Fog(FogEnabled, FogColor, FogStart, FogEnd); if (Get_Extra_Pass_Polygon_Mode()==EXTRA_PASS_DISABLE) { Customized_Render(rinfo); @@ -557,10 +557,10 @@ void SimpleSceneClass::Customized_Render(RenderInfoClass & rinfo) // derived classes should use light environment WWASSERT(rinfo.light_environment==nullptr); // Turn off lights in case we have none - DX8Wrapper::Set_Light(0,nullptr); - DX8Wrapper::Set_Light(1,nullptr); - DX8Wrapper::Set_Light(2,nullptr); - DX8Wrapper::Set_Light(3,nullptr); + 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 @@ -571,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 From 49697d345b88bebfc6bf8b4f602004112f8d618b Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Sun, 4 Oct 2026 07:56:16 -0400 Subject: [PATCH 5/7] refactor(ww3d2): Route shader and material state via IRenderBackend --- .../W3DDevice/GameClient/BaseHeightMap.cpp | 10 +- .../W3DDevice/GameClient/FlatHeightMap.cpp | 14 +-- .../Source/W3DDevice/GameClient/HeightMap.cpp | 34 +++--- .../W3DDevice/GameClient/W3DDebugIcons.cpp | 8 +- .../Source/W3DDevice/GameClient/W3DScorch.cpp | 3 +- .../W3DDevice/GameClient/W3DShaderManager.cpp | 102 +++++++++--------- .../Source/W3DDevice/GameClient/W3DSmudge.cpp | 12 +-- .../Source/W3DDevice/GameClient/W3DSnow.cpp | 6 +- .../W3DDevice/GameClient/W3DTerrainTracks.cpp | 4 +- .../W3DDevice/GameClient/W3DTreeBuffer.cpp | 12 +-- .../W3DDevice/GameClient/Water/W3DWater.cpp | 44 ++++---- .../GameClient/Water/W3DWaterTracks.cpp | 8 +- .../WWVegas/WW3D2/Backend/DX8Backend.cpp | 15 +++ .../Source/WWVegas/WW3D2/Backend/DX8Backend.h | 4 + .../Source/WWVegas/WW3D2/IRenderBackend.h | 6 ++ .../Source/WWVegas/WW3D2/dx8renderer.cpp | 18 ++-- .../Source/WWVegas/WW3D2/dynamesh.cpp | 12 +-- .../Libraries/Source/WWVegas/WW3D2/line3d.cpp | 4 +- .../Source/WWVegas/WW3D2/matpass.cpp | 5 +- .../Source/WWVegas/WW3D2/pointgr.cpp | 8 +- .../Source/WWVegas/WW3D2/ringobj.cpp | 4 +- .../Source/WWVegas/WW3D2/seglinerenderer.cpp | 4 +- .../Source/WWVegas/WW3D2/sortingrenderer.cpp | 6 +- .../Source/WWVegas/WW3D2/sphereobj.cpp | 4 +- .../Source/WWVegas/WW3D2/streakRender.cpp | 4 +- Core/Tools/W3DView/ScreenCursor.cpp | 5 +- .../GameClient/Shadow/W3DProjectedShadow.cpp | 16 +-- .../GameClient/Shadow/W3DVolumetricShadow.cpp | 16 +-- .../W3DDevice/GameClient/W3DBibBuffer.cpp | 3 +- .../W3DDevice/GameClient/W3DBridgeBuffer.cpp | 15 +-- .../W3DDevice/GameClient/W3DInGameUI.cpp | 4 +- .../W3DDevice/GameClient/W3DRoadBuffer.cpp | 3 +- .../Source/W3DDevice/GameClient/W3DScene.cpp | 6 +- .../W3DDevice/GameClient/W3DStatusCircle.cpp | 10 +- .../Source/WWVegas/WW3D2/boxrobj.cpp | 4 +- .../Libraries/Source/WWVegas/WW3D2/dazzle.cpp | 8 +- .../Source/WWVegas/WW3D2/decalmsh.cpp | 8 +- .../Source/WWVegas/WW3D2/linegrp.cpp | 4 +- .../Source/WWVegas/WW3D2/render2d.cpp | 8 +- .../Tools/WorldBuilder/src/DrawObject.cpp | 20 ++-- 40 files changed, 256 insertions(+), 225 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp index 8136dbb6d0e..f2348955db9 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp @@ -2314,9 +2314,9 @@ 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); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Matrix3D(true)); @@ -2500,9 +2500,9 @@ 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); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Matrix3D(true)); @@ -2810,7 +2810,7 @@ void BaseHeightMapRenderObjClass::renderTrees(CameraClass * camera) if (Scene==nullptr) return; if (m_treeBuffer) { WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); - DX8Wrapper::Set_Material(m_vertexMaterialClass); + 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 eff4ce53546..cdf03479e7b 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp @@ -497,8 +497,8 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) 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 @@ -550,7 +550,7 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) for (pass=0; passSet_Shader(ShaderClass::_PresetOpaque2DShader); DX8Wrapper::Set_Texture(0,nullptr); } else { W3DShaderManager::setShader(st, pass); @@ -596,7 +596,7 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) 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()); @@ -616,7 +616,7 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) DX8Wrapper::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); @@ -624,7 +624,7 @@ 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); @@ -635,7 +635,7 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) DX8Wrapper::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 589ac221f6c..5a527b6d17d 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -1962,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; @@ -1977,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 @@ -2031,7 +2031,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) if (!doMultiPassWireFrame) //multi-pass wireframe doesn't use regular shaders. { if (m_disableTextures ) { - DX8Wrapper::Set_Shader(ShaderClass::_PresetOpaque2DShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaque2DShader); DX8Wrapper::Set_Texture(0,nullptr); } else { W3DShaderManager::setShader(st, pass); @@ -2045,13 +2045,13 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) #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], @@ -2089,7 +2089,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) 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()); @@ -2111,7 +2111,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) DX8Wrapper::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); @@ -2126,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); @@ -2141,7 +2141,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) DX8Wrapper::Set_Texture(1,nullptr); m_stageTwoTexture->restore(); ShaderClass::Invalidate(); - DX8Wrapper::Set_Material(nullptr); + WW3D::Get_Render_Backend()->Set_Material(nullptr); } @@ -2163,13 +2163,13 @@ void HeightMapRenderObjClass::renderTerrainPass(CameraClass *pCamera) #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], @@ -2340,17 +2340,17 @@ void HeightMapRenderObjClass::renderExtraBlendTiles() DX8Wrapper::Set_Index_Buffer(ib_access,0); DX8Wrapper::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); + WW3D::Get_Render_Backend()->Set_Shader(shader); DX8Wrapper::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 diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp index 9d3ac1a059a..a4c9a6a2d79 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp @@ -216,11 +216,11 @@ 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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); DX8Wrapper::Set_Texture(0, nullptr); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); @@ -303,7 +303,7 @@ void W3DDebugIcons::Render(RenderInfoClass & rinfo) } } if (numVertex == 0) break; - DX8Wrapper::Set_Shader(ShaderClass(SC_ALPHA)); + WW3D::Get_Render_Backend()->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 diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp index 1a44e3e8fa4..7fb9326e5e6 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) @@ -124,7 +125,7 @@ void W3DScorch::drawScorches(WorldHeightMap& map) } DX8Wrapper::Set_Index_Buffer(m_indexScorch, 0); DX8Wrapper::Set_Vertex_Buffer(m_vertexScorch); - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlphaShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); DX8Wrapper::Set_Texture(0, m_scorchTexture); DX8Wrapper::Draw_Triangles(0, m_curNumScorchIndices / 3, 0, m_curNumScorchVertices); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp index 9673e73d2d4..b886533f7d9 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp @@ -234,15 +234,15 @@ Bool ScreenDefaultFilter::postRender(FilterModes mode, Coord2D &scrollDelta,Bool Int ScreenDefaultFilter::set(FilterModes mode) { VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + 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); + WW3D::Get_Render_Backend()->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()->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; } @@ -250,7 +250,7 @@ Int ScreenDefaultFilter::set(FilterModes mode) void ScreenDefaultFilter::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } /*========= ScreenBWFilter =============================================================*/ @@ -415,15 +415,15 @@ Int ScreenBWFilter::set(FilterModes mode) } VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + 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); + WW3D::Get_Render_Backend()->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()->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); @@ -474,7 +474,7 @@ void ScreenBWFilter::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture DX8Wrapper::_Get_D3D_Device8()->SetPixelShader(0); //turn off pixel shader - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenBWFilter::shutdown() @@ -590,8 +590,8 @@ Bool ScreenBWFilterDOT3::postRender(FilterModes mode, Coord2D &scrollDelta,Bool ShaderClass::Invalidate(); //reset DOT3 blend from above. ShaderClass shader=ShaderClass::_PresetAlphaShader; shader.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); - DX8Wrapper::Set_Shader(shader); - DX8Wrapper::Apply_Render_State_Changes(); //force update of view and projection matrices + 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); @@ -644,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); + WW3D::Get_Render_Backend()->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()->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; } @@ -662,7 +662,7 @@ Int ScreenBWFilterDOT3::set(FilterModes mode) void ScreenBWFilterDOT3::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenBWFilterDOT3::shutdown() @@ -868,12 +868,12 @@ Int ScreenCrossFadeFilter::set(FilterModes mode) { //rendering a quad with redirected rendering surface VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + 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); + WW3D::Get_Render_Backend()->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()->Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP); DX8Wrapper::Set_DX8_Texture_Stage_State( 0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP); @@ -906,7 +906,7 @@ void ScreenCrossFadeFilter::reset() DX8Wrapper::Set_DX8_Texture_Stage_State( 1, D3DTSS_COLOROP, D3DTOP_DISABLE ); DX8Wrapper::Set_DX8_Texture_Stage_State( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenCrossFadeFilter::shutdown() @@ -1007,7 +1007,7 @@ Bool ScreenMotionBlurFilter::postRender(FilterModes mode, Coord2D &scrollDelta,B DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHABLENDENABLE,false); //draw polygons like this is very inefficient but for only 2 triangles, it's //not worth bothering with index/vertex buffers. - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); pDev->SetVertexShader(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1); Coord2D center; @@ -1078,7 +1078,7 @@ Bool ScreenMotionBlurFilter::postRender(FilterModes mode, Coord2D &scrollDelta,B pDev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, v, sizeof(_TRANS_LIT_TEX_VERTEX)); DX8Wrapper::Set_DX8_Render_State(D3DRS_ALPHABLENDENABLE,true); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); { Int limit = m_maxCount; if (m_maxCount>30) limit = 30; @@ -1160,16 +1160,16 @@ Int ScreenMotionBlurFilter::set(FilterModes mode) //rendering a quad with redirected rendering surface motion blurred VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(vmat); + 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); + WW3D::Get_Render_Backend()->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()->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; } @@ -1177,7 +1177,7 @@ Int ScreenMotionBlurFilter::set(FilterModes mode) void ScreenMotionBlurFilter::reset() { DX8Wrapper::_Get_D3D_Device8()->SetTexture(0,nullptr); //previously rendered frame inside this texture - DX8Wrapper::Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); } Int ScreenMotionBlurFilter::shutdown() @@ -1220,7 +1220,7 @@ 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 @@ -1228,14 +1228,14 @@ Int ShroudTextureShader::set(Int stage) { #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); @@ -1421,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()); 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); @@ -1653,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); @@ -1824,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); @@ -1930,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); } @@ -1948,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() @@ -2024,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()); @@ -2155,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. @@ -2307,7 +2307,7 @@ Int RoadShaderPixelShader::set(Int pass) { DX8Wrapper::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 ); @@ -2388,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() @@ -2411,7 +2411,7 @@ Int RoadShader2Stage::set(Int pass) //First stage always contains base texture. DX8Wrapper::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); @@ -2897,10 +2897,10 @@ void W3DShaderManager::startRenderToTexture() ShaderClass shader=ShaderClass::_PresetOpaqueSolidShader; shader.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); shader.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); - DX8Wrapper::Set_Shader(shader); + 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)); @@ -3326,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); @@ -3608,7 +3608,7 @@ Int FlatTerrainShaderPixelShader::set(Int pass) DX8Wrapper::Set_Texture(0, W3DShaderManager::getShaderTexture(2)); DX8Wrapper::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(); @@ -3747,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; } @@ -3775,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 37490f9e920..5fed6260cf7 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -223,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); + WW3D::Get_Render_Backend()->Set_Shader(shader); DX8Wrapper::Set_Texture(0,nullptr); - 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 struct _TRANS_LIT_TEX_VERTEX { Vector4 p; @@ -453,7 +453,7 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) DX8Wrapper::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); //Need these states in case texture is non-power-of-2 @@ -464,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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp index bab48f73afb..382f7871356 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp @@ -400,10 +400,10 @@ void W3DSnowManager::render(RenderInfoClass &rinfo) Matrix4x4 identity(true); 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 @@ -423,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 ); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp index d78f5d8f245..d0438b23ab8 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp @@ -900,8 +900,8 @@ 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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); DX8Wrapper::Set_Vertex_Buffer(m_vertexBuffer); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp index 5156067a434..6f31d671ac0 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp @@ -1572,7 +1572,7 @@ 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); + WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); DX8Wrapper::Set_Texture(0,m_treeTexture); DynamicIBAccessClass ib_access(BUFFER_TYPE_DYNAMIC_DX8, 6); //draw an infinite sky plane @@ -1638,16 +1638,16 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD 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); 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; @@ -1716,7 +1716,7 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD DX8Wrapper::Set_Index_Buffer(m_indexTree[bNdx],0); DX8Wrapper::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); @@ -1728,7 +1728,7 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD 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/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index e1bb771d777..527caf72e7e 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -209,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); @@ -224,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(); @@ -1748,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); @@ -1823,7 +1823,7 @@ void WaterRenderObjClass::drawSea(RenderInfoClass & rinfo) DX8Wrapper::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; @@ -1976,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()) { @@ -2084,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; @@ -2092,7 +2092,7 @@ 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); @@ -2184,7 +2184,7 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) 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; @@ -2192,7 +2192,7 @@ 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); @@ -2390,7 +2390,7 @@ void WaterRenderObjClass::renderWaterMesh() m_vertexBufferD3D->Unlock(); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface - DX8Wrapper::Set_Material(m_meshVertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Material(m_meshVertexMaterialClass); ShaderClass::CullModeType oldCullMode=m_shaderClass.Get_Cull_Mode(); @@ -2399,7 +2399,7 @@ 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 @@ -2417,7 +2417,7 @@ void WaterRenderObjClass::renderWaterMesh() 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 @@ -2729,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--; @@ -2956,18 +2956,18 @@ void WaterRenderObjClass::setupFlatWaterShader() DX8Wrapper::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) @@ -3392,9 +3392,9 @@ 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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp index fb9273c7e45..c14d311089e 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp @@ -901,13 +901,13 @@ Try improving the fit to vertical surfaces like cliffs. Matrix3D tm(1); ///set to identity 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); 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()) { @@ -1321,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 042d910958b..c22cd644120 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp @@ -178,6 +178,21 @@ void DX8Backend::Invalidate_Cached_Render_States() DX8Wrapper::Invalidate_Cached_Render_States(); } +void DX8Backend::Set_Shader(const ShaderClass & shader) +{ + DX8Wrapper::Set_Shader(shader); +} + +void DX8Backend::Set_Material(const VertexMaterialClass * material) +{ + DX8Wrapper::Set_Material(material); +} + +void DX8Backend::Apply_Render_State_Changes() +{ + DX8Wrapper::Apply_Render_State_Changes(); +} + void DX8Backend::Set_Transform(RenderBackendTransform transform, const Matrix4x4 & m) { DX8Wrapper::Set_Transform(To_D3D_Transform(transform), m); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h index 02f0478e583..84ac209c976 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h @@ -55,6 +55,10 @@ class DX8Backend : public IRenderBackend virtual void Set_Viewport(const RenderBackendViewport & viewport) override; virtual void Invalidate_Cached_Render_States() override; + virtual void Set_Shader(const ShaderClass & shader) override; + virtual void Set_Material(const VertexMaterialClass * material) override; + virtual void Apply_Render_State_Changes() 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; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h index ea1760c5a89..012054bbb49 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h @@ -31,7 +31,9 @@ class LightClass; class LightEnvironmentClass; class Matrix3D; class Matrix4x4; +class ShaderClass; class Vector3; +class VertexMaterialClass; struct RenderBackendViewport { @@ -82,6 +84,10 @@ class IRenderBackend virtual void Set_Viewport(const RenderBackendViewport & viewport) = 0; virtual void Invalidate_Cached_Render_States() = 0; + virtual void Set_Shader(const ShaderClass & shader) = 0; + virtual void Set_Material(const VertexMaterialClass * material) = 0; + virtual void Apply_Render_State_Changes() = 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; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp index da364390575..bed2f995a95 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp @@ -1704,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(); @@ -1717,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); } @@ -1914,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()); @@ -1923,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()); @@ -1932,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()); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp index 445db431598..b1b7a180a7e 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp @@ -316,14 +316,14 @@ void DynamicMeshModel::Render(RenderInfoClass & rinfo) } 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; @@ -386,8 +386,8 @@ void DynamicMeshModel::Render(RenderInfoClass & rinfo) 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 (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; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp index 0a26ac64227..e56fa9b2f99 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp @@ -268,10 +268,10 @@ void Line3DClass::Render(RenderInfoClass & rinfo) return; } - DX8Wrapper::Set_Shader(Shader); + WW3D::Get_Render_Backend()->Set_Shader(Shader); DX8Wrapper::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); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp b/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp index f0a6dbb72b9..7a9cf2273d2 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,8 +118,8 @@ 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)); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp b/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp index 71852591e63..344a38b2f73 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp @@ -923,8 +923,8 @@ void PointGroupClass::Render(RenderInfoClass &rinfo) 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); + WW3D::Get_Render_Backend()->Set_Material(PointMaterial); + WW3D::Get_Render_Backend()->Set_Shader(Shader); DX8Wrapper::Set_Texture(0,Texture); // Enable sorting if the primitives are translucent and alpha testing is not enabled. @@ -1853,8 +1853,8 @@ void PointGroupClass::RenderVolumeParticle(RenderInfoClass &rinfo, unsigned int 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); + WW3D::Get_Render_Backend()->Set_Material(PointMaterial); + WW3D::Get_Render_Backend()->Set_Shader(Shader); DX8Wrapper::Set_Texture(0,Texture); // Enable sorting if the primitives are translucent and alpha testing is not enabled. diff --git a/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp index 5c44f9654ed..a1de2c3a56c 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp @@ -532,9 +532,9 @@ void RingRenderObjClass::render_ring(RenderInfoClass & rinfo,const Vector3 & cen } else { RingShader.Set_Texturing (ShaderClass::TEXTURING_DISABLE); } - DX8Wrapper::Set_Shader(RingShader); + WW3D::Get_Render_Backend()->Set_Shader(RingShader); DX8Wrapper::Set_Texture(0,RingTexture); - DX8Wrapper::Set_Material(RingMaterial); + 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()); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp index d66371d8a51..90f6745e2b5 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp @@ -1178,9 +1178,9 @@ void SegLineRendererClass::Render DX8Wrapper::Set_Index_Buffer(ib_access,0); DX8Wrapper::Set_Vertex_Buffer(Verts); - DX8Wrapper::Set_Material(mat); + WW3D::Get_Render_Backend()->Set_Material(mat); DX8Wrapper::Set_Texture(0,Texture); - DX8Wrapper::Set_Shader(shader); + WW3D::Get_Render_Backend()->Set_Shader(shader); if (sorting) { SortingRendererClass::Insert_Triangles(obj_sphere,0,tidx,0,vnum); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp index fd30b5f0a6d..97cb3059a0d 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp @@ -365,9 +365,9 @@ 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) { @@ -545,7 +545,7 @@ void SortingRendererClass::Flush_Sorting_Pool() 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!) - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); unsigned count_to_render=1; unsigned start_index=0; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp index 3a6a8d0e5d3..53930de9864 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp @@ -469,9 +469,9 @@ void SphereRenderObjClass::render_sphere() } else { SphereShader.Set_Texturing (ShaderClass::TEXTURING_DISABLE); } - DX8Wrapper::Set_Shader(SphereShader); + WW3D::Get_Render_Backend()->Set_Shader(SphereShader); DX8Wrapper::Set_Texture(0,SphereTexture); - DX8Wrapper::Set_Material(SphereMaterial); + 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()); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp index 493b4cdc038..f5d9df11cb5 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp @@ -1305,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. @@ -1371,7 +1371,7 @@ 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_Shader(shader); if (sorting) { diff --git a/Core/Tools/W3DView/ScreenCursor.cpp b/Core/Tools/W3DView/ScreenCursor.cpp index 8c358221e59..aa8ba9566e6 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,8 +289,8 @@ ScreenCursorClass::Render (RenderInfoClass &rinfo) /* ** Apply the shader and material */ - DX8Wrapper::Set_Material(m_pVertMaterial.Peek()); - DX8Wrapper::Set_Shader(ShaderClass::_PresetATestBlend2DShader); + WW3D::Get_Render_Backend()->Set_Material(m_pVertMaterial.Peek()); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetATestBlend2DShader); DX8Wrapper::Set_Texture(0,m_pTexture.Peek()); DX8Wrapper::Set_Vertex_Buffer(vbaccess); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp index a87d0968ee8..5bb3bf3e315 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp @@ -655,9 +655,9 @@ 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 WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); @@ -695,7 +695,7 @@ 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()); @@ -703,13 +703,13 @@ void W3DProjectedShadowManager::flushDecals(W3DShadowTexture *texture, ShadowTyp 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; } @@ -717,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 ); @@ -1400,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 b8cd89722cb..fe713110085 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp @@ -3479,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); + WW3D::Get_Render_Backend()->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()->Apply_Render_State_Changes(); //force update of view and projection matrices // turn off z writing m_pDev->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); @@ -3657,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) @@ -3667,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); + WW3D::Get_Render_Backend()->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()->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(); } } diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp index 5f47d7362d7..af1a05ad953 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp @@ -57,6 +57,7 @@ #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" @@ -426,7 +427,7 @@ void W3DBibBuffer::renderBibs() // 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_Shader(detailAlphaShader); if (m_curNumNormalBibIndices) { DX8Wrapper::Set_Texture(0,m_bibTexture); DX8Wrapper::Draw_Triangles( 0, m_curNumNormalBibIndices/3, 0, m_curNumNormalBibVertex); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp index 7d1bdd79387..3f0a3bf1f61 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" @@ -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_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); + WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); + WW3D::Get_Render_Backend()->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()->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 2a38ef0d75a..92919bd30d3 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp @@ -241,8 +241,8 @@ 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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); DX8Wrapper::Set_Texture(0, nullptr); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp index dd9bc793968..7e87a5af69f 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" @@ -3381,7 +3382,7 @@ void W3DRoadBuffer::drawRoads(CameraClass * camera, TextureClass *cloudTexture, DX8Wrapper::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); } diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp index 692931a1b69..75edaf053cc 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp @@ -1263,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(); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp index 8fd1e2ce28d..52342f4046e 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp @@ -318,8 +318,8 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) updateCircleVB(); } //Apply the shader and material - 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_Texture(0, nullptr); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferCircle); @@ -341,7 +341,7 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) } if (!setIndex) { - DX8Wrapper::Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); DX8Wrapper::Set_Texture(0, nullptr); } @@ -352,9 +352,9 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) Int diffuse = (0xff<<24)|(clr<<16)|(clr<<8)|clr; // b g<<8 r<<16 a<<24. updateScreenVB(diffuse); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); - DX8Wrapper::Set_Shader(ShaderClass(SC_ADD)); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass(SC_ADD)); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferScreen); - DX8Wrapper::Apply_Render_State_Changes(); + WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); switch (fade) { default: case ScriptEngine::FADE_ADD: diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp index be803ee827a..994501a5f8c 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp @@ -505,8 +505,8 @@ void BoxRenderObjClass::render_box(RenderInfoClass & rinfo,const Vector3 & cente /* ** Apply the shader and material */ - DX8Wrapper::Set_Material(_BoxMaterial); - DX8Wrapper::Set_Shader(_BoxShader); + WW3D::Get_Render_Backend()->Set_Material(_BoxMaterial); + WW3D::Get_Render_Backend()->Set_Shader(_BoxShader); DX8Wrapper::Set_Texture(0,nullptr); DX8Wrapper::Set_Index_Buffer(ibaccess,0); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp index ba2dda313e2..b2cb8478c2f 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp @@ -1226,21 +1226,21 @@ void DazzleRenderObjClass::Render_Dazzle(CameraClass* camera) if (halo_poly_count) { DX8Wrapper::Set_Index_Buffer(ib_access,dazzle_vertex_count); - DX8Wrapper::Set_Shader(default_halo_shader); + WW3D::Get_Render_Backend()->Set_Shader(default_halo_shader); DX8Wrapper::Set_Texture(0,types[type]->Get_Halo_Texture()); DX8Wrapper::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); + WW3D::Get_Render_Backend()->Set_Shader(default_dazzle_shader); DX8Wrapper::Set_Texture(0,types[type]->Get_Dazzle_Texture()); DX8Wrapper::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); + WW3D::Get_Render_Backend()->Set_Shader(default_dazzle_shader); DX8Wrapper::Set_Texture(0,lensflare->Get_Texture()); DX8Wrapper::Draw_Triangles(0,lensflare_poly_count,0,vertex_count); } @@ -1577,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;typeSet_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()) && @@ -883,8 +883,8 @@ 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_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 aeac2af767e..b6d1e7d38d1 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp @@ -258,8 +258,8 @@ void LineGroupClass::Render(RenderInfoClass &rinfo) } VertexMaterialClass * linemat = VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); - DX8Wrapper::Set_Material(linemat); - DX8Wrapper::Set_Shader(Shader); + WW3D::Get_Render_Backend()->Set_Material(linemat); + WW3D::Get_Render_Backend()->Set_Shader(Shader); DX8Wrapper::Set_Texture(0, Texture); REF_PTR_RELEASE(linemat); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp index 965731c9103..0d56d0ad0b3 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp @@ -629,7 +629,7 @@ void Render2DClass::Render() DX8Wrapper::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); WW3D::Get_Render_Backend()->Set_World_Identity(); @@ -667,8 +667,8 @@ void Render2DClass::Render() 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 @@ -695,7 +695,7 @@ void Render2DClass::Render() } } else - DX8Wrapper::Set_Shader(Shader); + WW3D::Get_Render_Backend()->Set_Shader(Shader); DX8Wrapper::Draw_Triangles(0,Indices.Count()/3,0,Vertices.Count()); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,view); diff --git a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp index 331f727d98c..f2f54eb96ba 100644 --- a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp +++ b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp @@ -2080,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); + WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); + WW3D::Get_Render_Backend()->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()->Apply_Render_State_Changes(); Int count=0; Int i; bool linesToRender = false; @@ -2341,7 +2341,7 @@ if (pMapObj->isSelected()) { 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_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); @@ -2356,7 +2356,7 @@ if (pMapObj->isSelected()) { 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_Shader(SC_OPAQUE_Z); DX8Wrapper::Set_DX8_Render_State(D3DRS_FILLMODE,D3DFILL_WIREFRAME); DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } @@ -2365,7 +2365,7 @@ if (pMapObj->isSelected()) { if (m_feedbackIndexCount>0) { DX8Wrapper::Set_Vertex_Buffer(m_vertexFeedback); DX8Wrapper::Set_Index_Buffer(m_indexFeedback,0); - DX8Wrapper::Set_Shader(ShaderClass::_PresetAlpha2DShader); + WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlpha2DShader); DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } @@ -2377,7 +2377,7 @@ if (pMapObj->isSelected()) { 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_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); @@ -2391,7 +2391,7 @@ if (pMapObj->isSelected()) { 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_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 @@ -2409,7 +2409,7 @@ if (pMapObj->isSelected()) { 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_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 From 8ebb39b4e600d34f18b08fa70d38e4d860e5db36 Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Sun, 4 Oct 2026 07:57:36 -0400 Subject: [PATCH 6/7] refactor(ww3d2): Route texture binding via IRenderBackend --- .../W3DDevice/GameClient/BaseHeightMap.cpp | 4 +- .../W3DDevice/GameClient/FlatHeightMap.cpp | 22 ++++----- .../Source/W3DDevice/GameClient/HeightMap.cpp | 24 +++++----- .../W3DDevice/GameClient/W3DDebugIcons.cpp | 2 +- .../Source/W3DDevice/GameClient/W3DScorch.cpp | 2 +- .../W3DDevice/GameClient/W3DShaderManager.cpp | 48 +++++++++---------- .../Source/W3DDevice/GameClient/W3DSmudge.cpp | 4 +- .../Source/W3DDevice/GameClient/W3DSnow.cpp | 2 +- .../GameClient/W3DTerrainBackground.cpp | 13 ++--- .../W3DDevice/GameClient/W3DTerrainTracks.cpp | 2 +- .../W3DDevice/GameClient/W3DTreeBuffer.cpp | 6 +-- .../W3DDevice/GameClient/Water/W3DWater.cpp | 24 +++++----- .../GameClient/Water/W3DWaterTracks.cpp | 2 +- .../WWVegas/WW3D2/Backend/DX8Backend.cpp | 5 ++ .../Source/WWVegas/WW3D2/Backend/DX8Backend.h | 1 + .../Source/WWVegas/WW3D2/IRenderBackend.h | 2 + .../Source/WWVegas/WW3D2/dx8renderer.cpp | 2 +- .../Source/WWVegas/WW3D2/dynamesh.cpp | 12 ++--- .../Libraries/Source/WWVegas/WW3D2/line3d.cpp | 2 +- .../Source/WWVegas/WW3D2/matpass.cpp | 2 +- .../Source/WWVegas/WW3D2/pointgr.cpp | 4 +- .../Source/WWVegas/WW3D2/ringobj.cpp | 2 +- .../Source/WWVegas/WW3D2/seglinerenderer.cpp | 2 +- .../Source/WWVegas/WW3D2/sortingrenderer.cpp | 2 +- .../Source/WWVegas/WW3D2/sphereobj.cpp | 2 +- .../Source/WWVegas/WW3D2/streakRender.cpp | 2 +- Core/Tools/W3DView/ScreenCursor.cpp | 2 +- .../GameClient/Shadow/W3DProjectedShadow.cpp | 4 +- .../GameClient/Shadow/W3DVolumetricShadow.cpp | 6 +-- .../W3DDevice/GameClient/W3DBibBuffer.cpp | 4 +- .../W3DDevice/GameClient/W3DBridgeBuffer.cpp | 2 +- .../W3DDevice/GameClient/W3DInGameUI.cpp | 2 +- .../W3DDevice/GameClient/W3DRoadBuffer.cpp | 6 +-- .../W3DDevice/GameClient/W3DStatusCircle.cpp | 4 +- .../Source/WWVegas/WW3D2/boxrobj.cpp | 2 +- .../Libraries/Source/WWVegas/WW3D2/dazzle.cpp | 6 +-- .../Source/WWVegas/WW3D2/decalmsh.cpp | 4 +- .../Source/WWVegas/WW3D2/linegrp.cpp | 2 +- .../Source/WWVegas/WW3D2/render2d.cpp | 2 +- .../Tools/WorldBuilder/src/DrawObject.cpp | 2 +- 40 files changed, 126 insertions(+), 117 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp index f2348955db9..4ab769efb50 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp @@ -2318,7 +2318,7 @@ void BaseHeightMapRenderObjClass::renderShoreLines(CameraClass *pCamera) VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,m_destAlphaTexture); + 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); @@ -2504,7 +2504,7 @@ void BaseHeightMapRenderObjClass::renderShoreLinesSorted(CameraClass *pCamera) VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); - DX8Wrapper::Set_Texture(0,m_destAlphaTexture); + 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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp index cdf03479e7b..eb0f0d2c557 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/FlatHeightMap.cpp @@ -490,8 +490,8 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) // 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(); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); @@ -551,7 +551,7 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & rinfo) Bool disableTex = m_disableTextures; if (m_disableTextures ) { WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaque2DShader); - DX8Wrapper::Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); } else { W3DShaderManager::setShader(st, pass); } @@ -590,8 +590,8 @@ 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(); @@ -606,14 +606,14 @@ 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(); WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); @@ -631,8 +631,8 @@ void FlatHeightMapRenderObjClass::Render(RenderInfoClass & 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(); 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 5a527b6d17d..76f372ee85c 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -1928,8 +1928,8 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) // 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(); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); @@ -2032,7 +2032,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) { if (m_disableTextures ) { WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaque2DShader); - DX8Wrapper::Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); } else { W3DShaderManager::setShader(st, pass); } @@ -2083,8 +2083,8 @@ 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(); @@ -2101,14 +2101,14 @@ 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(); WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); @@ -2137,8 +2137,8 @@ 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(); WW3D::Get_Render_Backend()->Set_Material(nullptr); @@ -2351,7 +2351,7 @@ void HeightMapRenderObjClass::renderExtraBlendTiles() shader.Set_Primary_Gradient(ShaderClass::GRADIENT_DISABLE); //disable lighting. shader.Set_Texturing(ShaderClass::TEXTURING_DISABLE); //disable texturing. WW3D::Get_Render_Backend()->Set_Shader(shader); - DX8Wrapper::Set_Texture(0,nullptr); //debug mode which draws terrain tiles in white. + 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 m_numVisibleExtraBlendTiles += indexCount/6; diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp index a4c9a6a2d79..bd4a8080a39 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp @@ -219,7 +219,7 @@ void W3DDebugIcons::Render(RenderInfoClass & rinfo) WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp index 7fb9326e5e6..5df56b779a4 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp @@ -127,7 +127,7 @@ void W3DScorch::drawScorches(WorldHeightMap& map) DX8Wrapper::Set_Vertex_Buffer(m_vertexScorch); WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); - DX8Wrapper::Set_Texture(0, m_scorchTexture); + WW3D::Get_Render_Backend()->Set_Texture(0, m_scorchTexture); DX8Wrapper::Draw_Triangles(0, m_curNumScorchIndices / 3, 0, m_curNumScorchVertices); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp index b886533f7d9..5774eb40b79 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DShaderManager.cpp @@ -237,7 +237,7 @@ Int ScreenDefaultFilter::set(FilterModes mode) WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); + 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); @@ -418,7 +418,7 @@ Int ScreenBWFilter::set(FilterModes mode) WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); + 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); @@ -647,7 +647,7 @@ Int ScreenBWFilterDOT3::set(FilterModes mode) WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); + 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); @@ -871,8 +871,8 @@ Int ScreenCrossFadeFilter::set(FilterModes mode) WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); - 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); 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); @@ -1163,8 +1163,8 @@ Int ScreenMotionBlurFilter::set(FilterModes mode) WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); //no need to keep a reference since it's a preset. WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); - 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); WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices DX8Wrapper::Set_DX8_Render_State(D3DRS_ZFUNC,D3DCMP_ALWAYS); @@ -1222,7 +1222,7 @@ Int ShroudTextureShader::set(Int stage) VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); 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) { @@ -1285,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); @@ -1322,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()); @@ -1380,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); @@ -1425,7 +1425,7 @@ Int MaskTextureShader::set(Int pass) 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); WW3D::Get_Render_Backend()->Set_Shader(shader); @@ -1488,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); } @@ -2305,7 +2305,7 @@ 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. WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); @@ -2346,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); @@ -2409,7 +2409,7 @@ 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. WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); @@ -2465,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); @@ -2478,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); @@ -2486,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); @@ -2516,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); @@ -3242,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); @@ -3605,8 +3605,8 @@ 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. WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index 5fed6260cf7..00231620e87 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -230,7 +230,7 @@ Bool W3DSmudgeManager::testHardwareSupport() shader.Set_Depth_Compare(ShaderClass::PASS_ALWAYS); shader.Set_Depth_Mask(ShaderClass::DEPTH_WRITE_DISABLE); WW3D::Get_Render_Backend()->Set_Shader(shader); - DX8Wrapper::Set_Texture(0,nullptr); + 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 { @@ -455,7 +455,7 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) 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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp index 382f7871356..aef28e0c5b7 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp @@ -413,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) { diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp index 04e637acd33..cb64f74f540 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp @@ -55,6 +55,7 @@ #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" @@ -767,11 +768,11 @@ void W3DTerrainBackground::drawVisiblePolys(RenderInfoClass & rinfo, Bool disabl DX8Wrapper::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); @@ -787,11 +788,11 @@ void W3DTerrainBackground::drawVisiblePolys(RenderInfoClass & rinfo, Bool disabl DX8Wrapper::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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp index d0438b23ab8..b50d7d0b42e 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp @@ -912,7 +912,7 @@ Try improving the fit to vertical surfaces like cliffs. { if (mod->m_activeEdgeCount >= 2 && mod->Is_Really_Visible()) { - DX8Wrapper::Set_Texture(0,mod->m_stageZeroTexture); + WW3D::Get_Render_Backend()->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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp index 6f31d671ac0..47c5b994986 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp @@ -1573,7 +1573,7 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD #ifdef DEBUG_TEXTURE // Draw the combined texture for debugging. jba. [4/21/2003] // Setup the vertex buffer, shader & texture. WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); - DX8Wrapper::Set_Texture(0,m_treeTexture); + 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); @@ -1640,8 +1640,8 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD } 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. diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index 527caf72e7e..5fc1b3c381f 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -1678,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 @@ -1819,8 +1819,8 @@ void WaterRenderObjClass::drawSea(RenderInfoClass & rinfo) matWW3D._44=1.0f; WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); //position the water surface - DX8Wrapper::Set_Texture(0,nullptr); //we'll be setting our own textures, so reset W3D - DX8Wrapper::Set_Texture(1,nullptr); //we'll be setting our own textures, so reset W3D + 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 WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices @@ -2094,7 +2094,7 @@ void WaterRenderObjClass::renderSky() 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); @@ -2198,7 +2198,7 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) // 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); @@ -2404,8 +2404,8 @@ void WaterRenderObjClass::renderWaterMesh() 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); WW3D::Get_Render_Backend()->Set_Light(0,*m_meshLight); WW3D::Get_Render_Backend()->Clear_Light(1); @@ -2459,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 @@ -2916,7 +2916,7 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface DX8Wrapper::Set_Index_Buffer(ib_access,0); DX8Wrapper::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Set_Texture(0,m_riverTexture); //set to blue + WW3D::Get_Render_Backend()->Set_Texture(0,m_riverTexture); //set to blue setupJbaWaterShader(); @@ -2954,7 +2954,7 @@ 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) WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); else @@ -3397,7 +3397,7 @@ void WaterRenderObjClass::renderSkyBody(Matrix3D *mat) 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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp index c14d311089e..aac2601827e 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp @@ -932,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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp index c22cd644120..909bfdc2bdd 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp @@ -188,6 +188,11 @@ 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(); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h index 84ac209c976..e88ee820fe7 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h @@ -57,6 +57,7 @@ class DX8Backend : public IRenderBackend 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_Transform(RenderBackendTransform transform, const Matrix4x4 & m) override; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h index 012054bbb49..5d995c2b04a 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h @@ -32,6 +32,7 @@ class LightEnvironmentClass; class Matrix3D; class Matrix4x4; class ShaderClass; +class TextureBaseClass; class Vector3; class VertexMaterialClass; @@ -86,6 +87,7 @@ class IRenderBackend 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_Transform(RenderBackendTransform transform, const Matrix4x4 & m) = 0; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp index bed2f995a95..ccc7cf02a21 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp @@ -1695,7 +1695,7 @@ void DX8TextureCategoryClass::Render() for (unsigned i=0;iGet_Texture_Name().str() : "null")); - DX8Wrapper::Set_Texture(i,Peek_Texture(i)); + WW3D::Get_Render_Backend()->Set_Texture(i,Peek_Texture(i)); } #ifdef WWDEBUG diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp index b1b7a180a7e..43a05203a46 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp @@ -304,15 +304,15 @@ 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) { @@ -384,8 +384,8 @@ 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 (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]); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp index e56fa9b2f99..cf1502dea57 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp @@ -269,7 +269,7 @@ void Line3DClass::Render(RenderInfoClass & rinfo) } WW3D::Get_Render_Backend()->Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); VertexMaterialClass *vm=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); WW3D::Get_Render_Backend()->Set_Material(vm); REF_PTR_RELEASE(vm); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp b/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp index 7a9cf2273d2..f14db833c68 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/matpass.cpp @@ -122,7 +122,7 @@ void MaterialPassClass::Install_Materials() const 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 344a38b2f73..92d70c9c0a9 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/pointgr.cpp @@ -925,7 +925,7 @@ void PointGroupClass::Render(RenderInfoClass &rinfo) WW3D::Get_Render_Backend()->Set_Material(PointMaterial); WW3D::Get_Render_Backend()->Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,Texture); + 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. @@ -1855,7 +1855,7 @@ void PointGroupClass::RenderVolumeParticle(RenderInfoClass &rinfo, unsigned int WW3D::Get_Render_Backend()->Set_Material(PointMaterial); WW3D::Get_Render_Backend()->Set_Shader(Shader); - DX8Wrapper::Set_Texture(0,Texture); + 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 diff --git a/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp index a1de2c3a56c..7fa337cb69b 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp @@ -533,7 +533,7 @@ void RingRenderObjClass::render_ring(RenderInfoClass & rinfo,const Vector3 & cen RingShader.Set_Texturing (ShaderClass::TEXTURING_DISABLE); } WW3D::Get_Render_Backend()->Set_Shader(RingShader); - DX8Wrapper::Set_Texture(0,RingTexture); + 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. diff --git a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp index 90f6745e2b5..a5054c9a15d 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp @@ -1179,7 +1179,7 @@ void SegLineRendererClass::Render DX8Wrapper::Set_Index_Buffer(ib_access,0); DX8Wrapper::Set_Vertex_Buffer(Verts); WW3D::Get_Render_Backend()->Set_Material(mat); - DX8Wrapper::Set_Texture(0,Texture); + WW3D::Get_Render_Backend()->Set_Texture(0,Texture); WW3D::Get_Render_Backend()->Set_Shader(shader); if (sorting) { diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp index 97cb3059a0d..e469bf23f56 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp @@ -371,7 +371,7 @@ static void Apply_Render_State(RenderStateStruct& render_state) 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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp index 53930de9864..45c5725ea4d 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp @@ -470,7 +470,7 @@ void SphereRenderObjClass::render_sphere() SphereShader.Set_Texturing (ShaderClass::TEXTURING_DISABLE); } WW3D::Get_Render_Backend()->Set_Shader(SphereShader); - DX8Wrapper::Set_Texture(0,SphereTexture); + 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. diff --git a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp index f5d9df11cb5..e5c6f7e1f67 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp @@ -1370,7 +1370,7 @@ void StreakRendererClass::RenderStreak DX8Wrapper::Set_Index_Buffer(ib_access,0); DX8Wrapper::Set_Vertex_Buffer(Verts); - DX8Wrapper::Set_Texture(0,Texture); + WW3D::Get_Render_Backend()->Set_Texture(0,Texture); WW3D::Get_Render_Backend()->Set_Shader(shader); if (sorting) diff --git a/Core/Tools/W3DView/ScreenCursor.cpp b/Core/Tools/W3DView/ScreenCursor.cpp index aa8ba9566e6..8a798c71062 100644 --- a/Core/Tools/W3DView/ScreenCursor.cpp +++ b/Core/Tools/W3DView/ScreenCursor.cpp @@ -291,7 +291,7 @@ ScreenCursorClass::Render (RenderInfoClass &rinfo) */ WW3D::Get_Render_Backend()->Set_Material(m_pVertMaterial.Peek()); WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetATestBlend2DShader); - DX8Wrapper::Set_Texture(0,m_pTexture.Peek()); + WW3D::Get_Render_Backend()->Set_Texture(0,m_pTexture.Peek()); DX8Wrapper::Set_Vertex_Buffer(vbaccess); DX8Wrapper::Set_Index_Buffer(ibaccess,0); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp index 5bb3bf3e315..e58e096dd03 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp @@ -634,7 +634,7 @@ static void RenderVBTile(TextureClass *text, Real ox, Real oy, Real ou, Real ov, DX8Wrapper::Set_Index_Buffer(ib_access,0); DX8Wrapper::Set_Vertex_Buffer(vb_access); - DX8Wrapper::Set_Texture(0, text); + 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 ); @@ -697,7 +697,7 @@ void W3DProjectedShadowManager::flushDecals(W3DShadowTexture *texture, ShadowTyp VertexMaterialClass *vmat=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); 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) diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp index fe713110085..46e3cc174da 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DVolumetricShadow.cpp @@ -3483,8 +3483,8 @@ void W3DVolumetricShadowManager::renderShadows( Bool forceStencilFill ) REF_PTR_RELEASE(vmat); WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); //turn off textures - DX8Wrapper::Set_Texture(1,nullptr); //turn off textures + 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 @@ -3670,7 +3670,7 @@ void W3DVolumetricShadowManager::renderShadows( Bool forceStencilFill ) WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); - DX8Wrapper::Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); //force update of view and projection matrices renderStencilShadows(); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp index af1a05ad953..8498685cc78 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp @@ -429,11 +429,11 @@ void W3DBibBuffer::renderBibs() DX8Wrapper::Set_Vertex_Buffer(m_vertexBib); WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); if (m_curNumNormalBibIndices) { - DX8Wrapper::Set_Texture(0,m_bibTexture); + WW3D::Get_Render_Backend()->Set_Texture(0,m_bibTexture); DX8Wrapper::Draw_Triangles( 0, m_curNumNormalBibIndices/3, 0, m_curNumNormalBibVertex); } if (m_curNumBibIndices>m_curNumNormalBibIndices) { - DX8Wrapper::Set_Texture(0,m_highlightBibTexture); + WW3D::Get_Render_Backend()->Set_Texture(0,m_highlightBibTexture); DX8Wrapper::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 3f0a3bf1f61..4cb1eccabb8 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp @@ -132,7 +132,7 @@ 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); } diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp index 92919bd30d3..3a36a4db9d6 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp @@ -243,7 +243,7 @@ void DebugHintObject::Render(RenderInfoClass & rinfo) { WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); - DX8Wrapper::Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp index 7e87a5af69f..177a7157505 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp @@ -3335,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(); } @@ -3375,11 +3375,11 @@ void W3DRoadBuffer::drawRoads(CameraClass * camera, TextureClass *cloudTexture, loadLitRoadsInVertexAndIndexBuffers(pDynamicLightsIterator); if (this->m_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); } } WW3D::Get_Render_Backend()->Set_Shader(detailAlphaShader); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp index 52342f4046e..14f28c0bb71 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp @@ -320,7 +320,7 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) //Apply the shader and material WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); - DX8Wrapper::Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferCircle); setIndex = true; @@ -343,7 +343,7 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) if (!setIndex) { WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); } tm.Make_Identity(); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp index 994501a5f8c..c84a1d35560 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp @@ -507,7 +507,7 @@ void BoxRenderObjClass::render_box(RenderInfoClass & rinfo,const Vector3 & cente */ WW3D::Get_Render_Backend()->Set_Material(_BoxMaterial); WW3D::Get_Render_Backend()->Set_Shader(_BoxShader); - DX8Wrapper::Set_Texture(0,nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0,nullptr); DX8Wrapper::Set_Index_Buffer(ibaccess,0); DX8Wrapper::Set_Vertex_Buffer(vbaccess); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp index b2cb8478c2f..6294596d5a4 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp @@ -1227,21 +1227,21 @@ void DazzleRenderObjClass::Render_Dazzle(CameraClass* camera) if (halo_poly_count) { DX8Wrapper::Set_Index_Buffer(ib_access,dazzle_vertex_count); WW3D::Get_Render_Backend()->Set_Shader(default_halo_shader); - DX8Wrapper::Set_Texture(0,types[type]->Get_Halo_Texture()); + WW3D::Get_Render_Backend()->Set_Texture(0,types[type]->Get_Halo_Texture()); DX8Wrapper::Draw_Triangles(0,halo_poly_count,0,vertex_count); } if (dazzle_poly_count) { DX8Wrapper::Set_Index_Buffer(ib_access,0); WW3D::Get_Render_Backend()->Set_Shader(default_dazzle_shader); - DX8Wrapper::Set_Texture(0,types[type]->Get_Dazzle_Texture()); + WW3D::Get_Render_Backend()->Set_Texture(0,types[type]->Get_Dazzle_Texture()); DX8Wrapper::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); WW3D::Get_Render_Backend()->Set_Shader(default_dazzle_shader); - DX8Wrapper::Set_Texture(0,lensflare->Get_Texture()); + WW3D::Get_Render_Backend()->Set_Texture(0,lensflare->Get_Texture()); DX8Wrapper::Draw_Triangles(0,lensflare_poly_count,0,vertex_count); } diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp index 49697500b44..f41e68b018d 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp @@ -384,7 +384,7 @@ void RigidDecalMeshClass::Render() *=============================================================================================*/ int RigidDecalMeshClass::Process_Material_Run(int start_index) { - DX8Wrapper::Set_Texture(0,Textures[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]); @@ -882,7 +882,7 @@ void SkinDecalMeshClass::Render() *=============================================================================================*/ int SkinDecalMeshClass::Process_Material_Run(int start_index) { - DX8Wrapper::Set_Texture(0,Textures[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]); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp index b6d1e7d38d1..1bc45ddb17d 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp @@ -260,7 +260,7 @@ void LineGroupClass::Render(RenderInfoClass &rinfo) VertexMaterialClass * linemat = VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); WW3D::Get_Render_Backend()->Set_Material(linemat); WW3D::Get_Render_Backend()->Set_Shader(Shader); - DX8Wrapper::Set_Texture(0, Texture); + WW3D::Get_Render_Backend()->Set_Texture(0, Texture); REF_PTR_RELEASE(linemat); WWASSERT(StartLineLoc && StartLineLoc->Get_Array()); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp index 0d56d0ad0b3..f61b65e8bd8 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp @@ -626,7 +626,7 @@ void Render2DClass::Render() vp.min_z = 0; vp.max_z = 1; WW3D::Get_Render_Backend()->Set_Viewport(vp); - DX8Wrapper::Set_Texture(0,Texture); + WW3D::Get_Render_Backend()->Set_Texture(0,Texture); VertexMaterialClass *vm=VertexMaterialClass::Get_Preset(VertexMaterialClass::PRELIT_DIFFUSE); WW3D::Get_Render_Backend()->Set_Material(vm); diff --git a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp index f2f54eb96ba..a23eab220d1 100644 --- a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp +++ b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp @@ -2084,7 +2084,7 @@ if (_skip_drawobject_render) { WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); - DX8Wrapper::Set_Texture(0, nullptr); + WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); Int count=0; From 98f84193ae322af84373597c3f52752be659d0a5 Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Sun, 4 Oct 2026 07:59:13 -0400 Subject: [PATCH 7/7] refactor(ww3d2): Route buffers and draw calls via IRenderBackend --- .../W3DDevice/GameClient/BaseHeightMap.cpp | 12 +-- .../Source/W3DDevice/GameClient/HeightMap.cpp | 20 ++-- .../W3DDevice/GameClient/W3DDebugIcons.cpp | 6 +- .../Source/W3DDevice/GameClient/W3DScorch.cpp | 6 +- .../Source/W3DDevice/GameClient/W3DSmudge.cpp | 8 +- .../Source/W3DDevice/GameClient/W3DSnow.cpp | 6 +- .../GameClient/W3DTerrainBackground.cpp | 13 ++- .../W3DDevice/GameClient/W3DTerrainTracks.cpp | 9 +- .../W3DDevice/GameClient/W3DTreeBuffer.cpp | 12 +-- .../W3DDevice/GameClient/Water/W3DWater.cpp | 34 +++---- .../GameClient/Water/W3DWaterTracks.cpp | 6 +- .../WWVegas/WW3D2/Backend/DX8Backend.cpp | 43 +++++++++ .../Source/WWVegas/WW3D2/Backend/DX8Backend.h | 13 +++ .../Source/WWVegas/WW3D2/IRenderBackend.h | 17 ++++ .../Source/WWVegas/WW3D2/dx8polygonrenderer.h | 10 +- .../Source/WWVegas/WW3D2/dx8renderer.cpp | 18 ++-- .../Source/WWVegas/WW3D2/dynamesh.cpp | 8 +- .../Libraries/Source/WWVegas/WW3D2/line3d.cpp | 6 +- .../Source/WWVegas/WW3D2/ringobj.cpp | 6 +- .../Source/WWVegas/WW3D2/seglinerenderer.cpp | 6 +- .../Source/WWVegas/WW3D2/sortingrenderer.cpp | 16 ++-- .../Source/WWVegas/WW3D2/sphereobj.cpp | 6 +- .../Source/WWVegas/WW3D2/streakRender.cpp | 6 +- Core/Tools/W3DView/ScreenCursor.cpp | 4 +- .../GameClient/Shadow/W3DProjectedShadow.cpp | 6 +- .../W3DDevice/GameClient/W3DBibBuffer.cpp | 9 +- .../W3DDevice/GameClient/W3DBridgeBuffer.cpp | 10 +- .../W3DDevice/GameClient/W3DInGameUI.cpp | 6 +- .../W3DDevice/GameClient/W3DRoadBuffer.cpp | 12 +-- .../W3DDevice/GameClient/W3DStatusCircle.cpp | 20 ++-- .../Source/WWVegas/WW3D2/boxrobj.cpp | 6 +- .../Libraries/Source/WWVegas/WW3D2/dazzle.cpp | 14 +-- .../Source/WWVegas/WW3D2/decalmsh.cpp | 12 +-- .../Source/WWVegas/WW3D2/linegrp.cpp | 6 +- .../Libraries/Source/WWVegas/WW3D2/mesh.cpp | 8 +- .../Source/WWVegas/WW3D2/render2d.cpp | 6 +- .../Tools/WorldBuilder/src/DrawObject.cpp | 92 +++++++++---------- 37 files changed, 285 insertions(+), 213 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp index 4ab769efb50..954fed9ac3b 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp @@ -2435,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; } @@ -2778,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; } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index 76f372ee85c..21eee0fdff3 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -1936,7 +1936,7 @@ void HeightMapRenderObjClass::Render(RenderInfoClass & rinfo) //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; @@ -2041,7 +2041,7 @@ 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. @@ -2060,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); } } @@ -2154,12 +2154,12 @@ void HeightMapRenderObjClass::renderTerrainPass(CameraClass *pCamera) //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. @@ -2178,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); } } } @@ -2337,8 +2337,8 @@ 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); WW3D::Get_Render_Backend()->Set_Material(vmat); REF_PTR_RELEASE(vmat); @@ -2353,7 +2353,7 @@ void HeightMapRenderObjClass::renderExtraBlendTiles() 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; } } @@ -2388,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 bd4a8080a39..3d70c08f350 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDebugIcons.cpp @@ -304,9 +304,9 @@ void W3DDebugIcons::Render(RenderInfoClass & rinfo) } if (numVertex == 0) break; WW3D::Get_Render_Backend()->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_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/W3DScorch.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp index 5df56b779a4..8c5dc5e2a12 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DScorch.cpp @@ -123,12 +123,12 @@ void W3DScorch::drawScorches(WorldHeightMap& map) { return; } - DX8Wrapper::Set_Index_Buffer(m_indexScorch, 0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexScorch); + 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); WW3D::Get_Render_Backend()->Set_Texture(0, m_scorchTexture); - DX8Wrapper::Draw_Triangles(0, m_curNumScorchIndices / 3, 0, m_curNumScorchVertices); + 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/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index 00231620e87..6c53060b878 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -450,7 +450,7 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) 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); WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetAlphaShader); @@ -542,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 aef28e0c5b7..03e42cdc082 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSnow.cpp @@ -491,7 +491,7 @@ void W3DSnowManager::renderAsQuads(RenderInfoClass &rinfo, Int cubeOriginX, Int Matrix4x4 identity(true); 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. @@ -569,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 cb64f74f540..09aa739aa5c 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainBackground.cpp @@ -54,7 +54,6 @@ #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" @@ -764,8 +763,8 @@ 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) { WW3D::Get_Render_Backend()->Set_Texture(1, m_terrainTexture4X); @@ -775,7 +774,7 @@ void W3DTerrainBackground::drawVisiblePolys(RenderInfoClass & rinfo, Bool disabl 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; @@ -784,8 +783,8 @@ 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) { WW3D::Get_Render_Backend()->Set_Texture(0, m_terrainTexture4X); @@ -795,7 +794,7 @@ void W3DTerrainBackground::drawVisiblePolys(RenderInfoClass & rinfo, Bool disabl 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 b50d7d0b42e..0eb9a49efe6 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainTracks.cpp @@ -54,7 +54,6 @@ #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" @@ -902,8 +901,8 @@ Try improving the fit to vertical surfaces like cliffs. ShaderClass::Invalidate(); WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBuffer); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Vertex_Buffer(m_vertexBuffer); trackStartIndex=0; mod=m_usedModules; @@ -913,8 +912,8 @@ Try improving the fit to vertical surfaces like cliffs. if (mod->m_activeEdgeCount >= 2 && mod->Is_Really_Visible()) { WW3D::Get_Render_Backend()->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_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 47c5b994986..9edae818a44 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp @@ -1625,13 +1625,13 @@ 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); 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 @@ -1713,8 +1713,8 @@ 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 WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); if (m_dwTreeVertexShader) { @@ -1723,7 +1723,7 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD 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); diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp index 5fc1b3c381f..001ae398238 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp @@ -2133,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)); 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 } //------------------------------------------------------------------------------------------------- @@ -2237,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. @@ -2914,8 +2914,8 @@ void WaterRenderObjClass::drawRiverWater(PolygonTrigger *pTrig) Matrix3D tm(1); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface - 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); WW3D::Get_Render_Backend()->Set_Texture(0,m_riverTexture); //set to blue setupJbaWaterShader(); @@ -2935,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); } @@ -3278,8 +3278,8 @@ void WaterRenderObjClass::drawTrapezoidWater(Vector3 points[4]) Matrix3D tm(1); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); //position the water surface - 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); setupFlatWaterShader();// lorenzen sez use the alpha shader @@ -3315,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 } @@ -3324,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); } @@ -3359,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); } @@ -3436,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)); 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 aac2601827e..5ba89947f60 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp @@ -483,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 } @@ -904,7 +904,7 @@ Try improving the fit to vertical surfaces like cliffs. 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. WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp index 909bfdc2bdd..fa4f1694834 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.cpp @@ -198,6 +198,49 @@ 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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h index e88ee820fe7..598de36e466 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/Backend/DX8Backend.h @@ -60,6 +60,19 @@ class DX8Backend : public IRenderBackend 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; diff --git a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h index 5d995c2b04a..ce55fb0be36 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/IRenderBackend.h @@ -27,6 +27,9 @@ // Forward declarations keep this header includable without pulling in the full // WW3D2 header graph. All W3D classes below are passed by pointer or reference. +class DynamicIBAccessClass; +class DynamicVBAccessClass; +class IndexBufferClass; class LightClass; class LightEnvironmentClass; class Matrix3D; @@ -34,6 +37,7 @@ class Matrix4x4; class ShaderClass; class TextureBaseClass; class Vector3; +class VertexBufferClass; class VertexMaterialClass; struct RenderBackendViewport @@ -90,6 +94,19 @@ class IRenderBackend 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; 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 ccc7cf02a21..1318f73621a 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp @@ -351,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()")); @@ -809,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 @@ -1410,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;passSet_Vertex_Buffer(nullptr); + WW3D::Get_Render_Backend()->Set_Index_Buffer(nullptr,0); } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp index 43a05203a46..a9ac0d8a92f 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/dynamesh.cpp @@ -251,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 @@ -335,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; } @@ -375,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, diff --git a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp index cf1502dea57..978c6fe018c 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/line3d.cpp @@ -300,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/ringobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp index 7fa337cb69b..11fa5398adb 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/ringobj.cpp @@ -587,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); } } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp index a5054c9a15d..3fa4dfe08e4 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/seglinerenderer.cpp @@ -1176,8 +1176,8 @@ void SegLineRendererClass::Render } } - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(Verts); + 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); @@ -1185,7 +1185,7 @@ void SegLineRendererClass::Render 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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp index e469bf23f56..b9453fe6eb0 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sortingrenderer.cpp @@ -217,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; } @@ -542,8 +542,8 @@ 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!) WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); @@ -555,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, @@ -573,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, @@ -625,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); @@ -637,8 +637,8 @@ 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); diff --git a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp index 45c5725ea4d..3d7e6a1757c 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/sphereobj.cpp @@ -518,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); } } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp index e5c6f7e1f67..4f15fa1de68 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/streakRender.cpp @@ -1368,8 +1368,8 @@ void StreakRendererClass::RenderStreak } - DX8Wrapper::Set_Index_Buffer(ib_access,0); - DX8Wrapper::Set_Vertex_Buffer(Verts); + 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); @@ -1379,7 +1379,7 @@ void StreakRendererClass::RenderStreak } else { - DX8Wrapper::Draw_Triangles(0,triangleIndex,0,vnum); + WW3D::Get_Render_Backend()->Draw_Triangles(0,triangleIndex,0,vnum); } } diff --git a/Core/Tools/W3DView/ScreenCursor.cpp b/Core/Tools/W3DView/ScreenCursor.cpp index 8a798c71062..29831db453e 100644 --- a/Core/Tools/W3DView/ScreenCursor.cpp +++ b/Core/Tools/W3DView/ScreenCursor.cpp @@ -293,8 +293,8 @@ ScreenCursorClass::Render (RenderInfoClass &rinfo) 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 e58e096dd03..3f0399e1b11 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp @@ -632,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); + 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. diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp index 8498685cc78..575a3bcb5d3 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBibBuffer.cpp @@ -56,7 +56,6 @@ #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" @@ -425,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); + 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) { WW3D::Get_Render_Backend()->Set_Texture(0,m_bibTexture); - DX8Wrapper::Draw_Triangles( 0, m_curNumNormalBibIndices/3, 0, m_curNumNormalBibVertex); + WW3D::Get_Render_Backend()->Draw_Triangles( 0, m_curNumNormalBibIndices/3, 0, m_curNumNormalBibVertex); } if (m_curNumBibIndices>m_curNumNormalBibIndices) { WW3D::Get_Render_Backend()->Set_Texture(0,m_highlightBibTexture); - DX8Wrapper::Draw_Triangles( m_curNumNormalBibIndices, (m_curNumBibIndices-m_curNumNormalBibIndices)/3, + 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 4cb1eccabb8..c35dc141051 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DBridgeBuffer.cpp @@ -134,7 +134,7 @@ void W3DBridge::renderBridge(Bool wireframe) if (m_visible && m_numPolygons && m_numVertex) { 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); } } @@ -1163,8 +1163,8 @@ void W3DBridgeBuffer::drawBridges(CameraClass * camera, Bool wireframe, TextureC 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); + 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. @@ -1196,8 +1196,8 @@ void W3DBridgeBuffer::drawBridges(CameraClass * camera, Bool wireframe, TextureC WW3D::Get_Render_Backend()->Invalidate_Cached_Render_States(); WW3D::Get_Render_Backend()->Set_Shader(ShaderClass::_PresetOpaqueShader); WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterial); - DX8Wrapper::Set_Index_Buffer(m_indexBridge,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBridge); + 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()); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp index 3a36a4db9d6..1d790f06e08 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DInGameUI.cpp @@ -244,15 +244,15 @@ void DebugHintObject::Render(RenderInfoClass & rinfo) WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile); + 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); 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 177a7157505..e37a5a2f4e4 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DRoadBuffer.cpp @@ -160,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); } @@ -3347,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 @@ -3365,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; iSet_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/W3DStatusCircle.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp index 14f28c0bb71..473fa1833f2 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DStatusCircle.cpp @@ -321,8 +321,8 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferCircle); + 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); @@ -331,7 +331,7 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) tm.Set_Translation(vec); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); - DX8Wrapper::Draw_Triangles( 0,NUM_TRI, 0, (m_numTriangles*3)); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,NUM_TRI, 0, (m_numTriangles*3)); } @@ -342,7 +342,7 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) if (!setIndex) { WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); } @@ -353,30 +353,30 @@ void W3DStatusCircle::Render(RenderInfoClass & rinfo) updateScreenVB(diffuse); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); WW3D::Get_Render_Backend()->Set_Shader(ShaderClass(SC_ADD)); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferScreen); + 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 c84a1d35560..5b431b76fa2 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/boxrobj.cpp @@ -509,10 +509,10 @@ void BoxRenderObjClass::render_box(RenderInfoClass & rinfo,const Vector3 & cente 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); } } diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp index 6294596d5a4..05d97fac8e0 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dazzle.cpp @@ -1202,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); { @@ -1225,24 +1225,24 @@ void DazzleRenderObjClass::Render_Dazzle(CameraClass* camera) WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_PROJECTION,Matrix4x4(true)); if (halo_poly_count) { - DX8Wrapper::Set_Index_Buffer(ib_access,dazzle_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()); - DX8Wrapper::Draw_Triangles(0,halo_poly_count,0,vertex_count); + WW3D::Get_Render_Backend()->Draw_Triangles(0,halo_poly_count,0,vertex_count); } if (dazzle_poly_count) { - DX8Wrapper::Set_Index_Buffer(ib_access,0); + 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()); - DX8Wrapper::Draw_Triangles(0,dazzle_poly_count,0,vertex_count); + 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); + 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()); - DX8Wrapper::Draw_Triangles(0,lensflare_poly_count,0,vertex_count); + WW3D::Get_Render_Backend()->Draw_Triangles(0,lensflare_poly_count,0,vertex_count); } WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_PROJECTION,old_projection_transform); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp index f41e68b018d..4c4082c80d2 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/decalmsh.cpp @@ -355,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); @@ -853,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); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp index 1bc45ddb17d..49faebe94e8 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/linegrp.cpp @@ -466,13 +466,13 @@ 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 diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp index c8a9cd50386..3e1ac7bbbb5 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/mesh.cpp @@ -853,7 +853,7 @@ 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")); WW3D::Get_Render_Backend()->Set_World_Identity(); @@ -949,9 +949,9 @@ void MeshClass::Render_Material_Pass(MaterialPassClass * pass,IndexBufferClass * pass->Install_Materials(); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Get_Transform()); - DX8Wrapper::Set_Index_Buffer(dynamic_ib,vertex_offset); + 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, @@ -981,7 +981,7 @@ 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")); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp index f61b65e8bd8..83bd6db2836 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/render2d.cpp @@ -661,8 +661,8 @@ 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) { @@ -696,7 +696,7 @@ void Render2DClass::Render() } else WW3D::Get_Render_Backend()->Set_Shader(Shader); - DX8Wrapper::Draw_Triangles(0,Indices.Count()/3,0,Vertices.Count()); + WW3D::Get_Render_Backend()->Draw_Triangles(0,Indices.Count()/3,0,Vertices.Count()); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_VIEW,view); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_PROJECTION,proj); diff --git a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp index a23eab220d1..b316d0de127 100644 --- a/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp +++ b/GeneralsMD/Code/Tools/WorldBuilder/src/DrawObject.cpp @@ -2085,7 +2085,7 @@ if (_skip_drawobject_render) { WW3D::Get_Render_Backend()->Set_Material(m_vertexMaterialClass); WW3D::Get_Render_Backend()->Set_Shader(m_shaderClass); WW3D::Get_Render_Backend()->Set_Texture(0, nullptr); - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); WW3D::Get_Render_Backend()->Apply_Render_State_Changes(); Int count=0; Int i; @@ -2096,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 @@ -2184,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(); @@ -2200,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. @@ -2217,20 +2217,20 @@ if (pMapObj->isSelected()) { 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; @@ -2256,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++; @@ -2272,20 +2272,20 @@ if (pMapObj->isSelected()) { polyCount -= NUM_ARROW_TRI+NUM_SELECT_TRI; } - DX8Wrapper::Set_Index_Buffer(m_indexBuffer,0); + WW3D::Get_Render_Backend()->Set_Index_Buffer(m_indexBuffer,0); WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tm); - DX8Wrapper::Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); + WW3D::Get_Render_Backend()->Draw_Triangles( 0,polyCount, 0, (m_numTriangles*3)); } WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,Transform); - DX8Wrapper::Set_Vertex_Buffer(m_vertexBufferTile1); + 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); } } @@ -2308,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. @@ -2326,25 +2326,25 @@ if (pMapObj->isSelected()) { #if 1 WW3D::Get_Render_Backend()->Set_Transform(RB_TRANSFORM_WORLD,tmXX); - DX8Wrapper::Draw_Triangles( 0,polyCountA, 0, (m_numTriangles*3)); + 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); + 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); + 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::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()->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); } } @@ -2354,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); + 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); + 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); - DX8Wrapper::Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); + WW3D::Get_Render_Backend()->Draw_Triangles( 0, m_feedbackIndexCount/3, 0, m_feedbackVertexCount); } } #endif @@ -2375,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); + 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 @@ -2389,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); + 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); + 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();