summaryrefslogtreecommitdiff
path: root/indra/newview/llappviewer.cpp
diff options
context:
space:
mode:
authorNyx Linden <nyx@lindenlab.com>2013-01-24 16:22:49 -0500
committerNyx Linden <nyx@lindenlab.com>2013-01-24 16:22:49 -0500
commit11fe124ae96721b0d0f960732e8628fe0e2f84c4 (patch)
treea8525988388de004be72251c0d7783a61d314888 /indra/newview/llappviewer.cpp
parentcebde0a32b4a8163010d9cbf5e6b3036865ed943 (diff)
parentb40fad02de170b5da179cacc22f32f5f25ffd7cb (diff)
merging in viewer-beta.
Most of the merge was clean, a couple conflicts. Brought over a couple patches manually for llpolymesh.
Diffstat (limited to 'indra/newview/llappviewer.cpp')
-rw-r--r--indra/newview/llappviewer.cpp83
1 files changed, 69 insertions, 14 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 1000c0e1e8..03b11939a9 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -637,7 +637,6 @@ LLAppViewer::LLAppViewer() :
mForceGraphicsDetail(false),
mQuitRequested(false),
mLogoutRequestSent(false),
- mYieldTime(-1),
mMainloopTimeout(NULL),
mAgentRegionLastAlive(false),
mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
@@ -670,6 +669,15 @@ LLAppViewer::~LLAppViewer()
removeMarkerFile();
}
+class LLUITranslationBridge : public LLTranslationBridge
+{
+public:
+ virtual std::string getString(const std::string &xml_desc)
+ {
+ return LLTrans::getString(xml_desc);
+ }
+};
+
bool LLAppViewer::init()
{
//
@@ -681,6 +689,10 @@ bool LLAppViewer::init()
//
LLFastTimer::reset();
+ // initialize LLWearableType translation bridge.
+ // Memory will be cleaned up in ::cleanupClass()
+ LLWearableType::initClass(new LLUITranslationBridge());
+
// initialize SSE options
LLVector4a::initClass();
@@ -773,7 +785,7 @@ bool LLAppViewer::init()
LLUI::initClass(settings_map,
LLUIImageList::getInstance(),
ui_audio_callback,
- &LLUI::sGLScaleFactor);
+ &LLUI::getScaleFactor());
LL_INFOS("InitInfo") << "UI initialized." << LL_ENDL ;
// NOW LLUI::getLanguage() should work. gDirUtilp must know the language
@@ -1218,7 +1230,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);
@@ -1230,6 +1242,8 @@ bool LLAppViewer::mainLoop()
// point of posting.
LLSD newFrame;
+ BOOL restore_rendering_masks = FALSE;
+
//LLPrivateMemoryPoolTester::getInstance()->run(false) ;
//LLPrivateMemoryPoolTester::getInstance()->run(true) ;
//LLPrivateMemoryPoolTester::destroy() ;
@@ -1248,6 +1262,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)
@@ -1295,11 +1331,11 @@ bool LLAppViewer::mainLoop()
// Scan keyboard for movement keys. Command keys and typing
// are handled by windows callbacks. Don't do this until we're
// done initializing. JC
- if ((gHeadlessClient || gViewerWindow->getWindow()->getVisible())
+ if (gViewerWindow->getWindow()->getVisible()
&& gViewerWindow->getActive()
&& !gViewerWindow->getWindow()->getMinimized()
&& LLStartUp::getStartupState() == STATE_STARTED
- && (gHeadlessClient || !gViewerWindow->getShowProgress())
+ && !gViewerWindow->getShowProgress()
&& !gFocusMgr.focusLocked())
{
joystick->scanJoystick();
@@ -1345,8 +1381,7 @@ bool LLAppViewer::mainLoop()
}
// Render scene.
- // *TODO: Should we run display() even during gHeadlessClient? DK 2011-02-18
- if (!LLApp::isExiting() && !gHeadlessClient)
+ if (!LLApp::isExiting())
{
pingMainloopTimeout("Main:Display");
gGLActive = TRUE;
@@ -1367,10 +1402,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
@@ -1482,6 +1518,26 @@ bool LLAppViewer::mainLoop()
{
gFrameStalls++;
}
+
+ // Limit FPS
+ F32 max_fps = gSavedSettings.getF32("MaxFPS");
+ // Only limit FPS when we are actually rendering something. Otherwise
+ // logins, logouts and teleports take much longer to complete.
+ if (max_fps > F_APPROXIMATELY_ZERO &&
+ LLStartUp::getStartupState() == STATE_STARTED &&
+ !gTeleportDisplay &&
+ !logoutRequestSent())
+ {
+ // 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();
@@ -1762,6 +1818,8 @@ bool LLAppViewer::cleanup()
llinfos << "Cleaning up Objects" << llendflush;
LLViewerObject::cleanupVOClasses();
+
+ LLAvatarAppearance::cleanupClass();
LLPostProcess::cleanupClass();
@@ -1998,6 +2056,8 @@ bool LLAppViewer::cleanup()
llinfos << "Cleaning up LLProxy." << llendl;
LLProxy::cleanupClass();
+ LLWearableType::cleanupClass();
+
LLMainLoopRepeater::instance().stop();
//release all private memory pools.
@@ -2599,8 +2659,6 @@ bool LLAppViewer::initConfiguration()
}
}
- mYieldTime = gSavedSettings.getS32("YieldTime");
-
// Read skin/branding settings if specified.
//if (! gDirUtilp->getSkinDir().empty() )
//{
@@ -2991,9 +3049,6 @@ bool LLAppViewer::initWindow()
{
LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL;
- // store setting in a global for easy access and modification
- gHeadlessClient = gSavedSettings.getBOOL("HeadlessClient");
-
// always start windowed
BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");