From 3995b974eddaef0f8600e02b721c6f701ffc8ac3 Mon Sep 17 00:00:00 2001 From: LuisAntonRebollo Date: Thu, 17 Apr 2014 13:21:52 +0200 Subject: [PATCH] Fix WaterObject TODO: Retrieve sampler numbers from parameter handles, see r22631. --- Engine/source/environment/waterObject.cpp | 16 ++++++++-------- Engine/source/environment/waterObject.h | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Engine/source/environment/waterObject.cpp b/Engine/source/environment/waterObject.cpp index 51e737717..ae69060ac 100644 --- a/Engine/source/environment/waterObject.cpp +++ b/Engine/source/environment/waterObject.cpp @@ -91,6 +91,7 @@ void WaterMatParams::clear() mSpecularParamsSC = NULL; mDepthGradMaxSC = NULL; mReflectivitySC = NULL; + mDepthGradSamplerSC = NULL; } void WaterMatParams::init( BaseMatInstance* matInst ) @@ -132,6 +133,7 @@ void WaterMatParams::init( BaseMatInstance* matInst ) mSpecularParamsSC = matInst->getMaterialParameterHandle( "$specularParams" ); mDepthGradMaxSC = matInst->getMaterialParameterHandle( "$depthGradMax" ); mReflectivitySC = matInst->getMaterialParameterHandle( "$reflectivity" ); + mDepthGradSamplerSC = matInst->getMaterialParameterHandle( "$depthGradMap" ); } @@ -747,22 +749,20 @@ void WaterObject::renderObject( ObjectRenderInst *ri, SceneRenderState *state, B void WaterObject::setCustomTextures( S32 matIdx, U32 pass, const WaterMatParams ¶mHandles ) { - // TODO: Retrieve sampler numbers from parameter handles, see r22631. - // 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. if ( matIdx == WaterMat ) { - GFX->setTexture( 5, mFoamTex ); - GFX->setTexture( 6, mDepthGradientTex ); + GFX->setTexture( paramHandles.mFoamSamplerSC->getSamplerRegister(pass), mFoamTex ); + GFX->setTexture( paramHandles.mDepthGradSamplerSC->getSamplerRegister(pass), mDepthGradientTex ); } if ( ( matIdx == WaterMat || matIdx == BasicWaterMat ) && mCubemap ) - GFX->setCubeTexture( 4, mCubemap->mCubemap ); - else - GFX->setCubeTexture( 4, NULL ); + GFX->setCubeTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), mCubemap->mCubemap ); + else if(paramHandles.mCubemapSamplerSC->getSamplerRegister(pass) != -1 ) + GFX->setCubeTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), NULL ); } void WaterObject::drawUnderwaterFilter( SceneRenderState *state ) diff --git a/Engine/source/environment/waterObject.h b/Engine/source/environment/waterObject.h index 06c5e7dd0..7eeb05703 100644 --- a/Engine/source/environment/waterObject.h +++ b/Engine/source/environment/waterObject.h @@ -97,6 +97,7 @@ struct WaterMatParams MaterialParameterHandle* mSpecularParamsSC; MaterialParameterHandle* mDepthGradMaxSC; MaterialParameterHandle* mReflectivitySC; + MaterialParameterHandle* mDepthGradSamplerSC; void clear(); void init(BaseMatInstance* matInst);