Pull weather updates out of scene render

--HG--
branch : multipass-stereo
hg/feature/sound
kaetemi 12 years ago
parent 5c568c6ea0
commit bf8ad82e21

@ -550,73 +550,81 @@ void renderScene(bool forceFullDetail, bool bloom)
} }
// *************************************************************************************************************************** // ***************************************************************************************************************************
// Render all scenes
void renderScene() void updateWeather()
{ {
{ H_AUTO_USE ( RZ_Client_Main_Loop_Sky_And_Weather )
H_AUTO_USE ( RZ_Client_Main_Loop_Sky_And_Weather )
//HeightGrid.update(Scene->getCam().getPos()); //HeightGrid.update(Scene->getCam().getPos());
// update description of light cycle // update description of light cycle
updateLightDesc(); updateLightDesc();
// server driven weather mgt // server driven weather mgt
updateDBDrivenWeatherValue(); updateDBDrivenWeatherValue();
// Update the weather manager // Update the weather manager
updateWeatherManager(MainCam.getMatrix(), ContinentMngr.cur()); updateWeatherManager(MainCam.getMatrix(), ContinentMngr.cur());
// compute thunder color // compute thunder color
ThunderColor.modulateFromui(WeatherManager.getCurrWeatherState().ThunderColor, (uint) (256.f * WeatherManager.getThunderLevel())); ThunderColor.modulateFromui(WeatherManager.getCurrWeatherState().ThunderColor, (uint) (256.f * WeatherManager.getThunderLevel()));
// Update the lighting // Update the lighting
LightCycleManager.setHour(DayNightCycleHour, WeatherManager, ThunderColor); LightCycleManager.setHour(DayNightCycleHour, WeatherManager, ThunderColor);
#ifdef RENDER_CLOUDS #ifdef RENDER_CLOUDS
if (Filter3D[FilterCloud]) if (Filter3D[FilterCloud])
{ {
H_AUTO_USE ( RZ_Client_Main_Loop_Update_Cloud_Scape ); H_AUTO_USE ( RZ_Client_Main_Loop_Update_Cloud_Scape );
updateClouds(); updateClouds();
} }
#endif #endif
ContinentMngr.getFogState(MainFog, LightCycleManager.getLightLevel(), LightCycleManager.getLightDesc().DuskRatio, LightCycleManager.getState(), View.viewPos(), MainFogState);
ContinentMngr.getFogState(MainFog, LightCycleManager.getLightLevel(), LightCycleManager.getLightDesc().DuskRatio, LightCycleManager.getState(), View.viewPos(), MainFogState); // TODO: ZBuffer clear was originally before this, but should not be necessary normally.
// The anim function renders new clouds. Ensure this does not break.
// These are old-style nel clouds.
if (Driver->getPolygonMode() == UDriver::Filled) #ifdef RENDER_CLOUDS
{ if (CloudScape != NULL && Filter3D[FilterCloud])
Driver->clearZBuffer(); {
} H_AUTO_USE ( RZ_Client_Main_Loop_Anim_Cloud_Scape );
#ifdef RENDER_CLOUDS Driver->enableFog (false);
if (CloudScape != NULL && Filter3D[FilterCloud])
{
H_AUTO_USE ( RZ_Client_Main_Loop_Anim_Cloud_Scape );
Driver->enableFog (false); // Force polygon mode to filled
NL3D::UDriver::TPolygonMode oldMode = Driver->getPolygonMode();
Driver->setPolygonMode(NL3D::UDriver::Filled);
// Force polygon mode to filled CloudScape->anim (DT); // WARNING this function work with screen
NL3D::UDriver::TPolygonMode oldMode = Driver->getPolygonMode();
Driver->setPolygonMode(NL3D::UDriver::Filled);
CloudScape->anim (DT); // WARNING this function work with screen Driver->enableFog (true);
Driver->enableFog (true); // Reset backuped polygon mode
Driver->setPolygonMode(oldMode);
}
#endif
}
// Reset backuped polygon mode // ***************************************************************************************************************************
Driver->setPolygonMode(oldMode); // Render all scenes
} void renderScene()
#endif {
// Sky is used to clear the frame buffer now, but if in line or point polygon mode, we should draw it if (Driver->getPolygonMode() == UDriver::Filled)
if (Driver->getPolygonMode() != UDriver::Filled) {
Driver->clearZBuffer();
}
// Sky is used to clear the frame buffer now, but if in line or point polygon mode, we should draw it
if (Driver->getPolygonMode() != UDriver::Filled)
{
if (!Driver->isLost())
{ {
if (!Driver->isLost()) Driver->clearBuffers (CRGBA(127, 127, 127));
{
Driver->clearBuffers (CRGBA(127, 127, 127));
}
} }
} }
// Update Filter Flags // Update Filter Flags
Scene->enableElementRender(UScene::FilterAllMeshNoVP, Filter3D[FilterMeshNoVP]); Scene->enableElementRender(UScene::FilterAllMeshNoVP, Filter3D[FilterMeshNoVP]);
Scene->enableElementRender(UScene::FilterAllMeshVP, Filter3D[FilterMeshVP]); Scene->enableElementRender(UScene::FilterAllMeshVP, Filter3D[FilterMeshVP]);
@ -1542,6 +1550,9 @@ bool mainLoop()
} }
#endif #endif
// TODO: Verify that moving this out of renderScene does not negatively impact oversize screenshots.
updateWeather();
if (ClientCfg.Bloom) if (ClientCfg.Bloom)
{ {
// set bloom parameters before applying bloom effect // set bloom parameters before applying bloom effect

Loading…
Cancel
Save