summaryrefslogtreecommitdiff
path: root/indra/newview/llappviewer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llappviewer.cpp')
-rw-r--r--indra/newview/llappviewer.cpp49
1 files changed, 43 insertions, 6 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index efa24796e5..f5dce58758 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -631,7 +631,6 @@ LLAppViewer::LLAppViewer() :
mForceGraphicsDetail(false),
mQuitRequested(false),
mLogoutRequestSent(false),
- mYieldTime(-1),
mMainloopTimeout(NULL),
mAgentRegionLastAlive(false),
mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
@@ -1199,7 +1198,7 @@ bool LLAppViewer::mainLoop()
LLVoiceChannel::initClass();
LLVoiceClient::getInstance()->init(gServicePump);
LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLCallFloater::sOnCurrentChannelChanged, _1), true);
- LLTimer frameTimer,idleTimer;
+ LLTimer frameTimer,idleTimer,periodicRenderingTimer;
LLTimer debugTime;
LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
joystick->setNeedsReset(true);
@@ -1211,6 +1210,8 @@ bool LLAppViewer::mainLoop()
// point of posting.
LLSD newFrame;
+ BOOL restore_rendering_masks = FALSE;
+
//LLPrivateMemoryPoolTester::getInstance()->run(false) ;
//LLPrivateMemoryPoolTester::getInstance()->run(true) ;
//LLPrivateMemoryPoolTester::destroy() ;
@@ -1228,6 +1229,28 @@ bool LLAppViewer::mainLoop()
try
{
+ // Check if we need to restore rendering masks.
+ if (restore_rendering_masks)
+ {
+ gPipeline.popRenderDebugFeatureMask();
+ gPipeline.popRenderTypeMask();
+ }
+ // Check if we need to temporarily enable rendering.
+ F32 periodic_rendering = gSavedSettings.getF32("ForcePeriodicRenderingTime");
+ if (periodic_rendering > F_APPROXIMATELY_ZERO && periodicRenderingTimer.getElapsedTimeF64() > periodic_rendering)
+ {
+ periodicRenderingTimer.reset();
+ restore_rendering_masks = TRUE;
+ gPipeline.pushRenderTypeMask();
+ gPipeline.pushRenderDebugFeatureMask();
+ gPipeline.setAllRenderTypes();
+ gPipeline.setAllRenderDebugFeatures();
+ }
+ else
+ {
+ restore_rendering_masks = FALSE;
+ }
+
pingMainloopTimeout("Main:MiscNativeWindowEvents");
if (gViewerWindow)
@@ -1350,10 +1373,11 @@ bool LLAppViewer::mainLoop()
LLFastTimer t2(FTM_SLEEP);
// yield some time to the os based on command line option
- if(mYieldTime >= 0)
+ S32 yield_time = gSavedSettings.getS32("YieldTime");
+ if(yield_time >= 0)
{
LLFastTimer t(FTM_YIELD);
- ms_sleep(mYieldTime);
+ ms_sleep(yield_time);
}
// yield cooperatively when not running as foreground window
@@ -1465,6 +1489,21 @@ bool LLAppViewer::mainLoop()
{
gFrameStalls++;
}
+
+ // Limit FPS
+ F32 max_fps = gSavedSettings.getF32("MaxFPS");
+ if (max_fps > F_APPROXIMATELY_ZERO)
+ {
+ // Sleep a while to limit frame rate.
+ F32 min_frame_time = 1.f / max_fps;
+ S32 milliseconds_to_sleep = llclamp((S32)((min_frame_time - frameTimer.getElapsedTimeF64()) * 1000.f), 0, 1000);
+ if (milliseconds_to_sleep > 0)
+ {
+ LLFastTimer t(FTM_YIELD);
+ ms_sleep(milliseconds_to_sleep);
+ }
+ }
+
frameTimer.reset();
resumeMainloopTimeout();
@@ -2576,8 +2615,6 @@ bool LLAppViewer::initConfiguration()
}
}
- mYieldTime = gSavedSettings.getS32("YieldTime");
-
// Read skin/branding settings if specified.
//if (! gDirUtilp->getSkinDir().empty() )
//{