From d85247e63e5ff0b488211b62429a4895b48dee27 Mon Sep 17 00:00:00 2001 From: Steven Bennetts Date: Thu, 17 Apr 2008 02:42:27 +0000 Subject: [PATCH] QAR-449 Viewer 1.20 RC 0 merge Branch_1-20-Viewer -r 84060 : 84432 -> release --- indra/llcommon/llapp.cpp | 24 +++++- indra/llcommon/llapp.h | 5 +- indra/llcommon/llversionviewer.h | 6 +- indra/llui/llcombobox.cpp | 6 +- indra/llui/llcombobox.h | 2 + indra/llui/llfloater.cpp | 8 +- indra/newview/app_settings/cmd_line.xml | 16 ++++ .../shaders/class1/environment/waterF.glsl | 2 +- indra/newview/featuretable.txt | 18 +++++ indra/newview/gpu_table.txt | 12 ++- indra/newview/llagent.cpp | 29 ++++--- indra/newview/llappviewer.cpp | 31 +++++++- indra/newview/llappviewer.h | 4 +- indra/newview/llappviewerlinux.cpp | 73 ++++++++++++------ indra/newview/llappviewerlinux.h | 1 + indra/newview/llappviewermacosx.cpp | 5 ++ indra/newview/llappviewermacosx.h | 4 +- indra/newview/llappviewerwin32.cpp | 5 ++ indra/newview/llappviewerwin32.h | 5 +- indra/newview/lldebugview.cpp | 5 +- indra/newview/llfloatercamera.cpp | 64 +++------------ indra/newview/llfloatercamera.h | 18 ++--- indra/newview/llfloaterlagmeter.cpp | 13 +--- indra/newview/llfloaterlagmeter.h | 9 +-- indra/newview/llfloaterpreference.cpp | 5 +- indra/newview/llmoveview.cpp | 60 ++------------ indra/newview/llmoveview.h | 20 ++--- indra/newview/llnetmap.cpp | 6 +- indra/newview/llspatialpartition.cpp | 4 + indra/newview/llstartup.cpp | 5 +- indra/newview/llstatusbar.cpp | 2 +- indra/newview/lltexturefetch.cpp | 47 +++++------ indra/newview/llvieweraudio.cpp | 1 - indra/newview/llvieweraudio.h | 6 ++ indra/newview/llviewermenu.cpp | 10 +-- indra/newview/llviewermessage.cpp | 4 +- indra/newview/llviewerwindow.cpp | 1 - indra/newview/llvovolume.cpp | 18 ++++- indra/newview/llworld.cpp | 6 +- indra/newview/llworldmap.cpp | 2 + indra/newview/res/ll_icon.png | Bin 0 -> 73845 bytes indra/newview/viewer_manifest.py | 4 +- 42 files changed, 312 insertions(+), 254 deletions(-) create mode 100644 indra/newview/res/ll_icon.png diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index 067dc4fc43..d034334aab 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -78,6 +78,7 @@ BOOL LLApp::sLogInSignal = FALSE; // static LLApp::EAppStatus LLApp::sStatus = LLApp::APP_STATUS_STOPPED; // Keeps track of application status LLAppErrorHandler LLApp::sErrorHandler = NULL; +LLAppErrorHandler LLApp::sSyncErrorHandler = NULL; BOOL LLApp::sErrorThreadRunning = FALSE; #if !LL_WINDOWS LLApp::child_map LLApp::sChildMap; @@ -275,6 +276,21 @@ void LLApp::setErrorHandler(LLAppErrorHandler handler) LLApp::sErrorHandler = handler; } + +void LLApp::setSyncErrorHandler(LLAppErrorHandler handler) +{ + LLApp::sSyncErrorHandler = handler; +} + +// static +void LLApp::runSyncErrorHandler() +{ + if (LLApp::sSyncErrorHandler) + { + LLApp::sSyncErrorHandler(); + } +} + // static void LLApp::runErrorHandler() { @@ -298,7 +314,13 @@ void LLApp::setStatus(EAppStatus status) // static void LLApp::setError() { - setStatus(APP_STATUS_ERROR); + if (!isError()) + { + // perform any needed synchronous error-handling + runSyncErrorHandler(); + // set app status to ERROR so that the LLErrorThread notices + setStatus(APP_STATUS_ERROR); + } } diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index c199601c20..c5a1546883 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -190,6 +190,7 @@ public: // Error handling methods // void setErrorHandler(LLAppErrorHandler handler); + void setSyncErrorHandler(LLAppErrorHandler handler); #if !LL_WINDOWS // @@ -246,13 +247,15 @@ protected: private: void setupErrorHandling(); // Do platform-specific error-handling setup (signals, structured exceptions) - static void runErrorHandler(); + static void runErrorHandler(); // run shortly after we detect an error, ran in the relatively robust context of the LLErrorThread - preferred. + static void runSyncErrorHandler(); // run IMMEDIATELY when we get an error, ran in the context of the faulting thread. // *NOTE: On Windows, we need a routine to reset the structured // exception handler when some evil driver has taken it over for // their own purposes typedef int(*signal_handler_func)(int signum); static LLAppErrorHandler sErrorHandler; + static LLAppErrorHandler sSyncErrorHandler; // Default application threads LLErrorThread* mThreadErrorp; // Waits for app to go to status ERROR, then runs the error callback diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 8e964d3891..c586acc7d9 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -33,9 +33,9 @@ #define LL_LLVERSIONVIEWER_H const S32 LL_VERSION_MAJOR = 1; -const S32 LL_VERSION_MINOR = 19; -const S32 LL_VERSION_PATCH = 1; -const S32 LL_VERSION_BUILD = 84396; +const S32 LL_VERSION_MINOR = 20; +const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index 62f2a6d319..0e8239cabd 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -1113,15 +1113,17 @@ LLFlyoutButton::LLFlyoutButton( mExpanderButtonImage = LLUI::getUIImage("flyout_btn_right.tga"); mActionButtonImageSelected = LLUI::getUIImage("flyout_btn_left_selected.tga"); mExpanderButtonImageSelected = LLUI::getUIImage("flyout_btn_right_selected.tga"); + mActionButtonImageDisabled = LLUI::getUIImage("flyout_btn_left_disabled.tga"); + mExpanderButtonImageDisabled = LLUI::getUIImage("flyout_btn_right_disabled.tga"); mActionButton->setImageSelected(mActionButtonImageSelected); mActionButton->setImageUnselected(mActionButtonImage); - mActionButton->setImageDisabled(LLPointer(NULL)); + mActionButton->setImageDisabled(mActionButtonImageDisabled); mActionButton->setImageDisabledSelected(LLPointer(NULL)); mButton->setImageSelected(mExpanderButtonImageSelected); mButton->setImageUnselected(mExpanderButtonImage); - mButton->setImageDisabled(LLPointer(NULL)); + mButton->setImageDisabled(mExpanderButtonImageDisabled); mButton->setImageDisabledSelected(LLPointer(NULL)); mButton->setRightHPad(6); diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h index c4db52cc97..09e8a0e0f4 100644 --- a/indra/llui/llcombobox.h +++ b/indra/llui/llcombobox.h @@ -225,6 +225,8 @@ protected: LLPointer mExpanderButtonImage; LLPointer mActionButtonImageSelected; LLPointer mExpanderButtonImageSelected; + LLPointer mActionButtonImageDisabled; + LLPointer mExpanderButtonImageDisabled; BOOL mToggleState; }; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 1eb3d169a5..4829d5b893 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -832,8 +832,8 @@ void LLFloater::setMinimized(BOOL minimize) for (S32 i = 0; i < 4; i++) { - mResizeBar[i]->setEnabled(FALSE); - mResizeHandle[i]->setEnabled(FALSE); + if (mResizeBar[i]) mResizeBar[i]->setEnabled(FALSE); + if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(FALSE); } mMinimized = TRUE; @@ -875,8 +875,8 @@ void LLFloater::setMinimized(BOOL minimize) for (S32 i = 0; i < 4; i++) { - mResizeBar[i]->setEnabled(isResizable()); - mResizeHandle[i]->setEnabled(isResizable()); + if (mResizeBar[i]) mResizeBar[i]->setEnabled(isResizable()); + if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(isResizable()); } mMinimized = FALSE; diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml index 01c590c1f3..43c3d85679 100644 --- a/indra/newview/app_settings/cmd_line.xml +++ b/indra/newview/app_settings/cmd_line.xml @@ -319,5 +319,21 @@ LoginPage + qa + + desc + Activated debugging menu in Advanced Settings. + map-to + QAMode + + + crashonstartup + + desc + Crashes on startup. For QA use. + map-to + CrashOnStartup + + diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl index 7b9e4ff828..bd9b30a075 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl @@ -86,7 +86,7 @@ void main() color.rgb = mix(mix(fogCol.rgb, fb.rgb, fogCol.a), refcol.rgb, df); color.rgb += spec * specular; - color.rgb = applyWaterFog(color);//atmosTransport(color.rgb); + //color.rgb = applyWaterFog(color);//atmosTransport(color.rgb); color.rgb = scaleSoftClip(color.rgb); color.a = spec * sunAngle2; diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 5f81027b10..032d9bfdc3 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -250,6 +250,9 @@ RenderMaxPartCount 1 2048 RenderTerrainDetail 1 0 RenderVBOEnable 1 1 +list SiS +UseOcclusion 0 0 + list Intel_830M RenderTerrainDetail 1 0 @@ -320,10 +323,25 @@ list Intel_Springdale RenderTerrainDetail 1 0 RenderVBOEnable 1 0 + list ATI_FireGL_5200 RenderVBOEnable 1 0 WindLightUseAtmosShaders 0 0 + +list ATI_Mobility_Radeon_7xxx +RenderVBOEnable 0 0 + +list ATI_Radeon_7xxx +RenderVBOEnable 0 0 + +list ATI_All-in-Wonder_Radeon +RenderVBOEnable 0 0 + +list ATI_All-in-Wonder_7500 +RenderVBOEnable 0 0 + + list ATI_Mobility_Radeon_9800 RenderAvatarCloth 0 0 VertexShaderEnable 0 0 diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index c75edc8565..842e1afaad 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -22,12 +22,16 @@ 3Dfx .*3Dfx.* 0 0 3Dlabs .*3Dlabs.* 0 0 ATI 3D-Analyze .*ATI.*3D-Analyze.* 0 0 -ATI All-in-Wonder PCI-E .*ATI.*All-in-Wonder.*PCI-E.* 1 1 +ATI All-in-Wonder 7500 .*ATI.*All-in-Wonder 75.* 0 1 +ATI All-in-Wonder 8500 .*ATI.*All-in-Wonder 85.* 0 1 +ATI All-in-Wonder 9200 .*ATI.*All-in-Wonder 92.* 0 1 ATI All-in-Wonder 9xxx .*ATI.*All-in-Wonder 9.* 1 1 ATI All-in-Wonder X600 .*ATI.*All-in-Wonder X6.* 1 1 ATI All-in-Wonder X800 .*ATI.*All-in-Wonder X8.* 2 1 ATI All-in-Wonder X1800 .*ATI.*All-in-Wonder X18.* 3 1 ATI All-in-Wonder X1900 .*ATI.*All-in-Wonder X19.* 3 1 +ATI All-in-Wonder PCI-E .*ATI.*All-in-Wonder.*PCI-E.* 1 1 +ATI All-in-Wonder Radeon .*ATI.*All-in-Wonder Radeon.* 0 1 ATI ASUS A9xxx .*ATI.*ASUS.*A9.* 1 1 ATI ASUS AH24xx .*ATI.*ASUS.*AH24.* 1 1 ATI ASUS AH26xx .*ATI.*ASUS.*AH26.* 3 1 @@ -52,6 +56,8 @@ ATI M52 .*ATI.*M52.* 1 1 ATI M54 .*ATI.*M54.* 1 1 ATI M56 .*ATI.*M56.* 1 1 ATI M76 .*ATI.*M76.* 3 1 +ATI Mobility Radeon 7xxx .*ATI.*Mobility.*Radeon 7.* 0 1 +ATI Mobility Radeon 8xxx .*ATI.*Mobility.*Radeon 8.* 0 1 ATI Mobility Radeon 9800 .*ATI.*Mobility.*98.* 1 1 ATI Mobility Radeon 9700 .*ATI.*Mobility.*97.* 1 1 ATI Mobility Radeon 9600 .*ATI.*Mobility.*96.* 0 1 @@ -70,8 +76,8 @@ ATI Radeon HD 3400 .*ATI.*Radeon HD 34.* 1 1 ATI Radeon HD 3600 .*ATI.*Radeon HD 36.* 3 1 ATI Radeon HD 3800 .*ATI.*Radeon HD 38.* 3 1 ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0 -ATI Radeon 7000 .*ATI.*Radeon 7.* 0 1 -ATI Radeon 8000 .*ATI.*Radeon 8.* 0 1 +ATI Radeon 7xxx .*ATI.*Radeon 7.* 0 1 +ATI Radeon 8xxx .*ATI.*Radeon 8.* 0 1 ATI Radeon 9000 .*ATI.*Radeon 90.* 0 1 ATI Radeon 9100 .*ATI.*Radeon 91.* 0 1 ATI Radeon 9200 .*ATI.*Radeon 92.* 0 1 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index dcea6b2957..f084234c9f 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3040,24 +3040,21 @@ void LLAgent::updateCamera() } // Update UI with our camera inputs - if (gFloaterCamera) - { - gFloaterCamera->mRotate->setToggleState( - mOrbitRightKey > 0.f, // left - mOrbitUpKey > 0.f, // top - mOrbitLeftKey > 0.f, // right - mOrbitDownKey > 0.f); // bottom + LLFloaterCamera::getInstance()->mRotate->setToggleState( + mOrbitRightKey > 0.f, // left + mOrbitUpKey > 0.f, // top + mOrbitLeftKey > 0.f, // right + mOrbitDownKey > 0.f); // bottom - gFloaterCamera->mZoom->setToggleState( - mOrbitInKey > 0.f, // top - mOrbitOutKey > 0.f); // bottom + LLFloaterCamera::getInstance()->mZoom->setToggleState( + mOrbitInKey > 0.f, // top + mOrbitOutKey > 0.f); // bottom - gFloaterCamera->mTrack->setToggleState( - mPanLeftKey > 0.f, // left - mPanUpKey > 0.f, // top - mPanRightKey > 0.f, // right - mPanDownKey > 0.f); // bottom - } + LLFloaterCamera::getInstance()->mTrack->setToggleState( + mPanLeftKey > 0.f, // left + mPanUpKey > 0.f, // top + mPanRightKey > 0.f, // right + mPanDownKey > 0.f); // bottom // Handle camera movement based on keyboard. const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 3d10eda7fd..b360d9a8e5 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -152,6 +152,7 @@ #include "llvieweraudio.h" #include "llimview.h" #include "llviewerthrottle.h" +#include "llparcel.h" // #include "llinventoryview.h" @@ -1563,6 +1564,12 @@ bool LLAppViewer::initConfiguration() llinfos << "Command line usage:\n" << clp << llendl; } + // If we have specified crash on startup, might as well do it now. + if(clp.hasOption("crashonstartup")) + { + LLAppViewer::instance()->forceErrorLLError(); + } + // If the user has specified a alternate settings file name. // Load it now. if(clp.hasOption("settings")) @@ -2136,6 +2143,13 @@ void LLAppViewer::writeSystemInfo() llinfos << "OS info: " << getOSInfo() << llendl; } +void LLAppViewer::handleSyncViewerCrash() +{ + LLAppViewer* pApp = LLAppViewer::instance(); + // Call to pure virtual, handled by platform specific llappviewer instance. + pApp->handleSyncCrashTrace(); +} + void LLAppViewer::handleViewerCrash() { LLAppViewer* pApp = LLAppViewer::instance(); @@ -2161,6 +2175,17 @@ void LLAppViewer::handleViewerCrash() gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; + + LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); + if ( parcel && parcel->getMusicURL()[0]) + { + gDebugInfo["ParcelMusicURL"] = parcel->getMusicURL(); + } + if ( parcel && parcel->getMediaURL()[0]) + { + gDebugInfo["ParcelMediaURL"] = parcel->getMediaURL(); + } + gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile"); gDebugInfo["CAFilename"] = gDirUtilp->getCAFile(); @@ -2236,7 +2261,7 @@ void LLAppViewer::handleViewerCrash() pApp->removeMarkerFile(false); } - // Call to pure virtual, handled by platform specifc llappviewer instance. + // Call to pure virtual, handled by platform specific llappviewer instance. pApp->handleCrashReporting(); return; @@ -2806,6 +2831,7 @@ void LLAppViewer::badNetworkHandler() // Generates the minidump. LLWinDebug::handleException(NULL); #endif + LLAppViewer::handleSyncViewerCrash(); LLAppViewer::handleViewerCrash(); std::ostringstream message; @@ -2839,7 +2865,8 @@ void LLAppViewer::saveFinalSnapshot() LLString snap_filename = gDirUtilp->getLindenUserDir(); snap_filename += gDirUtilp->getDirDelimiter(); snap_filename += SCREEN_LAST_FILENAME; - gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidth(), gViewerWindow->getWindowHeight(), FALSE, TRUE); + // use full pixel dimensions of viewer window (not post-scale dimensions) + gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, TRUE); mSavedFinalSnapshot = TRUE; } } diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index d687481002..2d050c3d94 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -80,7 +80,9 @@ public: S32 getCrashBehavior() const { return mCrashBehavior; } void setCrashBehavior(S32 cb); virtual void handleCrashReporting() = 0; // What to do with crash report? - static void handleViewerCrash(); // Hey! The viewer crashed. Do this. + virtual void handleSyncCrashTrace() = 0; // any low-level crash-prep that has to happen in the context of the crashing thread before the crash report is delivered. + static void handleViewerCrash(); // Hey! The viewer crashed. Do this, soon. + static void handleSyncViewerCrash(); // Hey! The viewer crashed. Do this right NOW in the context of the crashing thread. // Thread accessors static LLTextureCache* getTextureCache() { return sTextureCache; } diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp index c36dd2955e..d7a8e66a4b 100644 --- a/indra/newview/llappviewerlinux.cpp +++ b/indra/newview/llappviewerlinux.cpp @@ -39,27 +39,41 @@ #include "llviewernetwork.h" #include "llmd5.h" - #if LL_LINUX - # include // RTLD_LAZY - # include // backtrace - glibc only - # ifndef LL_ELFBIN - #define LL_ELFBIN 1 - # endif // LL_ELFBIN - # if LL_ELFBIN - # include // for symbol demangling - # include "ELFIO.h" // for better backtraces - # endif // LL_ELFBIN - #elif LL_SOLARIS - # include - # include - # include - # include - #endif +#include + +#if LL_LINUX +# include // RTLD_LAZY +# include // backtrace - glibc only +# ifndef LL_ELFBIN +# define LL_ELFBIN 1 +# endif // LL_ELFBIN +# if LL_ELFBIN +# include // for symbol demangling +# include "ELFIO.h" // for better backtraces +# endif // LL_ELFBIN +#elif LL_SOLARIS +# include +# include +# include +# include +#endif namespace { int gArgC = 0; char **gArgV = NULL; + void (*gOldTerminateHandler)() = NULL; +} + +static void exceptionTerminateHandler() +{ + // reinstall default terminate() handler in case we re-terminate. + if (gOldTerminateHandler) std::set_terminate(gOldTerminateHandler); + // treat this like a regular viewer crash, with nice stacktrace etc. + LLAppViewer::handleSyncViewerCrash(); + LLAppViewer::handleViewerCrash(); + // we've probably been killed-off before now, but... + gOldTerminateHandler(); // call old terminate() handler } int main( int argc, char **argv ) @@ -75,7 +89,11 @@ int main( int argc, char **argv ) LLAppViewer* viewer_app_ptr = new LLAppViewerLinux(); + // install unexpected exception handler + gOldTerminateHandler = std::set_terminate(exceptionTerminateHandler); + // install crash handlers viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); + viewer_app_ptr->setSyncErrorHandler(LLAppViewer::handleSyncViewerCrash); bool ok = viewer_app_ptr->init(); if(!ok) @@ -301,19 +319,22 @@ bool LLAppViewerLinux::init() return LLAppViewer::init(); } +void LLAppViewerLinux::handleSyncCrashTrace() +{ + // This backtrace writes into stack_trace.log +# if LL_ELFBIN + do_elfio_glibc_backtrace(); // more useful backtrace +# else + do_basic_glibc_backtrace(); // only slightly useful backtrace +# endif // LL_ELFBIN +} + void LLAppViewerLinux::handleCrashReporting() { - // Always generate the report, have the logger do the asking, and // don't wait for the logger before exiting (-> total cleanup). if (CRASH_BEHAVIOR_NEVER_SEND != LLAppViewer::instance()->getCrashBehavior()) { - // This backtrace writes into stack_trace.log -# if LL_ELFBIN - do_elfio_glibc_backtrace(); // more useful backtrace -# else - do_basic_glibc_backtrace(); // only slightly useful backtrace -# endif // LL_ELFBIN // launch the actual crash logger char* ask_dialog = "-dialog"; if (CRASH_BEHAVIOR_ASK != LLAppViewer::instance()->getCrashBehavior()) @@ -329,6 +350,7 @@ void LLAppViewerLinux::handleCrashReporting() (char*)"-name", (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(), NULL}; + fflush(NULL); pid_t pid = fork(); if (pid == 0) { // child @@ -352,9 +374,10 @@ void LLAppViewerLinux::handleCrashReporting() } } } - // Sometimes signals don't seem to quit the viewer. + // Sometimes signals don't seem to quit the viewer. Also, we may + // have been called explicitly instead of from a signal handler. // Make sure we exit so as to not totally confuse the user. - exit(1); + _exit(1); // avoid atexit(), else we may re-crash in dtors. } bool LLAppViewerLinux::beingDebugged() diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h index ce91b6b8b6..300cb10e2d 100644 --- a/indra/newview/llappviewerlinux.h +++ b/indra/newview/llappviewerlinux.h @@ -54,6 +54,7 @@ protected: virtual bool beingDebugged(); virtual void handleCrashReporting(); + virtual void handleSyncCrashTrace(); virtual bool initLogging(); virtual bool initParseCommandLine(LLCommandLineParser& clp); diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index 1e4c08a1c1..a748545a3b 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -160,6 +160,11 @@ bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp) return true; } +void LLAppViewerMacOSX::handleSyncCrashTrace() +{ + // do nothing +} + void LLAppViewerMacOSX::handleCrashReporting() { // Macintosh diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h index cc4a7f5eb5..644c2e0551 100644 --- a/indra/newview/llappviewermacosx.h +++ b/indra/newview/llappviewermacosx.h @@ -50,8 +50,10 @@ public: protected: virtual void handleCrashReporting(); + virtual void handleSyncCrashTrace(); + std::string generateSerialNumber(); - virtual bool initParseCommandLine(LLCommandLineParser& clp); + virtual bool initParseCommandLine(LLCommandLineParser& clp); }; #endif // LL_LLAPPVIEWERMACOSX_H diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 143c9cece4..3770fe2a33 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -388,6 +388,11 @@ bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp) return clp.parseCommandLineString(mCmdLine); } +void LLAppViewerWin32::handleSyncCrashTrace() +{ + // do nothing +} + void LLAppViewerWin32::handleCrashReporting() { // Windows only behaivor. Spawn win crash reporter. diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h index 66653c48f5..d8a79a8b7a 100644 --- a/indra/newview/llappviewerwin32.h +++ b/indra/newview/llappviewerwin32.h @@ -51,9 +51,10 @@ public: protected: virtual void initConsole(); // Initialize OS level debugging console. virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware. - virtual bool initParseCommandLine(LLCommandLineParser& clp); + virtual bool initParseCommandLine(LLCommandLineParser& clp); - virtual void handleCrashReporting(); + virtual void handleCrashReporting(); + virtual void handleSyncCrashTrace(); std::string generateSerialNumber(); diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index 4aeb1d74bf..dc160a29ac 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -108,9 +108,8 @@ LLDebugView::LLDebugView(const std::string& name, const LLRect &rect) mFloaterStatsp->setFollowsTop(); mFloaterStatsp->setFollowsRight(); - // Default to off - mFloaterStatsp->setVisible(FALSE); - addChild(mFloaterStatsp); + // since this is a floater, it belongs to LLFloaterView + //addChild(mFloaterStatsp); const S32 VELOCITY_LEFT = 10; // 370; const S32 VELOCITY_WIDTH = 500; diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 6bc14b331b..ab85a8c3c1 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -43,21 +43,17 @@ // Constants const F32 CAMERA_BUTTON_DELAY = 0.0f; -// Globals -LLFloaterCamera* gFloaterCamera = NULL; - - // // Member functions // -LLFloaterCamera::LLFloaterCamera(const std::string& name) -: LLFloater(name) // uses "FloaterCameraRect3" +LLFloaterCamera::LLFloaterCamera(const LLSD& val) +: LLFloater("camera floater") // uses "FloaterCameraRect3" { setIsChrome(TRUE); - // For now, only used for size and tooltip strings - LLUICtrlFactory::getInstance()->buildFloater(this, "floater_camera.xml"); + const BOOL DONT_OPEN = FALSE; + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_camera.xml", NULL, DONT_OPEN); S32 top = getRect().getHeight(); S32 bottom = 0; @@ -103,11 +99,12 @@ LLFloaterCamera::LLFloaterCamera(const std::string& name) addChild(mTrack); } - -LLFloaterCamera::~LLFloaterCamera() +// virtual +void LLFloaterCamera::onOpen() { - // children all deleted by LLView destructor - gFloaterCamera = NULL; + LLFloater::onOpen(); + + gSavedSettings.setBOOL("ShowCameraControls", TRUE); } // virtual @@ -119,45 +116,4 @@ void LLFloaterCamera::onClose(bool app_quitting) { gSavedSettings.setBOOL("ShowCameraControls", FALSE); } -} - -// -// Static member functions -// - -// static -void LLFloaterCamera::show(void*) -{ - if(!gFloaterCamera) - { - gFloaterCamera = new LLFloaterCamera("camera floater"); - } - gFloaterCamera->open(); /* Flawfinder: ignore */ - gSavedSettings.setBOOL("ShowCameraControls", TRUE); -} - -// static -void LLFloaterCamera::toggle(void*) -{ - if (gFloaterCamera) - { - gFloaterCamera->close(); - } - else - { - show(NULL); - } -} - -// static -BOOL LLFloaterCamera::visible(void*) -{ - if (gFloaterCamera) - { - return gFloaterCamera->getVisible(); - } - else - { - return FALSE; - } -} +} \ No newline at end of file diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index fac4d2f191..6a6105f7f1 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -39,24 +39,22 @@ class LLJoystickCameraZoom; class LLJoystickCameraTrack; class LLFloaterCamera - : public LLFloater + : public LLFloater, + public LLFloaterSingleton { -public: - LLFloaterCamera(const std::string& name); - ~LLFloaterCamera(); + friend class LLUISingleton >; +private: + LLFloaterCamera(const LLSD& val); + ~LLFloaterCamera() {}; + + /*virtual*/ void onOpen(); /*virtual*/ void onClose(bool app_quitting); - static void show(void*); - static void toggle(void*); - static BOOL visible(void*); - public: LLJoystickCameraRotate* mRotate; LLJoystickCameraZoom* mZoom; LLJoystickCameraTrack* mTrack; }; -extern LLFloaterCamera *gFloaterCamera; - #endif diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp index 1213d436cc..b70ae9a227 100644 --- a/indra/newview/llfloaterlagmeter.cpp +++ b/indra/newview/llfloaterlagmeter.cpp @@ -49,9 +49,7 @@ const LLString LAG_CRITICAL_IMAGE_NAME = "lag_status_critical.tga"; const LLString LAG_WARNING_IMAGE_NAME = "lag_status_warning.tga"; const LLString LAG_GOOD_IMAGE_NAME = "lag_status_good.tga"; -LLFloaterLagMeter * LLFloaterLagMeter::sInstance = NULL; - -LLFloaterLagMeter::LLFloaterLagMeter() +LLFloaterLagMeter::LLFloaterLagMeter(const LLSD& key) : LLFloater("floater_lagmeter") { LLUICtrlFactory::getInstance()->buildFloater(this, "floater_lagmeter.xml"); @@ -127,8 +125,6 @@ LLFloaterLagMeter::LLFloaterLagMeter() LLFloaterLagMeter::~LLFloaterLagMeter() { - sInstance = NULL; - // save shrunk status for next time gSavedSettings.setBOOL("LagMeterShrunk", mShrunk); // expand so we save the large window rectangle @@ -147,13 +143,6 @@ void LLFloaterLagMeter::draw() LLFloater::draw(); } -//static -void LLFloaterLagMeter::show(void *data) -{ - if(!sInstance) sInstance = new LLFloaterLagMeter(); - sInstance->open(); -} - void LLFloaterLagMeter::determineClient() { F32 client_frame_time = LLViewerStats::getInstance()->mFPSStat.getMeanDuration(); diff --git a/indra/newview/llfloaterlagmeter.h b/indra/newview/llfloaterlagmeter.h index 83603826c4..6a034c840c 100644 --- a/indra/newview/llfloaterlagmeter.h +++ b/indra/newview/llfloaterlagmeter.h @@ -34,14 +34,15 @@ #include "llfloater.h" -class LLFloaterLagMeter : public LLFloater +class LLFloaterLagMeter : public LLFloater, public LLFloaterSingleton { + friend class LLUISingleton >; + public: /*virtual*/ void draw(); - static void show(void*); private: - LLFloaterLagMeter(); + LLFloaterLagMeter(const LLSD& key); /*virtual*/ ~LLFloaterLagMeter(); void determineClient(); @@ -75,8 +76,6 @@ private: LLTextBox * mServerCause; LLString::format_map_t mStringArgs; - - static LLFloaterLagMeter * sInstance; }; #endif diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 1ad58f2706..e66d545409 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -192,7 +192,10 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainer* tab_container, LLButton * def mTabContainer->addTabPanel(mMsgPanel, mMsgPanel->getLabel(), FALSE, onTabChanged, mTabContainer); mMsgPanel->setDefaultBtn(default_btn); - mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab")); + if (!mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab"))) + { + mTabContainer->selectFirstTab(); + } } LLPreferenceCore::~LLPreferenceCore() diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index a73da0940e..4819d5bd10 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -52,23 +52,18 @@ const F32 MOVE_BUTTON_DELAY = 0.0f; const F32 YAW_NUDGE_RATE = 0.05f; // fraction of normal speed const F32 NUDGE_TIME = 0.25f; // in seconds -// -// Global statics -// - -LLFloaterMove* LLFloaterMove::sInstance = NULL; - - // // Member functions // // protected -LLFloaterMove::LLFloaterMove() +LLFloaterMove::LLFloaterMove(const LLSD& key) : LLFloater("move floater") { setIsChrome(TRUE); - LLUICtrlFactory::getInstance()->buildFloater(this,"floater_moveview.xml"); + + const BOOL DONT_OPEN = FALSE; + LLUICtrlFactory::getInstance()->buildFloater(this,"floater_moveview.xml", NULL, DONT_OPEN); mForwardButton = getChild("forward btn"); mForwardButton->setHeldDownDelay(MOVE_BUTTON_DELAY); @@ -99,15 +94,6 @@ LLFloaterMove::LLFloaterMove() childSetAction("move down btn",moveDown,NULL); mMoveDownButton->setHeldDownDelay(MOVE_BUTTON_DELAY); mMoveDownButton->setHeldDownCallback( moveDown ); - - sInstance = this; -} - -// protected -LLFloaterMove::~LLFloaterMove() -{ - // children all deleted by LLView destructor - sInstance = NULL; } // virtual @@ -125,42 +111,12 @@ void LLFloaterMove::onClose(bool app_quitting) // Static member functions // -// static -void LLFloaterMove::show(void*) +void LLFloaterMove::onOpen() { - if (sInstance) - { - sInstance->open(); /*Flawfinder: ignore*/ - } - else - { - LLFloaterMove* f = new LLFloaterMove(); - f->open(); /*Flawfinder: ignore*/ - } - + LLFloater::onOpen(); gSavedSettings.setBOOL("ShowMovementControls", TRUE); } -// static -void LLFloaterMove::toggle(void*) -{ - if (sInstance) - { - sInstance->close(); - } - else - { - show(NULL); - } -} - -// static -BOOL LLFloaterMove::visible(void*) -{ - return (sInstance != NULL); -} - - // protected static F32 LLFloaterMove::getYawRate( F32 time ) { @@ -178,14 +134,14 @@ F32 LLFloaterMove::getYawRate( F32 time ) // protected static void LLFloaterMove::turnLeft(void *) { - F32 time = sInstance->mTurnLeftButton->getHeldDownTime(); + F32 time = getInstance()->mTurnLeftButton->getHeldDownTime(); gAgent.moveYaw( getYawRate( time ) ); } // protected static void LLFloaterMove::turnRight(void *) { - F32 time = sInstance->mTurnRightButton->getHeldDownTime(); + F32 time = getInstance()->mTurnRightButton->getHeldDownTime(); gAgent.moveYaw( -getYawRate( time ) ); } diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index 4d55206194..17005e0ded 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -43,24 +43,21 @@ class LLJoystickAgentSlide; // Classes // class LLFloaterMove -: public LLFloater +: public LLFloater, + public LLFloaterSingleton { + friend class LLUISingleton >; + protected: - LLFloaterMove(); - ~LLFloaterMove(); + LLFloaterMove(const LLSD& key); + ~LLFloaterMove() {} public: + /*virtual*/ void onOpen(); /*virtual*/ void onClose(bool app_quitting); static F32 getYawRate(F32 time); - static void show(void*); - static void toggle(void*); - static BOOL visible(void*); - - // This function is used for agent-driven button highlighting - static LLFloaterMove* getInstance() { return sInstance; } - protected: static void turnLeftNudge(void* userdata); static void turnLeft(void* userdata); @@ -80,9 +77,6 @@ public: LLButton* mTurnRightButton; LLButton* mMoveUpButton; LLButton* mMoveDownButton; - -protected: - static LLFloaterMove* sInstance; }; diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 1550751e7f..1b2474728f 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -436,10 +436,12 @@ void LLNetMap::draw() } // Draw dot for self avatar position - //drawTracking( gAgent.getPosGlobalFromAgent(gAgent.getFrameAgent().getCenter()), gSelfMapColor ); pos_global = gAgent.getPositionGlobal(); pos_map = globalPosToView(pos_global); - LLWorldMapView::sAvatarYouSmallImage->draw(llround(pos_map.mV[VX]) - 4, llround(pos_map.mV[VY]) - 4); + LLUIImagePtr you = LLWorldMapView::sAvatarYouSmallImage; + you->draw( + llround(pos_map.mV[VX]) - you->getWidth()/2, + llround(pos_map.mV[VY]) - you->getHeight()/2); // Draw frustum F32 meters_to_pixels = gMiniMapScale/ LLWorld::getInstance()->getRegionWidthInMeters(); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 1e715a5bf2..331505166e 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2650,6 +2650,10 @@ void LLCullResult::clear() for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++) { + for (U32 j = 0; j < mRenderMapSize[i]; j++) + { + mRenderMap[i][j] = 0; + } mRenderMapSize[i] = 0; } } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index fb692d257b..f918403320 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -45,7 +45,6 @@ #include "audioengine_fmod.h" #endif -#include "audiosettings.h" #include "llares.h" #include "llcachename.h" #include "llviewercontrol.h" @@ -1585,11 +1584,11 @@ BOOL idle_startup() if (gSavedSettings.getBOOL("ShowCameraControls")) { - LLFloaterCamera::show(NULL); + LLFloaterCamera::showInstance(); } if (gSavedSettings.getBOOL("ShowMovementControls")) { - LLFloaterMove::show(NULL); + LLFloaterMove::showInstance(); } if (gSavedSettings.getBOOL("ShowActiveSpeakers")) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 3546d6c888..5d6ab669f4 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -906,7 +906,7 @@ void LLStatusBar::onClickSearch(void* data) // static void LLStatusBar::onClickStatGraph(void* data) { - LLFloaterLagMeter::show(data); + LLFloaterLagMeter::showInstance(); } BOOL can_afford_transaction(S32 cost) diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 669ea3167e..bcb2185687 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -497,7 +497,7 @@ void LLTextureFetchWorker::setDesiredDiscard(S32 discard, S32 size) mDesiredDiscard = discard; mDesiredSize = size; } - else if (size > mDesiredSize || size == 0) + else if (size > mDesiredSize) { mDesiredSize = size; prioritize = true; @@ -594,8 +594,7 @@ bool LLTextureFetchWorker::doWork(S32 param) U32 cache_priority = mWorkPriority; S32 offset = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0; S32 size = mDesiredSize - offset; - - if(mDesiredSize != 0 && size <= 0) + if (size <= 0) { mState = CACHE_POST; return false; @@ -640,12 +639,13 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mState == CACHE_POST) { + mDesiredSize = llmax(mDesiredSize, FIRST_PACKET_SIZE); mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0; // Successfully loaded if ((mCachedSize >= mDesiredSize) || mHaveAllData) { // we have enough data, decode it - llassert_always(mFormattedImage.isNull() || mFormattedImage->getDataSize() > 0); + llassert_always(mFormattedImage->getDataSize() > 0); mState = DECODE_IMAGE; // fall through } @@ -859,7 +859,7 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mState == DECODE_IMAGE) { - llassert_always(mFormattedImage.isNull() || mFormattedImage->getDataSize() > 0); + llassert_always(mFormattedImage->getDataSize() > 0); setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it mRawImage = NULL; mAuxImage = NULL; @@ -1311,13 +1311,13 @@ LLTextureFetch::~LLTextureFetch() } bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 priority, - S32 w, S32 h, S32 c, S32 discard, bool needs_aux) + S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux) { - return createRequest(LLString::null, id, host, priority, w, h, c, discard, needs_aux); + return createRequest(LLString::null, id, host, priority, w, h, c, desired_discard, needs_aux); } bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, const LLHost& host, F32 priority, - S32 w, S32 h, S32 c, S32 discard, bool needs_aux) + S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux) { if (mDebugPause) { @@ -1341,7 +1341,7 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c } S32 desired_size; - if ((discard == 0) && worker && worker->mFileSize) + if ((desired_discard == 0) && worker && worker->mFileSize) { // if we want the entire image, and we know its size, then get it all // (calcDataSizeJ2C() below makes assumptions about how the image @@ -1349,24 +1349,25 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c // we really do get it.) desired_size = worker->mFileSize; } - //else if ((discard == 0) && worker == NULL) - //{ - // // if we want the entire image, but we don't know its size, then send - // // a sentinel value of zero to request the entire contents of the cache. - // // patch supplied by resident Sheet Spotter for VWR-2404 - // desired_size = 0; - //} else if (w*h*c > 0) { // If the requester knows the dimentions of the image, // this will calculate how much data we need without having to parse the header - desired_size = LLImageJ2C::calcDataSizeJ2C(w, h, c, discard); + desired_size = LLImageJ2C::calcDataSizeJ2C(w, h, c, desired_discard); } else { - desired_size = FIRST_PACKET_SIZE; - discard = MAX_DISCARD_LEVEL; + if (desired_discard == 0) + { + // If we want all of the image, request the maximum possible data + desired_size = MAX_IMAGE_DATA_SIZE; + } + else + { + desired_size = FIRST_PACKET_SIZE; + desired_discard = MAX_DISCARD_LEVEL; + } } if (worker) { @@ -1376,7 +1377,7 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c } worker->lockWorkData(); worker->setImagePriority(priority); - worker->setDesiredDiscard(discard, desired_size); + worker->setDesiredDiscard(desired_discard, desired_size); worker->unlockWorkData(); if (!worker->haveWork()) { @@ -1389,18 +1390,18 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c if (filename.empty()) { // do remote fetch - worker = new LLTextureFetchWorker(this, id, host, priority, discard, desired_size); + worker = new LLTextureFetchWorker(this, id, host, priority, desired_discard, desired_size); } else { // do local file fetch - worker = new LLTextureFetchLocalFileWorker(this, filename, id, host, priority, discard, desired_size); + worker = new LLTextureFetchLocalFileWorker(this, filename, id, host, priority, desired_discard, desired_size); } mRequestMap[id] = worker; } worker->mActiveCount++; worker->mNeedsAux = needs_aux; -// llinfos << "REQUESTED: " << id << " Discard: " << discard << llendl; +// llinfos << "REQUESTED: " << id << " Discard: " << desired_discard << llendl; return true; } diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 5703a8fdbc..cefbed1353 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -32,7 +32,6 @@ #include "llviewerprecompiledheaders.h" #include "audioengine.h" -#include "audiosettings.h" #include "llagent.h" #include "llappviewer.h" #include "llvieweraudio.h" diff --git a/indra/newview/llvieweraudio.h b/indra/newview/llvieweraudio.h index 64090d24e6..0b0fafecc5 100644 --- a/indra/newview/llvieweraudio.h +++ b/indra/newview/llvieweraudio.h @@ -32,6 +32,12 @@ #ifndef LL_VIEWERAUDIO_H #define LL_VIEWERAUDIO_H +// comment out to turn off wind +#define kAUDIO_ENABLE_WIND +//#define kAUDIO_ENABLE_WATER 1 // comment out to turn off water +#define kAUDIO_NUM_BUFFERS 30 +#define kAUDIO_NUM_SOURCES 30 + void init_audio(); void audio_update_volume(bool force_update = true); void audio_update_listener(); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index ec52118098..ac361fa80b 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5360,11 +5360,11 @@ class LLShowFloater : public view_listener_t } else if (floater_name == "camera controls") { - LLFloaterCamera::toggle(NULL); + LLFloaterCamera::toggleInstance(); } else if (floater_name == "movement controls") { - LLFloaterMove::show(NULL); + LLFloaterMove::toggleInstance(); } else if (floater_name == "world map") { @@ -5435,7 +5435,7 @@ class LLShowFloater : public view_listener_t } else if (floater_name == "lag meter") { - LLFloaterLagMeter::show(NULL); + LLFloaterLagMeter::showInstance(); } else if (floater_name == "bug reporter") { @@ -5488,11 +5488,11 @@ class LLFloaterVisible : public view_listener_t } else if (floater_name == "camera controls") { - new_value = LLFloaterCamera::visible(NULL); + new_value = LLFloaterCamera::instanceVisible(); } else if (floater_name == "movement controls") { - new_value = LLFloaterMove::visible(NULL); + new_value = LLFloaterMove::instanceVisible(); } else if (floater_name == "stat bar") { diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 439063e439..99f1af61e5 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -36,7 +36,6 @@ #include #include "audioengine.h" -#include "audiosettings.h" #include "indra_constants.h" #include "lscript_byteformat.h" #include "mean_collision_data.h" @@ -68,6 +67,7 @@ #include "llagent.h" #include "llcallingcard.h" #include "llconsole.h" +#include "llvieweraudio.h" #include "llviewercontrol.h" #include "lldrawpool.h" #include "llfirstuse.h" @@ -4069,7 +4069,7 @@ void process_alert_core(const std::string& message, BOOL modal) LLString snap_filename = gDirUtilp->getLindenUserDir(); snap_filename += gDirUtilp->getDirDelimiter(); snap_filename += SCREEN_HOME_FILENAME; - gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidth(), gViewerWindow->getWindowHeight(), FALSE, FALSE); + gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, FALSE); } const std::string ALERT_PREFIX("ALERT: "); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 696a2ad3c6..52b10a2fd9 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1992,7 +1992,6 @@ LLViewerWindow::~LLViewerWindow() // Automatically deleted as children of mRootView. Fix the globals. gFloaterTools = NULL; gStatusBar = NULL; - gFloaterCamera = NULL; gIMMgr = NULL; gHoverView = NULL; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 2b8cf93b2d..ce4a660682 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -741,7 +741,23 @@ void LLVOVolume::sculpt() S32 current_discard = getVolume()->getSculptLevel(); - llassert_always(current_discard >= -2 && current_discard <= max_discard); + if(current_discard < -2) + { + llwarns << "WARNING!!: Current discard of sculpty at " << current_discard + << " is less than -2." << llendl; + + // corrupted volume... don't update the sculpty + return; + } + else if (current_discard > max_discard) + { + llwarns << "WARNING!!: Current discard of sculpty at " << current_discard + << " is more than than allowed max of " << max_discard << llendl; + + // corrupted volume... don't update the sculpty + return; + } + if (current_discard == discard_level) // no work to do here return; diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index ca947bed97..e45b929b6f 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -118,7 +118,11 @@ LLWorld::LLWorld() void LLWorld::destroyClass() { gObjectList.destroy(); - for_each(mRegionList.begin(), mRegionList.end(), DeletePointer()); + for(region_list_t::iterator region_it = mRegionList.begin(); region_it != mRegionList.end(); ) + { + LLViewerRegion* region_to_delete = *region_it++; + removeRegion(region_to_delete->getHost()); + } LLViewerPartSim::getInstance()->destroyClass(); } diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 6c5118ed9d..1bd08c0430 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -343,6 +343,8 @@ void LLWorldMap::sendItemRequest(U32 type, U64 handle) // public void LLWorldMap::sendMapLayerRequest() { + if (!gAgent.getRegion()) return; + LLSD body; body["Flags"] = mCurrentMap; std::string url = gAgent.getRegion()->getCapability( diff --git a/indra/newview/res/ll_icon.png b/indra/newview/res/ll_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..414b703111a6b0c1513e824f40688f8e79836228 GIT binary patch literal 73845 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

|J+Nu*)r_eFnh(9v__7uRW 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 literal 0 HcmV?d00001 diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index edb7002584..b147b471fa 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -116,7 +116,7 @@ class ViewerManifest(LLManifest): if self.default_channel(): # beta grid viewer channel_flags = '--settings settings_beta.xml' - grid_flags = "--helperuri http://preview-%(grid)s.secondlife.com/helpers/ --loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']} + grid_flags = "--grid %(grid)s --helperuri http://preview-%(grid)s.secondlife.com/helpers/" % {'grid':self.args['grid']} if not self.default_channel(): # some channel on some grid @@ -438,7 +438,7 @@ class LinuxManifest(ViewerManifest): def construct(self): super(LinuxManifest, self).construct() self.path("licenses-linux.txt","licenses.txt") - #self.path("res/ll_icon.ico","secondlife.ico") + self.path("res/ll_icon.png","secondlife_icon.png") if self.prefix("linux_tools", ""): self.path("client-readme.txt","README-linux.txt") self.path("client-readme-voice.txt","README-linux-voice.txt")