void WaterObject::updateUnderwaterEffect( SceneRenderState *state ) { AssertFatal( isClientObject(), "uWaterObject::updateUnderwaterEffect() called on the server" ); PostEffect *effect = getUnderwaterEffect(); if ( !effect ) return; // Never use underwater postFx with Basic Lighting, we don't have depth. if ( mBasicLighting ) { effect->disable(); return; } GameConnection *conn = GameConnection::getConnectionToServer(); if ( !conn ) return; GameBase *control = conn->getControlObject(); if ( !control ) return; WaterObject *water = control->getCurrentWaterObject(); if ( water == NULL ) effect->disable(); else if ( water == this ) { MatrixF mat; conn->getControlCameraTransform( 0, &mat ); if ( mUnderwater ) { effect->enable(); effect->setOnThisFrame( true ); mWaterFogData.depthGradMax = mDepthGradientMax; state->getSceneManager()->setWaterFogData( mWaterFogData ); // Register our depthGradient texture with a name so it can // be fetched by the effect when it renders. if ( !mNamedDepthGradTex.isRegistered() ) mNamedDepthGradTex.registerWithName( "waterDepthGradMap" ); mNamedDepthGradTex.setTexture( mDepthGradientTex ); } else effect->disable(); } }
void VPostEffectNetEvent::process( NetConnection *pConnection ) { PostEffect *postEffect; if ( !Sim::findObject( mPostEffect, postEffect ) ) { Con::warnf( "VPostEffectNetEvent::process() - Unable to find PostEffect Object '%s'", mPostEffect ); return; } if ( mEnabled ) { // Enable Effect. postEffect->enable(); } else { // Disable Effect. postEffect->disable(); } }