diff --git a/Engine/source/renderInstance/renderDeferredMgr.cpp b/Engine/source/renderInstance/renderDeferredMgr.cpp index 4ceac2aca..8ed519232 100644 --- a/Engine/source/renderInstance/renderDeferredMgr.cpp +++ b/Engine/source/renderInstance/renderDeferredMgr.cpp @@ -105,8 +105,6 @@ RenderDeferredMgr::RenderDeferredMgr( bool gatherDepth, mMatInfoTarget.registerWithName( MatInfoBufferName ); mLightMapTarget.registerWithName( LightMapBufferName ); - mClearGBufferShader = NULL; - _registerFeatures(); } @@ -199,7 +197,6 @@ bool RenderDeferredMgr::_updateTargets() mTargetChain[i]->attachTexture(GFXTextureTarget::Color3, mLightMapTarget.getTexture()); } GFX->finalizeReset(); - _initShaders(); return ret; } @@ -323,8 +320,12 @@ void RenderDeferredMgr::render( SceneRenderState *state ) // Tell the superclass we're about to render const bool isRenderingToTarget = _onPreRender(state); - // Clear all z-buffer, and g-buffer. - clearBuffers(); + // Clear z-buffer and g-buffer. + GFX->clear(GFXClearTarget | GFXClearZBuffer | GFXClearStencil, ColorI::ZERO, 1.0f, 0); + GFX->clearColorAttachment(0, LinearColorF::ONE); + GFX->clearColorAttachment(1, LinearColorF::ZERO); + GFX->clearColorAttachment(2, LinearColorF::ZERO); + GFX->clearColorAttachment(3, LinearColorF::ZERO); // Restore transforms MatrixSet &matrixSet = getRenderPass()->getMatrixSet(); @@ -1088,78 +1089,3 @@ Var* LinearEyeDepthConditioner::printMethodHeader( MethodType methodType, const return retVal; } - -void RenderDeferredMgr::_initShaders() -{ - if ( mClearGBufferShader ) return; - - // Find ShaderData - ShaderData *shaderData; - mClearGBufferShader = Sim::findObject( "ClearGBufferShader", shaderData ) ? shaderData->getShader() : NULL; - if ( !mClearGBufferShader ) - Con::errorf( "RenderDeferredMgr::_initShaders - could not find ClearGBufferShader" ); - - // Create StateBlocks - GFXStateBlockDesc desc; - desc.setCullMode( GFXCullNone ); - desc.setBlend( false ); - desc.setZReadWrite( false, false ); - desc.samplersDefined = true; - for (int i = 0; i < TEXTURE_STAGE_COUNT; i++) - { - desc.samplers[i].addressModeU = GFXAddressWrap; - desc.samplers[i].addressModeV = GFXAddressWrap; - desc.samplers[i].addressModeW = GFXAddressWrap; - desc.samplers[i].magFilter = GFXTextureFilterLinear; - desc.samplers[i].minFilter = GFXTextureFilterLinear; - desc.samplers[i].mipFilter = GFXTextureFilterLinear; - desc.samplers[i].textureColorOp = GFXTOPModulate; - } - - mStateblock = GFX->createStateBlock( desc ); - - // Set up shader constants. - mShaderConsts = mClearGBufferShader->allocConstBuffer(); -} - -void RenderDeferredMgr::clearBuffers() -{ - // Clear z-buffer. - GFX->clear( GFXClearTarget | GFXClearZBuffer | GFXClearStencil, ColorI::ZERO, 1.0f, 0); - - if ( !mClearGBufferShader ) - return; - - GFXTransformSaver saver; - - // Clear the g-buffer. - RectI box(-1, -1, 3, 3); - GFX->setWorldMatrix( MatrixF::Identity ); - GFX->setViewMatrix( MatrixF::Identity ); - GFX->setProjectionMatrix( MatrixF::Identity ); - - GFX->setShader(mClearGBufferShader); - GFX->setStateBlock(mStateblock); - - Point2F nw(-0.5,-0.5); - Point2F ne(0.5,-0.5); - - GFXVertexBufferHandle verts(GFX, 4, GFXBufferTypeVolatile); - verts.lock(); - - F32 ulOffset = 0.5f - GFX->getFillConventionOffset(); - - Point2F upperLeft(-1.0, -1.0); - Point2F lowerRight(1.0, 1.0); - - verts[0].point.set( upperLeft.x+nw.x+ulOffset, upperLeft.y+nw.y+ulOffset, 0.0f ); - verts[1].point.set( lowerRight.x+ne.x, upperLeft.y+ne.y+ulOffset, 0.0f ); - verts[2].point.set( upperLeft.x-ne.x+ulOffset, lowerRight.y-ne.y, 0.0f ); - verts[3].point.set( lowerRight.x-nw.x, lowerRight.y-nw.y, 0.0f ); - - verts.unlock(); - - GFX->setVertexBuffer( verts ); - GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); - GFX->setShader(NULL); -} diff --git a/Engine/source/renderInstance/renderDeferredMgr.h b/Engine/source/renderInstance/renderDeferredMgr.h index 35ff93406..f487d4d78 100644 --- a/Engine/source/renderInstance/renderDeferredMgr.h +++ b/Engine/source/renderInstance/renderDeferredMgr.h @@ -103,20 +103,13 @@ protected: bool _lightManagerActivate(bool active); // Deferred Shading - GFXVertexBufferHandle mClearGBufferVerts; - GFXShaderRef mClearGBufferShader; - GFXStateBlockRef mStateblock; NamedTexTarget mColorTarget; NamedTexTarget mMatInfoTarget; NamedTexTarget mLightMapTarget; GFXTexHandle mColorTex; GFXTexHandle mMatInfoTex; - GFXTexHandle mLightMapTex; - GFXShaderConstBufferRef mShaderConsts; + GFXTexHandle mLightMapTex; -public: - void clearBuffers(); - void _initShaders(); }; //------------------------------------------------------------------------------ diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs index 5c0ab2f00..0a86806bb 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs @@ -1,14 +1,3 @@ -singleton ShaderData( ClearGBufferShader ) -{ - DXVertexShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferV.hlsl"; - DXPixelShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferP.hlsl"; - - OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; - OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl"; - - pixVersion = 2.0; -}; - singleton ShaderData( DeferredColorShader ) { DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl deleted file mode 100644 index c3ad61e94..000000000 --- a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl +++ /dev/null @@ -1,58 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -//----------------------------------------------------------------------------- - -#include "../../shaderModel.hlsl" - -struct Conn -{ - float4 hpos : TORQUE_POSITION; -}; - -struct Fragout -{ - float4 col : TORQUE_TARGET0; - float4 col1 : TORQUE_TARGET1; - float4 col2 : TORQUE_TARGET2; - float4 col3 : TORQUE_TARGET3; -}; - -//----------------------------------------------------------------------------- -// Main -//----------------------------------------------------------------------------- -Fragout main( Conn IN ) -{ - Fragout OUT; - - // Clear Deferred Buffer ( Normals/Depth ); - OUT.col = float4(1.0, 1.0, 1.0, 1.0); - - // Clear Color Buffer. - OUT.col1 = float4(0.0, 0.0, 0.0, 0.0001); - - // Clear Material Info Buffer. - OUT.col2 = float4(0.0, 0.0, 0.0, 0.0); - - // Clear Light Info Buffer. - OUT.col3 = float4(0.0, 0.0, 0.0, 0.0); - - return OUT; -} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl deleted file mode 100644 index 20ba4d509..000000000 --- a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl +++ /dev/null @@ -1,43 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -//----------------------------------------------------------------------------- - -#include "../../shaderModel.hlsl" - -struct Appdata -{ - float3 pos : POSITION; - float4 color : COLOR; -}; - -struct Conn -{ - float4 hpos : TORQUE_POSITION; -}; - -uniform float4x4 modelview; - -Conn main( Appdata In ) -{ - Conn Out; - Out.hpos = float4(In.pos,1.0); - return Out; -} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl deleted file mode 100644 index eab8fc136..000000000 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl +++ /dev/null @@ -1,44 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -//----------------------------------------------------------------------------- - -out vec4 OUT_col; -out vec4 OUT_col1; -out vec4 OUT_col2; -out vec4 OUT_col3; - -//----------------------------------------------------------------------------- -// Main -//----------------------------------------------------------------------------- -void main() -{ - // Clear Deferred Buffer ( Normals/Depth ); - OUT_col = vec4(1.0, 1.0, 1.0, 1.0); - - // Clear Color Buffer. - OUT_col1 = vec4(0.0, 0.0, 0.0, 0.0001); - - // Clear Material Info Buffer. - OUT_col2 = vec4(0.0, 0.0, 0.0, 0.0); - - // Clear Light Info Buffer. - OUT_col3 = vec4(0.0, 0.0, 0.0, 0.0); -}