void WaterObject::prepRenderImage( SceneRenderState *state ) { PROFILE_SCOPE(WaterObject_prepRenderImage); // Are we in Basic Lighting? mBasicLighting = dStricmp( LIGHTMGR->getId(), "BLM" ) == 0; mUnderwater = isUnderwater( state->getCameraPosition() ); // We only render during the normal diffuse render pass. if( !state->isDiffusePass() ) return; // Setup scene transforms mMatrixSet->setSceneView(GFX->getWorldMatrix()); mMatrixSet->setSceneProjection(GFX->getProjectionMatrix()); _getWaterPlane( state->getCameraPosition(), mWaterPlane, mWaterPos ); mWaterFogData.plane = mWaterPlane; mPlaneReflector.refplane = mWaterPlane; updateUnderwaterEffect( state ); ObjectRenderInst *ri = state->getRenderPass()->allocInst<ObjectRenderInst>(); ri->renderDelegate.bind( this, &WaterObject::renderObject ); ri->type = RenderPassManager::RIT_Water; ri->defaultKey = 1; state->getRenderPass()->addInst( ri ); //mRenderUpdateCount++; }
void WaterPlane::prepRenderImage( SceneRenderState *state ) { PROFILE_SCOPE(WaterPlane_prepRenderImage); if( !state->isDiffusePass() ) return; mBasicLighting = dStricmp( LIGHTMGR->getId(), "BLM" ) == 0; mUnderwater = isUnderwater( state->getCameraPosition() ); mMatrixSet->setSceneView(GFX->getWorldMatrix()); const Frustum &frustum = state->getFrustum(); if ( mPrimBuff.isNull() || mGenerateVB || frustum != mFrustum ) { mFrustum = frustum; setupVBIB( state ); mGenerateVB = false; MatrixF proj( true ); MathUtils::getZBiasProjectionMatrix( 0.0001f, mFrustum, &proj ); mMatrixSet->setSceneProjection(proj); } _getWaterPlane( state->getCameraPosition(), mWaterPlane, mWaterPos ); mWaterFogData.plane = mWaterPlane; mPlaneReflector.refplane = mWaterPlane; updateUnderwaterEffect( state ); ObjectRenderInst *ri = state->getRenderPass()->allocInst<ObjectRenderInst>(); ri->renderDelegate.bind( this, &WaterObject::renderObject ); ri->type = RenderPassManager::RIT_Water; state->getRenderPass()->addInst( ri ); //mRenderUpdateCount++; }