//----------------------------------------------------------------------- void FFPFog::updateGpuProgramsParams(Renderable* rend, Pass* pass, const AutoParamDataSource* source, const LightList* pLightList) { if (mFogMode == FOG_NONE) return; FogMode fogMode; ColourValue newFogColour; Real newFogStart, newFogEnd, newFogDensity; if (mPassOverrideParams) { fogMode = pass->getFogMode(); newFogColour = pass->getFogColour(); newFogStart = pass->getFogStart(); newFogEnd = pass->getFogEnd(); newFogDensity = pass->getFogDensity(); } else { SceneManager* sceneMgr = ShaderGenerator::getSingleton().getActiveSceneManager(); fogMode = sceneMgr->getFogMode(); newFogColour = sceneMgr->getFogColour(); newFogStart = sceneMgr->getFogStart(); newFogEnd = sceneMgr->getFogEnd(); newFogDensity = sceneMgr->getFogDensity(); } // Set fog properties. setFogProperties(fogMode, newFogColour, newFogStart, newFogEnd, newFogDensity); mFogParams->setGpuParameter(mFogParamsValue); mFogColour->setGpuParameter(mFogColourValue); }
//----------------------------------------------------------------------- bool FFPFog::preAddToRenderState(RenderState* renderState, Pass* srcPass, Pass* dstPass) { FogMode fogMode; ColourValue newFogColour; Real newFogStart, newFogEnd, newFogDensity; if (srcPass->getFogOverride()) { fogMode = srcPass->getFogMode(); newFogColour = srcPass->getFogColour(); newFogStart = srcPass->getFogStart(); newFogEnd = srcPass->getFogEnd(); newFogDensity = srcPass->getFogDensity(); mPassOverrideParams = true; } else { SceneManager* sceneMgr = ShaderGenerator::getSingleton().getActiveSceneManager(); if (sceneMgr == NULL) { fogMode = FOG_NONE; newFogColour = ColourValue::White; newFogStart = 0.0; newFogEnd = 0.0; newFogDensity = 0.0; } else { fogMode = sceneMgr->getFogMode(); newFogColour = sceneMgr->getFogColour(); newFogStart = sceneMgr->getFogStart(); newFogEnd = sceneMgr->getFogEnd(); newFogDensity = sceneMgr->getFogDensity(); } mPassOverrideParams = false; } // Set fog properties. setFogProperties(fogMode, newFogColour, newFogStart, newFogEnd, newFogDensity); // Override scene fog since it will happen in shader. dstPass->setFog(true, FOG_NONE, newFogColour, newFogDensity, newFogStart, newFogEnd); return true; }