diff --git a/Engine/source/postFx/postEffect.cpp b/Engine/source/postFx/postEffect.cpp index 331806fbc..60c6b9ee4 100644 --- a/Engine/source/postFx/postEffect.cpp +++ b/Engine/source/postFx/postEffect.cpp @@ -178,7 +178,13 @@ void PostEffect::EffectConst::setToBuffer( GFXShaderConstBufferRef buff ) const char *strVal = mStringVal.c_str(); - if ( type == GFXSCT_Float ) + if ( type == GFXSCT_Int ) + { + S32 val; + Con::setData( TypeS32, &val, 0, 1, &strVal ); + buff->set( mHandle, val ); + } + else if ( type == GFXSCT_Float ) { F32 val; Con::setData( TypeF32, &val, 0, 1, &strVal ); @@ -196,7 +202,7 @@ void PostEffect::EffectConst::setToBuffer( GFXShaderConstBufferRef buff ) Con::setData( TypePoint3F, &val, 0, 1, &strVal ); buff->set( mHandle, val ); } - else + else if ( type == GFXSCT_Float4 ) { Point4F val; @@ -228,6 +234,14 @@ void PostEffect::EffectConst::setToBuffer( GFXShaderConstBufferRef buff ) buff->set( mHandle, val ); } } + else + { +#if TORQUE_DEBUG + const char* err = avar("PostEffect::EffectConst::setToBuffer $s type is not implemented", mName.c_str()); + Con::errorf(err); + GFXAssertFatal(0,err); +#endif + } } @@ -533,6 +547,8 @@ void PostEffect::_setupConstants( const SceneRenderState *state ) mTexSizeSC[3] = mShader->getShaderConstHandle( "$texSize3" ); mTexSizeSC[4] = mShader->getShaderConstHandle( "$texSize4" ); mTexSizeSC[5] = mShader->getShaderConstHandle( "$texSize5" ); + mTexSizeSC[6] = mShader->getShaderConstHandle( "$texSize6" ); + mTexSizeSC[7] = mShader->getShaderConstHandle( "$texSize7" ); mRenderTargetParamsSC[0] = mShader->getShaderConstHandle( "$rtParams0" ); mRenderTargetParamsSC[1] = mShader->getShaderConstHandle( "$rtParams1" ); @@ -540,6 +556,8 @@ void PostEffect::_setupConstants( const SceneRenderState *state ) mRenderTargetParamsSC[3] = mShader->getShaderConstHandle( "$rtParams3" ); mRenderTargetParamsSC[4] = mShader->getShaderConstHandle( "$rtParams4" ); mRenderTargetParamsSC[5] = mShader->getShaderConstHandle( "$rtParams5" ); + mRenderTargetParamsSC[6] = mShader->getShaderConstHandle( "$rtParams6" ); + mRenderTargetParamsSC[7] = mShader->getShaderConstHandle( "$rtParams7" ); //mViewportSC = shader->getShaderConstHandle( "$viewport" ); @@ -826,7 +844,10 @@ void PostEffect::_setupConstants( const SceneRenderState *state ) EffectConstTable::Iterator iter = mEffectConsts.begin(); for ( ; iter != mEffectConsts.end(); iter++ ) + { iter->value->mDirty = true; + iter->value->mHandle = NULL; + } } // Doesn't look like anyone is using this anymore. @@ -1211,9 +1232,9 @@ void PostEffect::process( const SceneRenderState *state, // Setup the shader and constants. if ( mShader ) { + GFX->setShader( mShader ); _setupConstants( state ); - GFX->setShader( mShader ); GFX->setShaderConstBuffer( mShaderConsts ); } else @@ -1397,6 +1418,13 @@ void PostEffect::_checkRequirements() mIsValid = false; mUpdateShader = false; mShader = NULL; + mShaderConsts = NULL; + EffectConstTable::Iterator iter = mEffectConsts.begin(); + for ( ; iter != mEffectConsts.end(); iter++ ) + { + iter->value->mDirty = true; + iter->value->mHandle = NULL; + } // First make sure the target format is supported. if ( mNamedTarget.isRegistered() ) diff --git a/Engine/source/postFx/postEffect.h b/Engine/source/postFx/postEffect.h index 4ea75595f..812738ba3 100644 --- a/Engine/source/postFx/postEffect.h +++ b/Engine/source/postFx/postEffect.h @@ -80,7 +80,7 @@ public: enum { - NumTextures = 6, + NumTextures = 8, }; protected: