Merge pull request #616 from BeamNG/water_object_use_shader_param

Fix WaterObject TODO: Retrieve sampler numbers from parameter handles, see r22631.
This commit is contained in:
Areloch 2014-09-29 22:52:43 -05:00
commit eeb97ffa4c
2 changed files with 9 additions and 8 deletions

View file

@ -91,6 +91,7 @@ void WaterMatParams::clear()
mSpecularParamsSC = NULL; mSpecularParamsSC = NULL;
mDepthGradMaxSC = NULL; mDepthGradMaxSC = NULL;
mReflectivitySC = NULL; mReflectivitySC = NULL;
mDepthGradSamplerSC = NULL;
} }
void WaterMatParams::init( BaseMatInstance* matInst ) void WaterMatParams::init( BaseMatInstance* matInst )
@ -132,6 +133,7 @@ void WaterMatParams::init( BaseMatInstance* matInst )
mSpecularParamsSC = matInst->getMaterialParameterHandle( "$specularParams" ); mSpecularParamsSC = matInst->getMaterialParameterHandle( "$specularParams" );
mDepthGradMaxSC = matInst->getMaterialParameterHandle( "$depthGradMax" ); mDepthGradMaxSC = matInst->getMaterialParameterHandle( "$depthGradMax" );
mReflectivitySC = matInst->getMaterialParameterHandle( "$reflectivity" ); mReflectivitySC = matInst->getMaterialParameterHandle( "$reflectivity" );
mDepthGradSamplerSC = matInst->getMaterialParameterHandle( "$depthGradMap" );
} }
@ -752,22 +754,20 @@ void WaterObject::renderObject( ObjectRenderInst *ri, SceneRenderState *state, B
void WaterObject::setCustomTextures( S32 matIdx, U32 pass, const WaterMatParams &paramHandles ) void WaterObject::setCustomTextures( S32 matIdx, U32 pass, const WaterMatParams &paramHandles )
{ {
// TODO: Retrieve sampler numbers from parameter handles, see r22631.
// Always use the ripple texture. // Always use the ripple texture.
GFX->setTexture( 0, mRippleTex ); GFX->setTexture( paramHandles.mRippleSamplerSC->getSamplerRegister(pass), mRippleTex );
// Only above-water in advanced-lighting uses the foam texture. // Only above-water in advanced-lighting uses the foam texture.
if ( matIdx == WaterMat ) if ( matIdx == WaterMat )
{ {
GFX->setTexture( 5, mFoamTex ); GFX->setTexture( paramHandles.mFoamSamplerSC->getSamplerRegister(pass), mFoamTex );
GFX->setTexture( 6, mDepthGradientTex ); GFX->setTexture( paramHandles.mDepthGradSamplerSC->getSamplerRegister(pass), mDepthGradientTex );
} }
if ( ( matIdx == WaterMat || matIdx == BasicWaterMat ) && mCubemap ) if ( ( matIdx == WaterMat || matIdx == BasicWaterMat ) && mCubemap )
GFX->setCubeTexture( 4, mCubemap->mCubemap ); GFX->setCubeTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), mCubemap->mCubemap );
else else if(paramHandles.mCubemapSamplerSC->getSamplerRegister(pass) != -1 )
GFX->setCubeTexture( 4, NULL ); GFX->setCubeTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), NULL );
} }
void WaterObject::drawUnderwaterFilter( SceneRenderState *state ) void WaterObject::drawUnderwaterFilter( SceneRenderState *state )

View file

@ -97,6 +97,7 @@ struct WaterMatParams
MaterialParameterHandle* mSpecularParamsSC; MaterialParameterHandle* mSpecularParamsSC;
MaterialParameterHandle* mDepthGradMaxSC; MaterialParameterHandle* mDepthGradMaxSC;
MaterialParameterHandle* mReflectivitySC; MaterialParameterHandle* mReflectivitySC;
MaterialParameterHandle* mDepthGradSamplerSC;
void clear(); void clear();
void init(BaseMatInstance* matInst); void init(BaseMatInstance* matInst);