Merge pull request #934 from BeamNG/postfx_opengl

Changes on PostFX for OpenGL.
This commit is contained in:
LuisAntonRebollo 2014-11-30 02:23:02 +01:00
commit a4c8e1d881
2 changed files with 32 additions and 4 deletions

View file

@ -178,7 +178,13 @@ void PostEffect::EffectConst::setToBuffer( GFXShaderConstBufferRef buff )
const char *strVal = mStringVal.c_str(); 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; F32 val;
Con::setData( TypeF32, &val, 0, 1, &strVal ); Con::setData( TypeF32, &val, 0, 1, &strVal );
@ -196,7 +202,7 @@ void PostEffect::EffectConst::setToBuffer( GFXShaderConstBufferRef buff )
Con::setData( TypePoint3F, &val, 0, 1, &strVal ); Con::setData( TypePoint3F, &val, 0, 1, &strVal );
buff->set( mHandle, val ); buff->set( mHandle, val );
} }
else else if ( type == GFXSCT_Float4 )
{ {
Point4F val; Point4F val;
@ -228,6 +234,14 @@ void PostEffect::EffectConst::setToBuffer( GFXShaderConstBufferRef buff )
buff->set( mHandle, val ); 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[3] = mShader->getShaderConstHandle( "$texSize3" );
mTexSizeSC[4] = mShader->getShaderConstHandle( "$texSize4" ); mTexSizeSC[4] = mShader->getShaderConstHandle( "$texSize4" );
mTexSizeSC[5] = mShader->getShaderConstHandle( "$texSize5" ); mTexSizeSC[5] = mShader->getShaderConstHandle( "$texSize5" );
mTexSizeSC[6] = mShader->getShaderConstHandle( "$texSize6" );
mTexSizeSC[7] = mShader->getShaderConstHandle( "$texSize7" );
mRenderTargetParamsSC[0] = mShader->getShaderConstHandle( "$rtParams0" ); mRenderTargetParamsSC[0] = mShader->getShaderConstHandle( "$rtParams0" );
mRenderTargetParamsSC[1] = mShader->getShaderConstHandle( "$rtParams1" ); mRenderTargetParamsSC[1] = mShader->getShaderConstHandle( "$rtParams1" );
@ -540,6 +556,8 @@ void PostEffect::_setupConstants( const SceneRenderState *state )
mRenderTargetParamsSC[3] = mShader->getShaderConstHandle( "$rtParams3" ); mRenderTargetParamsSC[3] = mShader->getShaderConstHandle( "$rtParams3" );
mRenderTargetParamsSC[4] = mShader->getShaderConstHandle( "$rtParams4" ); mRenderTargetParamsSC[4] = mShader->getShaderConstHandle( "$rtParams4" );
mRenderTargetParamsSC[5] = mShader->getShaderConstHandle( "$rtParams5" ); mRenderTargetParamsSC[5] = mShader->getShaderConstHandle( "$rtParams5" );
mRenderTargetParamsSC[6] = mShader->getShaderConstHandle( "$rtParams6" );
mRenderTargetParamsSC[7] = mShader->getShaderConstHandle( "$rtParams7" );
//mViewportSC = shader->getShaderConstHandle( "$viewport" ); //mViewportSC = shader->getShaderConstHandle( "$viewport" );
@ -826,7 +844,10 @@ void PostEffect::_setupConstants( const SceneRenderState *state )
EffectConstTable::Iterator iter = mEffectConsts.begin(); EffectConstTable::Iterator iter = mEffectConsts.begin();
for ( ; iter != mEffectConsts.end(); iter++ ) for ( ; iter != mEffectConsts.end(); iter++ )
{
iter->value->mDirty = true; iter->value->mDirty = true;
iter->value->mHandle = NULL;
}
} }
// Doesn't look like anyone is using this anymore. // Doesn't look like anyone is using this anymore.
@ -1211,9 +1232,9 @@ void PostEffect::process( const SceneRenderState *state,
// Setup the shader and constants. // Setup the shader and constants.
if ( mShader ) if ( mShader )
{ {
GFX->setShader( mShader );
_setupConstants( state ); _setupConstants( state );
GFX->setShader( mShader );
GFX->setShaderConstBuffer( mShaderConsts ); GFX->setShaderConstBuffer( mShaderConsts );
} }
else else
@ -1397,6 +1418,13 @@ void PostEffect::_checkRequirements()
mIsValid = false; mIsValid = false;
mUpdateShader = false; mUpdateShader = false;
mShader = NULL; 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. // First make sure the target format is supported.
if ( mNamedTarget.isRegistered() ) if ( mNamedTarget.isRegistered() )

View file

@ -80,7 +80,7 @@ public:
enum enum
{ {
NumTextures = 6, NumTextures = 8,
}; };
protected: protected: