From d46f82ef1d31411096373b6602439abeff4d1317 Mon Sep 17 00:00:00 2001 From: RexTimmy Date: Thu, 1 Dec 2016 11:03:32 +1000 Subject: [PATCH] re-enable face culling for the terrain --- Engine/source/terrain/terrCellMaterial.cpp | 18 ++++++++++++++---- Engine/source/terrain/terrCellMaterial.h | 1 + 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Engine/source/terrain/terrCellMaterial.cpp b/Engine/source/terrain/terrCellMaterial.cpp index b711dbe8e..796c4df47 100644 --- a/Engine/source/terrain/terrCellMaterial.cpp +++ b/Engine/source/terrain/terrCellMaterial.cpp @@ -152,11 +152,17 @@ void TerrainCellMaterial::_updateDefaultAnisotropy() } // for ( U32 m=0; m < pass.materials.size(); m++ ) // Set the updated stateblock. + desc.setCullMode( GFXCullCCW ); pass.stateBlock = GFX->createStateBlock( desc ); + //reflection + desc.setCullMode( GFXCullCW ); + pass.reflectionStateBlock = GFX->createStateBlock(desc); + // Create the wireframe state blocks. GFXStateBlockDesc wireframe( desc ); wireframe.fillMode = GFXFillWireframe; + wireframe.setCullMode( GFXCullCCW ); pass.wireframeStateBlock = GFX->createStateBlock( wireframe ); } // for ( U32 p=0; i < (*iter)->mPasses.size(); p++ ) @@ -668,15 +674,17 @@ bool TerrainCellMaterial::_createPass( Vector *materials, if ( prePassMat ) desc.addDesc( RenderPrePassMgr::getOpaqueStenciWriteDesc( false ) ); - // Shut off culling for prepass materials (reflection support). - if ( prePassMat ) - desc.setCullMode( GFXCullNone ); + desc.setCullMode( GFXCullCCW ); + pass->stateBlock = GFX->createStateBlock(desc); - pass->stateBlock = GFX->createStateBlock( desc ); + //reflection stateblock + desc.setCullMode( GFXCullCW ); + pass->reflectionStateBlock = GFX->createStateBlock(desc); // Create the wireframe state blocks. GFXStateBlockDesc wireframe( desc ); wireframe.fillMode = GFXFillWireframe; + wireframe.setCullMode( GFXCullCCW ); pass->wireframeStateBlock = GFX->createStateBlock( wireframe ); return true; @@ -776,6 +784,8 @@ bool TerrainCellMaterial::setupPass( const SceneRenderState *state, if ( sceneData.wireframe ) GFX->setStateBlock( pass.wireframeStateBlock ); + else if ( state->isReflectPass( )) + GFX->setStateBlock( pass.reflectionStateBlock ); else GFX->setStateBlock( pass.stateBlock ); diff --git a/Engine/source/terrain/terrCellMaterial.h b/Engine/source/terrain/terrCellMaterial.h index 0784bc192..1f2fbfb68 100644 --- a/Engine/source/terrain/terrCellMaterial.h +++ b/Engine/source/terrain/terrCellMaterial.h @@ -108,6 +108,7 @@ protected: GFXStateBlockRef stateBlock; GFXStateBlockRef wireframeStateBlock; + GFXStateBlockRef reflectionStateBlock; GFXShaderConstHandle *modelViewProjConst; GFXShaderConstHandle *worldViewOnly;