From c9eae38156b1eafad0c9e3ba5fdf7989b0a8d9db Mon Sep 17 00:00:00 2001 From: Boroondas Gupte Date: Mon, 20 Jun 2011 15:16:27 +0200 Subject: VWR-26066: FIXED request LLFloaterWorldMap child "zoom slider" with correct type LLSliderCtrl instead of LLSlider to get rid of warning when opening map flaoter --- doc/contributions.txt | 1 + indra/newview/llfloaterworldmap.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index c18d3eb171..ccae0de59b 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -125,6 +125,7 @@ blino Nakamura VWR-17 Boroondas Gupte VWR-233 + VWR-26066 WEB-262 Bulli Schumann CT-218 diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index cdc4cbc411..bd68875ba5 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -67,7 +67,7 @@ #include "llappviewer.h" #include "llmapimagetype.h" #include "llweb.h" -#include "llslider.h" +#include "llsliderctrl.h" #include "llglheaders.h" #include "llwindow.h" // copyTextToClipboard() @@ -974,7 +974,7 @@ void LLFloaterWorldMap::adjustZoomSliderBounds() F32 min_power = log(pixels_per_region/256.f)/log(2.f); - getChild("zoom slider")->setMinValue(min_power); + getChild("zoom slider")->setMinValue(min_power); } -- cgit v1.2.3 From f8f0fa041087e64abb0b7bc54c14999da9d55ab1 Mon Sep 17 00:00:00 2001 From: Xiaohong Bao Date: Wed, 22 Jun 2011 15:02:07 -0600 Subject: fix for STORM-1417: [crashhunters] crash at [0] LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions) [secondlife-bin llrender.cpp] --- indra/newview/lldrawpoolwlsky.cpp | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index 409b18d522..ec74769fa1 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -60,13 +60,24 @@ LLDrawPoolWLSky::LLDrawPoolWLSky(void) : llerrs << "Error: Failed to load cloud noise image " << cloudNoiseFilename << llendl; } - cloudNoiseFile->load(cloudNoiseFilename); - - sCloudNoiseRawImage = new LLImageRaw(); + if(cloudNoiseFile->load(cloudNoiseFilename)) + { + sCloudNoiseRawImage = new LLImageRaw(); - cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f); + if(cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f)) + { + //debug use + llinfos << "cloud noise raw image width: " << sCloudNoiseRawImage->getWidth() << " : height: " << sCloudNoiseRawImage->getHeight() << " : components: " << + (S32)sCloudNoiseRawImage->getComponents() << " : data size: " << sCloudNoiseRawImage->getDataSize() << llendl ; + llassert_always(sCloudNoiseRawImage->getData()) ; - sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + } + else + { + sCloudNoiseRawImage = NULL ; + } + } LLWLParamManager::instance()->propagateParameters(); } @@ -201,7 +212,7 @@ void LLDrawPoolWLSky::renderStars(void) const void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const { - if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)) + if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS) && sCloudNoiseTexture.notNull()) { LLGLEnable blend(GL_BLEND); gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -373,5 +384,8 @@ void LLDrawPoolWLSky::cleanupGL() //static void LLDrawPoolWLSky::restoreGL() { - sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + if(sCloudNoiseRawImage.notNull()) + { + sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + } } -- cgit v1.2.3 From 52b9842ced222ac05f54058833f9404409eb0c79 Mon Sep 17 00:00:00 2001 From: seth_productengine Date: Thu, 7 Jul 2011 21:09:09 +0300 Subject: STORM-1476 FIXED Replaced non-fatal errors in LLDirIterator constructor with warnings to avoid viewer crashes. Added exception handling case. --- indra/llvfs/lldiriterator.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp index 25550321f0..ff92cbb7fd 100644 --- a/indra/llvfs/lldiriterator.cpp +++ b/indra/llvfs/lldiriterator.cpp @@ -52,8 +52,20 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask) { fs::path dir_path(dirname); - // Check if path exists. - if (!fs::exists(dir_path)) + bool is_dir = false; + + // Check if path is a directory. + try + { + is_dir = fs::is_directory(dir_path); + } + catch (fs::basic_filesystem_error& e) + { + llwarns << e.what() << llendl; + return; + } + + if (!is_dir) { llwarns << "Invalid path: \"" << dir_path.string() << "\"" << llendl; return; @@ -66,7 +78,7 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask) } catch (fs::basic_filesystem_error& e) { - llerrs << e.what() << llendl; + llwarns << e.what() << llendl; return; } @@ -82,7 +94,7 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask) } catch (boost::regex_error& e) { - llerrs << "\"" << exp << "\" is not a valid regular expression: " + llwarns << "\"" << exp << "\" is not a valid regular expression: " << e.what() << llendl; return; } -- cgit v1.2.3 From 0553d47045e65a0249ec7ee514078161a4bec97e Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 7 Jul 2011 18:45:00 -0700 Subject: EXP-916 WIP Folder in Inbox indicates loading when all items are displayed in folder background fetch always proceeds when fetching a specific folder this allows us to flag folders that are received asynchronously as complete by performing a background fetch when opening them --- indra/newview/llinventorymodelbackgroundfetch.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index afaf660cb7..91fdd67806 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -105,7 +105,7 @@ BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive() const void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id, BOOL recursive) { - if (!mAllFoldersFetched) + if (!mAllFoldersFetched || cat_id.notNull()) { LL_DEBUGS("InventoryFetch") << "Start fetching category: " << cat_id << ", recursive: " << recursive << LL_ENDL; @@ -211,7 +211,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() // Double timeouts on failure. mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f); mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f); - llinfos << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl; + lldebugs << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl; // fetch is no longer considered "timely" although we will wait for full time-out. mTimelyFetchPending = FALSE; } @@ -280,7 +280,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() // Shrink timeouts based on success. mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f); mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f); - //llinfos << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl; + lldebugs << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl; } mTimelyFetchPending = FALSE; -- cgit v1.2.3 From 2eb37ef38fb774dbdaf8826c203581cd99580111 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Fri, 8 Jul 2011 15:20:03 -0700 Subject: adding freshness flag support --- indra/newview/app_settings/settings.xml | 26756 ++++++++++--------- indra/newview/llfolderview.cpp | 10 + indra/newview/llfolderviewitem.cpp | 8 +- indra/newview/llfolderviewitem.h | 4 +- indra/newview/llpanelmarketplaceinbox.cpp | 2 + indra/newview/llpanelmarketplaceinboxinventory.cpp | 69 + indra/newview/llpanelmarketplaceinboxinventory.h | 10 +- .../xui/en/widgets/inbox_folder_view_folder.xml | 2 +- 8 files changed, 13485 insertions(+), 13376 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 255bb48f65..0586db2d3f 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2,13423 +2,13441 @@ - CrashHostUrl - - Comment - A URL pointing to a crash report handler; overrides cluster negotiation to locate crash handler. - Persist - 1 - Type - String - Value - - - AFKTimeout - - Comment - Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never). - Valid values are: 0, 120, 300, 600, 1800 - Persist - 1 - Type - S32 - Value - 300 - - AdminMenu - - Comment - Enable the debug admin menu from the main menu. Note: This will just allow the menu to be shown; this does not grant admin privileges. - Persist - 0 - Type - Boolean - Value - 0 - - ActiveFloaterTransparency - - Comment - Transparency of active floaters (floaters that have focus) - Persist - 1 - Type - F32 - Value - 0.95 - - AdvanceSnapshot - - Comment - Display advanced parameter settings in snaphot interface - Persist - 1 - Type - Boolean - Value - 0 - - AgentPause - - Comment - Ask the simulator to stop updating the agent while enabled - Persist - 0 - Type - Boolean - Value - 0 - - AlertedUnsupportedHardware - - Comment - Set if there's unsupported hardware and we've already done a notification. - Persist - 1 - Type - Boolean - Value - 0 - - AllowMultipleViewers - - Comment - Allow multiple viewers. - Persist - 1 - Type - Boolean - Value - 0 - - AllowTapTapHoldRun - - Comment - Tapping a direction key twice and holding it down makes avatar run - Persist - 1 - Type - Boolean - Value - 1 - - AnimateTextures - - Comment - Enable texture animation (debug) - Persist - 1 - Type - Boolean - Value - 1 - - AnimationDebug - - Comment - Show active animations in a bubble above avatars head - Persist - 1 - Type - Boolean - Value - 0 - - AppearanceCameraMovement - - Comment - When entering appearance editing mode, camera zooms in on currently selected portion of avatar - Persist - 1 - Type - Boolean - Value - 1 - - ApplyColorImmediately - - Comment - Preview selections in color picker immediately - Persist - 1 - Type - Boolean - Value - 1 - - ApplyTextureImmediately - - Comment - Preview selections in texture picker immediately - Persist - 1 - Type - Boolean - Value - 1 - - ArrowKeysAlwaysMove - - Comment - While cursor is in chat entry box, arrow keys still control your avatar - Persist - 1 - Type - Boolean - Value - 0 - - AskedAboutCrashReports - - Comment - Turns off dialog asking if you want to enable crash reporting - Persist - 1 - Type - Boolean - Value - 0 - - AuctionShowFence - - Comment - When auctioning land, include parcel boundary marker in snapshot - Persist - 1 - Type - Boolean - Value - 1 - - AudioLevelAmbient - - Comment - Audio level of environment sounds - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelDoppler - - Comment - Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect) - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelMaster - - Comment - Master audio level, or overall volume - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelMedia - - Comment - Audio level of Quicktime movies - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelMic - - Comment - Audio level of microphone input - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelMusic - - Comment - Audio level of streaming music - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelRolloff - - Comment - Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff) - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelSFX - - Comment - Audio level of in-world sound effects - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelUI - - Comment - Audio level of UI sound effects - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelVoice - - Comment - Audio level of voice chat - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelWind - - Comment - Audio level of wind noise when standing still - Persist - 1 - Type - F32 - Value - 0.5 - - AudioStreamingMedia - - Comment - Enable streaming - Persist - 1 - Type - Boolean - Value - 1 - - AudioStreamingMusic - - Comment - Enable streaming audio - Persist - 1 - Type - Boolean - Value - 1 - - AuditTexture - - Comment - Enable texture auditting. - Persist - 1 - Type - Boolean - Value - 0 - - AutoAcceptNewInventory - - Comment - Automatically accept new notecards/textures/landmarks - Persist - 1 - Type - Boolean - Value - 0 - - AutoLeveling - - Comment - Keep Flycam level. - Persist - 1 - Type - Boolean - Value - 1 - - AutoLoadWebProfiles - - Comment - Automatically load ALL profile webpages without asking first. - Persist - 1 - Type - Boolean - Value - 0 - - AutoLogin - - Comment - Login automatically using last username/password combination - Persist - 0 - Type - Boolean - Value - 0 - - AutoMimeDiscovery - - Comment - Enable viewer mime type discovery of media URLs - Persist - 1 - Type - Boolean - Value - 0 - - AutoPilotLocksCamera - - Comment - Keep camera position locked when avatar walks to selected position - Persist - 1 - Type - Boolean - Value - 0 - - AutoSnapshot - - Comment - Update snapshot when camera stops moving, or any parameter changes - Persist - 1 - Type - Boolean - Value - 0 - - AutomaticFly - - Comment - Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only) - Persist - 1 - Type - Boolean - Value - 1 - - AvalinePhoneSeparator - - Comment - Separator of phone parts to have Avaline numbers human readable in Voice Control Panel - Persist - 1 - Type - String - Value - - - - AvatarAxisDeadZone0 - - Comment - Avatar axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone1 - - Comment - Avatar axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone2 - - Comment - Avatar axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone3 - - Comment - Avatar axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone4 - - Comment - Avatar axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone5 - - Comment - Avatar axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisScale0 - - Comment - Avatar axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale1 - - Comment - Avatar axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale2 - - Comment - Avatar axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale3 - - Comment - Avatar axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale4 - - Comment - Avatar axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale5 - - Comment - Avatar axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarBacklight - - Comment - Add rim lighting to avatar rendering to approximate shininess of skin - Persist - 1 - Type - Boolean - Value - 1 - - AvatarFeathering - - Comment - Avatar feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16.0 - - AvatarPickerSortOrder - - Comment - Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 2 - - AvatarPickerURL - - Comment - Avatar picker contents - Persist - 1 - Type - String - Value - - - AvatarBakedTextureUploadTimeout - - Comment - Specifes the maximum time in seconds to wait before sending your baked textures for avatar appearance. Set to 0 to disable and wait until all baked textures are at highest resolution. - Persist - 1 - Type - U32 - Value - 60 - - AvatarBakedLocalTextureUpdateTimeout - - Comment - Specifes the maximum time in seconds to wait before updating your appearance during appearance mode. - Persist - 1 - Type - U32 - Value - 10 - - AvatarPhysics - - Comment - Enable avatar physics. - Persist - 1 - Type - Boolean - Value - 1 - - AvatarSex - - Comment - - Persist - 0 - Type - U32 - Value - 0 - - - BackgroundYieldTime - - Comment - Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds) - Persist - 1 - Type - S32 - Value - 40 - - BottomPanelNew - - Comment - Enable the new bottom panel - Persist - 1 - Type - Boolean - Value - 0 - - BrowserHomePage - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - http://www.secondlife.com - - BrowserIgnoreSSLCertErrors - - Comment - FOR TESTING ONLY: Tell the built-in web browser to ignore SSL cert errors. - Persist - 1 - Type - Boolean - Value - 0 - - BrowserEnableJSObject - - Comment - (WARNING: Advanced feature. Use if you are aware of the implications). Enable or disable the viewer to Javascript bridge object. - Persist - 0 - Type - Boolean - Value - 0 - - BlockAvatarAppearanceMessages + CrashHostUrl - Comment - Ignores appearance messages (for simulating Ruth) - Persist + Comment + A URL pointing to a crash report handler; overrides cluster negotiation to locate crash handler. + Persist + 1 + Type + String + Value + + + AFKTimeout + + Comment + + Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never). + Valid values are: 0, 120, 300, 600, 1800 + + Persist 1 - Type + Type + S32 + Value + 300 + + AdminMenu + + Comment + Enable the debug admin menu from the main menu. Note: This will just allow the menu to be shown; this does not grant admin privileges. + Persist + 0 + Type Boolean - Value + Value 0 - BlockSomeAvatarAppearanceVisualParams + ActiveFloaterTransparency - Comment - Drop around 50% of VisualParam occurances in appearance messages (for simulating Ruth) - Persist + Comment + Transparency of active floaters (floaters that have focus) + Persist + 1 + Type + F32 + Value + 0.95 + + AdvanceSnapshot + + Comment + Display advanced parameter settings in snaphot interface + Persist 1 - Type + Type Boolean - Value + Value 0 - BrowserProxyAddress - - Comment - Address for the Web Proxy] - Persist - 1 - Type - String - Value - - - BrowserProxyEnabled - - Comment - Use Web Proxy - Persist - 1 - Type - Boolean - Value - 0 - - BrowserProxyExclusions - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - - - BrowserProxyPort - - Comment - Port for Web Proxy - Persist - 1 - Type - S32 - Value - 3128 - - BrowserProxySocks45 - - Comment - [NOT USED] - Persist - 1 - Type - S32 - Value - 5 - - BuildAxisDeadZone0 - - Comment - Build axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone1 - - Comment - Build axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone2 - - Comment - Build axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone3 - - Comment - Build axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone4 - - Comment - Build axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone5 - - Comment - Build axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisScale0 - - Comment - Build axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale1 - - Comment - Build axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale2 - - Comment - Build axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale3 - - Comment - Build axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale4 - - Comment - Build axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale5 - - Comment - Build axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildFeathering - - Comment - Build feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16.0 - - BulkChangeIncludeAnimations - - Comment - Bulk permission changes affect animations - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeBodyParts - - Comment - Bulk permission changes affect body parts - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeClothing - - Comment - Bulk permission changes affect clothing - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeGestures - - Comment - Bulk permission changes affect gestures - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeNotecards - - Comment - Bulk permission changes affect notecards - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeObjects - - Comment - Bulk permission changes affect objects - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeScripts - - Comment - Bulk permission changes affect scripts - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeSounds - - Comment - Bulk permission changes affect sounds - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeTextures - - Comment - Bulk permission changes affect textures - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeEveryoneCopy - - Comment - Bulk changed objects can be copied by everyone - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeNextOwnerCopy - - Comment - Bulk changed objects can be copied by next owner - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeNextOwnerModify - - Comment - Bulk changed objects can be modified by next owner - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeNextOwnerTransfer - - Comment - Bulk changed objects can be resold or given away by next owner - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeShareWithGroup - - Comment - Bulk changed objects are shared with the currently active group - Persist - 1 - Type - Boolean - Value - 0 - - ButtonFlashCount - - Comment - Number of flashes after which flashing buttons stay lit up - Persist - 1 - Type - S32 - Value - 8 - - ButtonFlashRate - - Comment - Frequency at which buttons flash (hz) - Persist - 1 - Type - F32 - Value - 1.25 - - ButtonHPad - - Comment - Default horizontal spacing between buttons (pixels) - Persist - 1 - Type - S32 - Value - 4 - - ButtonHeight - - Comment - Default height for normal buttons (pixels) - Persist - 1 - Type - S32 - Value - 23 - - ButtonHeightSmall - - Comment - Default height for small buttons (pixels) - Persist - 1 - Type - S32 - Value - 23 - - CacheLocation - - Comment - Controls the location of the local disk cache - Persist - 1 - Type - String - Value - - - CacheLocationTopFolder - - Comment - Controls the top folder location of the the local disk cache - Persist - 1 - Type - String - Value - - - CacheNumberOfRegionsForObjects - - Comment - Controls number of regions to be cached for objects. - Persist - 1 - Type - U32 - Value - 128 - - CacheSize - - Comment - Controls amount of hard drive space reserved for local file caching in MB - Persist - 1 - Type - U32 - Value - 512 - - CacheValidateCounter - - Comment - Used to distribute cache validation - Persist - 1 - Type - U32 - Value - 0 - - CameraMouseWheelZoom - - Comment - Camera zooms in and out with mousewheel - Persist - 1 - Type - S32 - Value - 5 - - CameraAngle - - Comment - Camera field of view angle (Radians) - Persist - 1 - Type - F32 - Value - 1.047197551 - - CameraOffset - - Comment - Render with camera offset from view frustum (rendering debug) - Persist - 1 - Type - Boolean - Value - 0 - - CameraOffsetBuild - - Comment - Default camera position relative to focus point when entering build mode - Persist - 1 - Type - Vector3 - Value - - -6.0 - 0.0 - 6.0 - - - CameraOffsetRearView - - Comment - Initial camera offset from avatar in Rear View - Persist - 1 - Type - Vector3 - Value - - -3.0 - 0.0 - 0.75 - - - CameraOffsetFrontView - - Comment - Initial camera offset from avatar in Front View - Persist - 1 - Type - Vector3 - Value - - 2.2 - 0.0 - 0.0 - - - CameraOffsetGroupView - - Comment - Initial camera offset from avatar in Group View - Persist - 1 - Type - Vector3 - Value - - -1.0 - 0.7 - 0.5 - - - CameraOffsetScale - - Comment - Scales the default offset - Persist - 1 - Type - F32 - Value - 1.0 - - CameraPosOnLogout - - Comment - Camera position when last logged out (global coordinates) - Persist - 1 - Type - Vector3D - Value - - 0.0 - 0.0 - 0.0 - - - CameraPositionSmoothing - - Comment - Smooths camera position over time - Persist - 1 - Type - F32 - Value - 1.0 - - CameraPreset - - Comment - Preset camera position - view (0 - rear, 1 - front, 2 - group) - Persist - 1 - Type - U32 - Value - 0 - - - CameraFocusTransitionTime - - Comment - How many seconds it takes the camera to transition between focal distances - Persist - 1 - Type - F32 - Value - 0.5 - - - CameraFNumber - - Comment - Camera f-number value for DoF effect - Persist - 1 - Type - F32 - Value - 9.0 - - - CameraFocalLength - - Comment - Camera focal length for DoF effect (in millimeters) - Persist - 1 - Type - F32 - Value - 50 - - - CameraFieldOfView - - Comment - Vertical camera field of view for DoF effect (in degrees) - Persist - 1 - Type - F32 - Value - 60.0 - - - CameraAspectRatio - - Comment - Camera aspect ratio for DoF effect - Persist - 1 - Type - F32 - Value - 1.5 - - - CertStore - - Comment - Specifies the Certificate Store for certificate trust verification - Persist - 1 - Type - String - Value - default - - ChatBarStealsFocus - - Comment - Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus - Persist - 1 - Type - Boolean - Value - 1 - - LetterKeysFocusChatBar - - Comment - When printable characters keys (possibly with Shift held) are pressed, the chatbar takes focus - Persist - 1 - Type - S32 - Value - 0 - - ChatBubbleOpacity - - Comment - Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.5 - - ChatFontSize - - Comment - Size of chat text in chat console (0 = small, 1 = big) - Persist - 1 - Type - S32 - Value - 1 - - ChatFullWidth - - Comment - Chat console takes up full width of SL window - Persist - 1 - Type - Boolean - Value - 1 - - ChatHistoryTornOff - - Comment - Show chat history window separately from Communicate window. - Persist - 1 - Type - Boolean - Value - 0 - - ChatOnlineNotification - - Comment - Provide notifications for when friend log on and off of SL - Persist - 1 - Type - Boolean - Value - 1 - - ChatPersistTime - - Comment - Time for which chat stays visible in console (seconds) - Persist - 1 - Type - F32 - Value - 20.0 - - ChatShowTimestamps - - Comment - Show timestamps in chat - Persist - 1 - Type - Boolean - Value - 1 - - ChatVisible - - Comment - Chat bar is visible - Persist - 1 - Type - Boolean - Value - 1 - - ChatWindow - - Comment - Show chat in multiple windows(by default) or in one multi-tabbed window(requires restart) - Persist - 1 - Type - S32 - Value - 0 - - CheesyBeacon - - Comment - Enable cheesy beacon effects - Persist - 1 - Type - Boolean - Value - 0 - - ClientSettingsFile - - Comment - Client settings file name (per install). - Persist - 0 - Type - String - Value - - - CloseChatOnReturn - - Comment - Close chat after hitting return - Persist - 1 - Type - Boolean - Value - 0 - - CloseSnapshotOnKeep - - Comment - Close snapshot window after saving snapshot - Persist - 1 - Type - Boolean - Value - 1 - - CmdLineDisableVoice - - Comment - Disable Voice. - Persist - 0 - Type - Boolean - Value - 0 - - CmdLineGridChoice - - Comment - The user's grid choice or ip address. - Persist - 0 - Type - String - Value - - - CmdLineHelperURI - - Comment - Command line specified helper web CGI prefix to use. - Persist - 0 - Type - String - Value - - - CmdLineLoginURI - - Comment - Command line specified login server and CGI prefix to use. - Persist - 0 - Type - LLSD - Value - - - - - CompressSnapshotsToDisk - - Comment - Compress snapshots saved to disk (Using JPEG 2000) - Persist - 1 - Type - Boolean - Value - 0 - - ConnectAsGod - - Comment - Log in a god if you have god access. - Persist - 1 - Type - Boolean - Value - 0 - - ConnectionPort - - Comment - Custom connection port number - Persist - 1 - Type - U32 - Value - 13000 - - ConnectionPortEnabled - - Comment - Use the custom connection port? - Persist - 1 - Type - Boolean - Value - 0 - - ConsoleBackgroundOpacity - - Comment - Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.700 - - ConsoleBufferSize - - Comment - Size of chat console history (lines of chat) - Persist - 1 - Type - S32 - Value - 40 - - ConsoleMaxLines - - Comment - Max number of lines of chat text visible in console. - Persist - 1 - Type - S32 - Value - 40 - - ContactsTornOff - - Comment - Show contacts window separately from Communicate window. - Persist - 1 - Type - Boolean - Value - 0 - - CookiesEnabled - - Comment - Accept cookies from Web sites? - Persist - 1 - Type - Boolean - Value - 1 - - BrowserJavascriptEnabled - - Comment - Enable Javascript in the built-in Web browser? - Persist - 1 - Type - Boolean - Value - 1 - - BrowserPluginsEnabled - - Comment - Enable Web plugins in the built-in Web browser? - Persist - 1 - Type - Boolean - Value - 1 - - ChatBarCustomWidth - - Comment - Stores customized width of chat bar. - Persist - 1 - Type - S32 - Value - 0 - - CreateToolCopyCenters - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - - CreateToolCopyRotates - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - CreateToolCopySelection - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - CreateToolKeepSelected - - Comment - After using create tool, keep the create tool active - Persist - 1 - Type - Boolean - Value - 0 - - Cursor3D - - Comment - Treat Joystick values as absolute positions (not deltas). - Persist - 1 - Type - Boolean - Value - 1 - - CurrentGrid - - Comment - Currently Selected Grid - Persist - 1 - Type - String - Value - - - CustomServer - - Comment - Specifies IP address or hostname of grid to which you connect - Persist - 1 - Type - String - Value - - - DebugAvatarRezTime - - Comment - Display times for avatars to resolve. - Persist - 1 - Type - Boolean - Value - 0 - - DebugAvatarLocalTexLoadedTime - - Comment - Display time for loading avatar local textures. - Persist - 1 - Type - Boolean - Value - 0 - - DebugBeaconLineWidth - - Comment - Size of lines for Debug Beacons - Persist - 1 - Type - S32 - Value - 1 - - DebugInventoryFilters - - Comment - Turn on debugging display for inventory filtering - Persist - 1 - Type - Boolean - Value - 0 - - DebugPermissions - - Comment - Log permissions for selected inventory items - Persist - 1 - Type - Boolean - Value - 0 - - DebugPluginDisableTimeout - - Comment - Disable the code which watches for plugins that are crashed or hung - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowColor - - Comment - Show color under cursor - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowMemory - - Comment - Show Total Allocated Memory - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowRenderInfo - - Comment - Show stats about current scene - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowUploadCost - - Comment - Show what it would cost to upload assets in current scene - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowRenderMatrices - - Comment - Display values of current view and projection matrices. - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowTextureInfo - - Comment - Show inertested texture info - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowTime - - Comment - Show time info - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowXUINames - - Comment - Show tooltips with XUI path to widget - Persist - 0 - Type - Boolean - Value - 0 - - DebugStatModeFPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeBandwidth - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePacketLoss - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatMode - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeKTrisDrawnFr - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeKTrisDrawnSec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTotalObjs - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeNewObjs - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTextureCount - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeRawCount - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeGLMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeFormattedMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeRawMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeBoundMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePacketsIn - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePacketsOut - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTexture - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeAsset - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeLayers - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeActualIn - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeActualOut - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeVFSPendingOps - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTimeDialation - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimFPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePhysicsFPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePinnedObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeLowLODObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeMemoryAllocated - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeAgentUpdatesSec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeMainAgents - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeChildAgents - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimActiveObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimActiveScripts - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimScriptEvents - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimInPPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimOutPPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimPendingDownloads - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - SimPendingUploads - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimTotalUnackedBytes - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimFrameMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimNetMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimOtherMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimAgentMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimImagesMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimScriptMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSpareMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsStepMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsShapeUpdateMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsOtherMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSleepMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimPumpIOMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugViews - - Comment - Display debugging info for views. - Persist - 1 - Type - Boolean - Value - 0 - - DebugWindowProc - - Comment - Log windows messages - Persist - 1 - Type - Boolean - Value - 0 - - DefaultFemaleAvatar - - Comment - Default Female Avatar - Persist - 1 - Type - String - Value - Female Shape & Outfit - - DefaultMaleAvatar - - Comment - Default Male Avatar - Persist - 1 - Type - String - Value - Male Shape & Outfit - - - DefaultObjectTexture - - Comment - Texture used as 'Default' in texture picker. (UUID texture reference) - Persist - 1 - Type - String - Value - 89556747-24cb-43ed-920b-47caed15465f - - DefaultUploadCost - - Comment - Default sound/image/file upload cost(in case economy data is not available). - Persist - 1 - Type - U32 - Value - 10 - - DestinationGuideURL - - Comment - Destination guide contents - Persist - 1 - Type - String - Value - - - DisableCameraConstraints - - Comment - Disable the normal bounds put on the camera by avatar position - Persist - 1 - Type - Boolean - Value - 0 - - DisableMouseWarp - - Comment - Disable warping of the mouse to the center of the screen during alt-zoom and mouse look. Useful with certain input devices, mouse sharing programs like Synergy, or running under Parallels. - Persist - 1 - Type - Boolean - Value - 0 - - DisableExternalBrowser - - Comment - Disable opening an external browser. - Persist - 1 - Type - Boolean - Value - 0 - - HeadlessClient - - Comment - Run in headless mode by disabling GL rendering, keyboard, etc - Persist - 1 - Type - Boolean - Value - 0 - - DisableTextHyperlinkActions - - Comment - Disable highlighting and linking of URLs in XUI text boxes - Persist - 1 - Type - Boolean - Value - 0 - - DisableVerticalSync - - Comment - Update frames as fast as possible (FALSE = update frames between display scans) - Persist - 1 - Type - Boolean - Value - 1 - - EnableGroupChatPopups - - Comment - Enable Incoming Group Chat Popups - Persist - 1 - Type - Boolean - Value - 1 - - EnableIMChatPopups - - Comment - Enable Incoming IM Chat Popups - Persist - 1 - Type - Boolean - Value - 1 - - DisplayAvatarAgentTarget - - Comment - Show avatar positioning locators (animation debug) - Persist - 1 - Type - Boolean - Value - 0 - - DisplayChat - - Comment - Display Latest Chat message on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayDebug - - Comment - Display Network Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayDebugConsole - - Comment - Display Console Debug Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayIM - - Comment - Display Latest IM message on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayLinden - - Comment - Display Account Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayRegion - - Comment - Display Location information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayTimecode - - Comment - Display timecode on screen - Persist - 1 - Type - Boolean - Value - 0 - - Disregard128DefaultDrawDistance - - Comment - Whether to use the auto default to 128 draw distance - Persist - 1 - Type - Boolean - Value - 1 - - Disregard96DefaultDrawDistance - - Comment - Whether to use the auto default to 96 draw distance - Persist - 1 - Type - Boolean - Value - 1 - - ClickActionBuyEnabled - - Comment - Enable click to buy actions in tool pie menu - Persist - 1 - Type - Boolean - Value - 1 - - ClickActionPayEnabled - - Comment - Enable click to pay actions in tool pie menu - Persist - 1 - Type - Boolean - Value - 1 - - DoubleClickAutoPilot - - Comment - Enable double-click auto pilot - Persist - 1 - Type - Boolean - Value - 0 - - DoubleClickTeleport - - Comment - Enable double-click to teleport where allowed - Persist - 1 - Type - Boolean - Value - 0 - - DoubleClickShowWorldMap - - Comment - Enable double-click to show world map from mini map - Persist - 1 - Type - Boolean - Value - 1 - - DragAndDropToolTipDelay - - Comment - Seconds before displaying tooltip when performing drag and drop operation - Persist - 1 - Type - F32 - Value - 0.10000000149 - - DragAndDropDistanceThreshold - - Comment - Number of pixels that mouse should move before triggering drag and drop mode - Persist - 1 - Type - S32 - Value - 3 - - DropShadowButton - - Comment - Drop shadow width for buttons (pixels) - Persist - 1 - Type - S32 - Value - 2 - - DropShadowFloater - - Comment - Drop shadow width for floaters (pixels) - Persist - 1 - Type - S32 - Value - 5 - - DropShadowSlider - - Comment - Drop shadow width for sliders (pixels) - Persist - 1 - Type - S32 - Value - 3 - - DropShadowTooltip - - Comment - Drop shadow width for tooltips (pixels) - Persist - 1 - Type - S32 - Value - 4 - - DumpVFSCaches - - Comment - Dump VFS caches on startup. - Persist - 1 - Type - Boolean - Value - 0 - - DynamicCameraStrength - - Comment - Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity) - Persist - 1 - Type - F32 - Value - 2.0 - - EditCameraMovement - - Comment - When entering build mode, camera moves up above avatar - Persist - 1 - Type - Boolean - Value - 0 - - EditLinkedParts - - Comment - Select individual parts of linked objects - Persist - 0 - Type - Boolean - Value - 0 - - EffectScriptChatParticles - - Comment - 1 = normal behavior, 0 = disable display of swirling lights when scripts communicate - Persist - 1 - Type - Boolean - Value - 1 - - EnableGrab - - Comment - Use Ctrl+mouse to grab and manipulate objects - Persist - 1 - Type - Boolean - Value - 1 - - EnableAltZoom - - Comment - Use Alt+mouse to look at and zoom in on objects - Persist - 1 - Type - Boolean - Value - 1 - - EnableGestureSounds - - Comment - Play sounds from gestures - Persist - 1 - Type - Boolean - Value - 1 - - EnableMouselook - - Comment - Allow first person perspective and mouse control of camera - Persist - 1 - Type - Boolean - Value - 1 - - EnableRippleWater - - Comment - Whether to use ripple water shader or not - Persist - 1 - Type - Boolean - Value - 1 - - EnableTextureAtlas - - Comment - Whether to use texture atlas or not - Persist - 1 - Type - Boolean - Value - 0 - - EnableUIHints - - Comment - Toggles UI hint popups - Persist - 1 - Type - Boolean - Value - 1 - - EnableVoiceChat - - Comment - Enable talking to other residents with a microphone - Persist - 1 - Type - Boolean - Value - 1 - - EnergyFromTop - - Comment - - Persist - 0 - Type - S32 - Value - 20 - - EnergyHeight - - Comment - - Persist - 0 - Type - S32 - Value - 40 - - EnergyWidth - - Comment - - Persist - 0 - Type - S32 - Value - 175 - - EventURL - - Comment - URL for Event website, displayed in the event floater - Persist - 0 - Type - String - Value - http://events.secondlife.com/viewer/embed/event/ - - EveryoneCopy - - Comment - Everyone can copy the newly created objects - Persist - 1 - Type - Boolean - Value - 0 - - FeatureManagerHTTPTable - - Comment - Base directory for HTTP feature/gpu table fetches - Persist - 1 - Type - String - Value - http://viewer-settings.secondlife.com - - FPSLogFrequency + AgentPause - Comment - Seconds between display of FPS in log (0 for never) - Persist + Comment + Ask the simulator to stop updating the agent while enabled + Persist + 0 + Type + Boolean + Value + 0 + + AlertedUnsupportedHardware + + Comment + Set if there's unsupported hardware and we've already done a notification. + Persist 1 - Type - F32 - Value - 10.0 + Type + Boolean + Value + 0 - FilterItemsPerFrame - - Comment - Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed) - Persist - 1 - Type - S32 - Value - 500 - - FindLandArea - - Comment - Enables filtering of land search results by area - Persist - 1 - Type - Boolean - Value - 0 - - FindLandPrice - - Comment - Enables filtering of land search results by price - Persist - 1 - Type - Boolean - Value - 1 - - FindLandType - - Comment - Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale") - Persist - 1 - Type - String - Value - All - - FindPeopleOnline - - Comment - Limits people search to only users who are logged on - Persist - 1 - Type - Boolean - Value - 1 - - FindPlacesPictures - - Comment - Display only results of find places that have pictures - Persist - 1 - Type - Boolean - Value - 1 - - FirstName - - Comment - Login first name - Persist - 1 - Type - String - Value - - - FirstPersonAvatarVisible - - Comment - Display avatar and attachments below neck while in mouselook - Persist - 1 - Type - Boolean - Value - 0 - - FirstRunThisInstall - - Comment - Specifies that you have not run the viewer since you performed a clean install - Persist - 1 - Type - Boolean - Value - 1 - - FirstLoginThisInstall - - Comment - Specifies that you have not logged in with the viewer since you performed a clean install - Persist - 1 - Type - Boolean - Value - 1 - - FirstSelectedDisabledPopups - - Comment - Return false if there is not disabled popup selected in the list of floater preferences popups - Persist - 0 - Type - Boolean - Value - 0 - - FirstSelectedEnabledPopups - - Comment - Return false if there is not enable popup selected in the list of floater preferences popups - Persist - 0 - Type - Boolean - Value - 0 - - FixedWeather - - Comment - Weather effects do not change over time - Persist - 1 - Type - Boolean - Value - 0 - - FloaterActiveSpeakersSortAscending - - Comment - Whether to sort up or down - Persist - 1 - Type - Boolean - Value - 1 - - FloaterActiveSpeakersSortColumn - - Comment - Column name to sort on - Persist - 1 - Type - String - Value - speaking_status - - FloaterMapNorth - - Comment - Floater Map North Label - Persist - 1 - Type - String - Value - N - - FloaterMapNorthEast - - Comment - Floater Map North-East Label - Persist - 1 - Type - String - Value - NE - - FloaterMapNorthWest - - Comment - Floater Map North-West Label - Persist - 1 - Type - String - Value - NW - - FloaterMapEast - - Comment - Floater Map East Label - Persist - 1 - Type - String - Value - E - - FloaterMapWest - - Comment - Floater Map West Label - Persist - 1 - Type - String - Value - W - - FloaterMapSouth - - Comment - Floater Map South Label - Persist - 1 - Type - String - Value - S - - FloaterMapSouthEast - - Comment - Floater Map South-East Label - Persist - 1 - Type - String - Value - SE - - FloaterMapSouthWest - - Comment - Floater Map South-West Label - Persist - 1 - Type - String - Value - SW - - - FloaterStatisticsRect - - Comment - Rectangle for chat history - Persist - 1 - Type - Rect - Value - - 0 - 400 - 250 - 0 - - - FlycamAbsolute - - Comment - Treat Flycam values as absolute positions (not deltas). - Persist - 1 - Type - Boolean - Value - 0 - - FlycamAxisDeadZone0 - - Comment - Flycam axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone1 - - Comment - Flycam axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone2 - - Comment - Flycam axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone3 - - Comment - Flycam axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone4 - - Comment - Flycam axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone5 - - Comment - Flycam axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone6 - - Comment - Flycam axis 6 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisScale0 - - Comment - Flycam axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale1 - - Comment - Flycam axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale2 - - Comment - Flycam axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale3 - - Comment - Flycam axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale4 - - Comment - Flycam axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale5 - - Comment - Flycam axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale6 - - Comment - Flycam axis 6 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamBuildModeScale - - Comment - Scale factor to apply to flycam movements when in build mode. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamFeathering - - Comment - Flycam feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16.0 - - FlycamZoomDirect - - Comment - Map flycam zoom axis directly to camera zoom. - Persist - 1 - Type - Boolean - Value - 0 - - FlyingAtExit - - Comment - Was flying when last logged out, so fly when logging in - Persist - 1 - Type - Boolean - Value - 0 - - FocusOffsetRearView - - Comment - Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward) - Persist - 1 - Type - Vector3D - Value - - 1.0 - 0.0 - 1.0 - - - FocusOffsetFrontView - - Comment - Initial focus point offset relative to avatar for the camera preset Front View - Persist - 1 - Type - Vector3D - Value - - 0.0 - 0.0 - 0.0 - - - FocusOffsetGroupView - - Comment - Initial focus point offset relative to avatar for the camera preset Group View - Persist - 1 - Type - Vector3D - Value - - 1.5 - 0.7 - 1.0 - - - FocusPosOnLogout - - Comment - Camera focus point when last logged out (global coordinates) - Persist - 1 - Type - Vector3D - Value - - 0.0 - 0.0 - 0.0 - - - FolderAutoOpenDelay - - Comment - Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop - Persist - 1 - Type - F32 - Value - 0.75 - - FolderLoadingMessageWaitTime - - Comment - Seconds to wait before showing the LOADING... text in folder views - Persist - 1 - Type - F32 - Value - 0.5 - - FontScreenDPI - - Comment - Font resolution, higher is bigger (pixels per inch) - Persist - 1 - Type - F32 - Value - 96.0 - - ForceAssetFail - - Comment - Force wearable fetches to fail for this asset type. - Persist - 1 - Type - U32 - Value - 255 - - ForceShowGrid - - Comment - Always show grid dropdown on login screen - Persist - 1 - Type - Boolean - Value - 0 - - ForceMandatoryUpdate - - Comment - For QA: On next startup, forces the auto-updater to run - Persist - 1 - Type - Boolean - Value - 0 - - FreezeTime - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - FullScreenAspectRatio - - Comment - Aspect ratio of fullscreen display (width / height) - Persist - 1 - Type - F32 - Value - 3 - - FullScreenAutoDetectAspectRatio - - Comment - Automatically detect proper aspect ratio for fullscreen display - Persist - 1 - Type - Boolean - Value - 0 - - GesturesMarketplaceURL - - Comment - URL to the Gestures Marketplace - Persist - 0 - Type - String - Value - https://www.xstreetsl.com/modules.php?name=Marketplace&CategoryID=233 - - GridCrossSections - - Comment - Highlight cross sections of prims with grid manipulation plane. - Persist - 1 - Type - Boolean - Value - 0 - - GridDrawSize - - Comment - Visible extent of 2D snap grid (meters) - Persist - 1 - Type - F32 - Value - 12.0 - - GridMode - - Comment - Snap grid reference frame (0 = world, 1 = local, 2 = reference object) - Persist - 1 - Type - S32 - Value - 0 - - GridOpacity - - Comment - Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.699999988079 - - GridResolution - - Comment - Size of single grid step (meters) - Persist - 1 - Type - F32 - Value - 0.5 - - GridSubUnit - - Comment - Display fractional grid steps, relative to grid size - Persist - 1 - Type - Boolean - Value - 0 - - GridSubdivision - - Comment - Maximum number of times to divide single snap grid unit when GridSubUnit is true - Persist - 1 - Type - S32 - Value - 32 - - GroupNotifyBoxHeight - - Comment - Height of group notice messages - Persist - 1 - Type - S32 - Value - 260 - - GroupNotifyBoxWidth - - Comment - Width of group notice messages - Persist - 1 - Type - S32 - Value - 305 - - HelpUseLocal - - Comment - If set, always use this for help: skins/default/html/[LANGUAGE]/help-offline/index.html - Persist - 0 - Type - Boolean - Value - 0 - - HelpURLFormat - - Comment - URL pattern for help page; arguments will be encoded; see llviewerhelp.cpp:buildHelpURL for arguments - Persist - 1 - Type - String - Value - http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC][DEBUG_MODE] - - HomeSidePanelURL - - Comment - URL for the web page to display in the Home side panel - Persist - 1 - Type - String - Value - https://viewer-sidebar.secondlife.com/sidebar.html?p=[AUTH_TOKEN]&lang=[LANGUAGE]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]&firstlogin=[FIRST_LOGIN] - - SearchURL - - Comment - URL for Search website, displayed in the Find floater - Persist - 0 - Type - String - Value - http://search-beta.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD] - - WebProfileURL - - Comment - URL for Web Profiles - Persist - 0 - Type - String - Value - https://my.secondlife.com/[AGENT_NAME] - - WebProfileNonProductionURL - - Comment - URL for Web Profiles on Non-Production grids - Persist - 0 - Type - String - Value - https://my-demo.secondlife.com/[AGENT_NAME] - - HighResSnapshot - - Comment - Double resolution of snapshot from current window resolution - Persist - 1 - Type - Boolean - Value - 0 - - HideSelectedObjects - - Comment - Hide Selected Objects - Persist - 1 - Type - Boolean - Value - 0 - - HostID - - Comment - Machine identifier for hosted Second Life instances - Persist - 0 - Type - String - Value - - - HtmlHelpLastPage - - Comment - Last URL visited via help system - Persist - 1 - Type - String - Value - - - IMShowTimestamps - - Comment - Show timestamps in IM - Persist - 1 - Type - Boolean - Value - 1 - - IMShowControlPanel - - Comment - Show IM Control Panel - Persist - 1 - Type - Boolean - Value - 1 - - IgnoreAllNotifications - - Comment - Ignore all notifications so we never need user input on them. - Persist - 1 - Type - Boolean - Value - 0 - - IgnorePixelDepth - - Comment - Ignore pixel depth settings. - Persist - 1 - Type - Boolean - Value - 0 - - ImagePipelineUseHTTP - - Comment - If TRUE use HTTP GET to fetch textures from the server - Persist - 1 - Type - Boolean - Value - 1 - - InactiveFloaterTransparency - - Comment - Transparency of inactive floaters (floaters that have no focus) - Persist - 1 - Type - F32 - Value - 0.65 - - InBandwidth - - Comment - Incoming bandwidth throttle (bps) - Persist - 1 - Type - F32 - Value - 0.0 - - InspectorFadeTime - - Comment - Fade out timing for inspectors - Persist - 1 - Type - F32 - Value - 0.5 - - InspectorShowTime - - Comment - Stay timing for inspectors - Persist - 1 - Type - F32 - Value - 3.0 - - InstallLanguage - - Comment - Language passed from installer (for UI) - Persist - 1 - Type - String - Value - default - - InventoryAutoOpenDelay - - Comment - Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop - Persist - 1 - Type - F32 - Value - 1.0 - - InventoryDisplayInbox - - Comment - Override received items inventory inbox display - Persist - 0 - Type - Boolean - Value - 0 - - InventoryDisplayOutbox - - Comment - Override merchant inventory outbox display - Persist - 0 - Type - Boolean - Value - 0 - - InventoryLinking - - Comment - Enable ability to create links to folders and items via "Paste as link". - Persist - 1 - Type - Boolean - Value - 0 - - InventorySortOrder - - Comment - Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 7 - - InvertMouse - - Comment - When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up) - Persist - 1 - Type - Boolean - Value - 0 - - JoystickAvatarEnabled - - Comment - Enables the Joystick to control Avatar movement. - Persist - 1 - Type - Boolean - Value - 1 - - JoystickAxis0 - - Comment - Flycam hardware axis mapping for internal axis 0 ([0, 5]). - Persist - 1 - Type - S32 - Value - 1 - - JoystickAxis1 - - Comment - Flycam hardware axis mapping for internal axis 1 ([0, 5]). - Persist - 1 - Type - S32 - Value - 0 - - JoystickAxis2 - - Comment - Flycam hardware axis mapping for internal axis 2 ([0, 5]). - Persist - 1 - Type - S32 - Value - 2 - - JoystickAxis3 - - Comment - Flycam hardware axis mapping for internal axis 3 ([0, 5]). - Persist - 1 - Type - S32 - Value - 4 - - JoystickAxis4 - - Comment - Flycam hardware axis mapping for internal axis 4 ([0, 5]). - Persist - 1 - Type - S32 - Value - 3 - - JoystickAxis5 - - Comment - Flycam hardware axis mapping for internal axis 5 ([0, 5]). - Persist - 1 - Type - S32 - Value - 5 - - JoystickAxis6 - - Comment - Flycam hardware axis mapping for internal axis 6 ([0, 5]). - Persist - 1 - Type - S32 - Value - -1 - - JoystickBuildEnabled - - Comment - Enables the Joystick to move edited objects. - Persist - 1 - Type - Boolean - Value - 0 - - JoystickEnabled - - Comment - Enables Joystick Input. - Persist - 1 - Type - Boolean - Value - 0 - - JoystickFlycamEnabled - - Comment - Enables the Joystick to control the flycam. - Persist - 0 - Type - Boolean - Value - 1 - - JoystickInitialized - - Comment - Whether or not a joystick has been detected and initiailized. - Persist - 1 - Type - String - Value - - - JoystickMouselookYaw - - Comment - Pass joystick yaw to scripts in Mouselook. - Persist - 1 - Type - Boolean - Value - 1 - - JoystickRunThreshold - - Comment - Input threshold to initiate running - Persist - 1 - Type - F32 - Value - 0.25 - - Jpeg2000AdvancedCompression - - Comment - Use advanced Jpeg2000 compression options (precincts, blocks, ordering, markers) - Persist - 1 - Type - Boolean - Value - 0 - - Jpeg2000PrecinctsSize - - Comment - Size of image precincts. Assumed square and same for all levels. Must be power of 2. - Persist - 1 - Type - S32 - Value - 256 - - Jpeg2000BlocksSize - - Comment - Size of encoding blocks. Assumed square and same for all levels. Must be power of 2. Max 64, Min 4. - Persist - 1 - Type - S32 - Value - 64 - - KeepAspectForSnapshot - - Comment - Use full window when taking snapshot, regardless of requested image size - Persist - 1 - Type - Boolean - Value - 1 - - LandBrushSize - - Comment - Size of affected region when using teraform tool - Persist - 1 - Type - F32 - Value - 2.0 - - LastInventoryInboxExpand - - Comment - The last time the received items inbox was expanded. - Persist - 1 - Type - String - Value - - - LCDDestination - - Comment - Which LCD to use - Persist - 1 - Type - S32 - Value - 0 - - LSLFindCaseInsensitivity + AllowMultipleViewers - Comment - Use case insensitivity when searching in LSL editor - Persist + Comment + Allow multiple viewers. + Persist 1 - Type + Type Boolean - Value + Value 0 - LSLHelpURL - - Comment - URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword - Persist - 1 - Type - String - Value - http://wiki.secondlife.com/wiki/[LSL_STRING] - - LagMeterShrunk - - Comment - Last large/small state for lag meter - Persist - 1 - Type - Boolean - Value - 0 - - Language - - Comment - Language specifier (for UI) - Persist - 1 - Type - String - Value - default - - LanguageIsPublic + AllowTapTapHoldRun - Comment - Let other residents see our language information - Persist + Comment + Tapping a direction key twice and holding it down makes avatar run + Persist 1 - Type + Type Boolean - Value + Value 1 - LastGPUClass - - Comment - [DO NOT MODIFY] previous GPU class for tracking hardware changes - Persist - 1 - Type - S32 - Value - -1 - - LastFeatureVersion - - Comment - [DO NOT MODIFY] Version number for tracking hardware changes - Persist - 1 - Type - S32 - Value - 0 - - LastFindPanel - - Comment - Controls which find operation appears by default when clicking "Find" button - Persist - 1 - Type - String - Value - find_all_panel - - LastName - - Comment - Login last name - Persist - 1 - Type - String - Value - - - LastPrefTab - - Comment - Last selected tab in preferences window - Persist - 1 - Type - S32 - Value - 0 - - LastMediaSettingsTab - - Comment - Last selected tab in media settings window - Persist - 1 - Type - S32 - Value - 0 - - LastRunVersion - - Comment - Version number of last instance of the viewer that you ran - Persist - 1 - Type - String - Value - 0.0.0 - - - LastSnapshotToEmailHeight - - Comment - The height of the last email snapshot, in px - Persist - 1 - Type - S32 - Value - 768 - - LastSnapshotToEmailWidth - - Comment - The width of the last email snapshot, in px - Persist - 1 - Type - S32 - Value - 1024 - - LastSnapshotToDiskHeight - - Comment - The height of the last disk snapshot, in px - Persist - 1 - Type - S32 - Value - 768 - - LastSnapshotToDiskWidth - - Comment - The width of the last disk snapshot, in px - Persist - 1 - Type - S32 - Value - 1024 - - LastSnapshotToInventoryHeight - - Comment - The height of the last texture snapshot, in px - Persist - 1 - Type - S32 - Value - 512 - - LastSnapshotToInventoryWidth - - Comment - The width of the last texture snapshot, in px - Persist - 1 - Type - S32 - Value - 512 - - LastSnapshotType - - Comment - Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image) - Persist - 1 - Type - S32 - Value - 0 - - LeftClickShowMenu - - Comment - Left click opens pie menu (FALSE = left click touches or grabs object) - Persist - 1 - Type - Boolean - Value - 0 - - LimitDragDistance - - Comment - Limit translation of object via translate tool - Persist - 1 - Type - Boolean - Value - 1 - - LimitSelectDistance - - Comment - Disallow selection of objects beyond max select distance - Persist - 1 - Type - Boolean - Value - 1 - - LipSyncAah - - Comment - Aah (jaw opening) babble loop - Persist - 1 - Type - String - Value - 257998776531013446642343 - - LipSyncAahPowerTransfer - - Comment - Transfer curve for Voice Interface power to aah lip sync amplitude - Persist - 1 - Type - String - Value - 0000123456789 - - LipSyncEnabled - - Comment - 0 disable lip-sync, 1 enable babble loop - Persist - 1 - Type - Boolean - Value - 1 - - LipSyncOoh - - Comment - Ooh (mouth width) babble loop - Persist - 1 - Type - String - Value - 1247898743223344444443200000 - - LipSyncOohAahRate - - Comment - Rate to babble Ooh and Aah (/sec) - Persist - 1 - Type - F32 - Value - 24.0 - - LipSyncOohPowerTransfer - - Comment - Transfer curve for Voice Interface power to ooh lip sync amplitude - Persist - 1 - Type - String - Value - 0012345566778899 - - LocalCacheVersion - - Comment - Version number of cache - Persist - 1 - Type - S32 - Value - 0 - - LocalFileSystemBrowsingEnabled - - Comment - Enable/disable access to the local file system via the file picker - Persist - 1 - Type - Boolean - Value - 1 - - LoginSRVTimeout - - Comment - Duration in seconds of the login SRV request timeout - Persist - 0 - Type - F32 - Value - 10.0 - - LoginSRVPump - - Comment - Name of the message pump that handles SRV request - Persist - 0 - Type - String - Value - LLAres - - LogMessages - - Comment - Log network traffic - Persist - 1 - Type - Boolean - Value - 0 - - LogTextureNetworkTraffic - - Comment - Log network traffic for textures - Persist - 1 - Type - Boolean - Value - 0 - - LoginAsGod - - Comment - Attempt to login with god powers (Linden accounts only) - Persist - 1 - Type - Boolean - Value - 0 - - LoginLocation - - Comment - Login location ('last', 'home') - Persist - 1 - Type - String - Value - last - - LoginPage - - Comment - Login authentication page. - Persist - 1 - Type - String - Value - - - LosslessJ2CUpload - - Comment - Use lossless compression for small image uploads - Persist - 1 - Type - Boolean - Value - 0 - - MainloopTimeoutDefault - - Comment - Timeout duration for mainloop lock detection, in seconds. - Persist - 1 - Type - F32 - Value - 20.0 - - MapOverlayIndex - - Comment - Currently selected world map type - Persist - 1 - Type - S32 - Value - 0 - - MapScale - - Comment - World map zoom level (pixels per region) - Persist - 1 - Type - F32 - Value - 128.0 - - MapServerURL - - Comment - World map URL template for locating map tiles - Persist - 0 - Type - String - Value - http://map.secondlife.com.s3.amazonaws.com/ - - CurrentMapServerURL - - Comment - Current Session World map URL - Persist - 0 - Type - String - Value - - - MapShowEvents - - Comment - Show events on world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowInfohubs - - Comment - Show infohubs on the world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowLandForSale - - Comment - Show land for sale on world map - Persist - 1 - Type - Boolean - Value - 0 - - MapShowPeople - - Comment - Show other users on world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowTelehubs - - Comment - Show telehubs on world map - Persist - 1 - Type - Boolean - Value - 1 - - MiniMapAutoCenter - - Comment - Center the focal point of the minimap. - Persist - 0 - Type - Boolean - Value - 1 - - Marker - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - - - MarketplaceURL - - Comment - URL to the Marketplace - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/ - - MarketplaceURL_objectFemale - - Comment - URL to the Marketplace Attachments Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/attachments - - MarketplaceURL_objectMale - - Comment - URL to the Marketplace Attachments Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/attachments - - MarketplaceURL_clothingFemale - - Comment - URL to the Marketplace Clothing Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/clothing_female_avatar - - MarketplaceURL_clothingMale - - Comment - URL to the Marketplace Clothing Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/clothing_male_avatar - - MarketplaceURL_bodypartFemale - - Comment - URL to the Marketplace Bodyparts Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com - - MarketplaceURL_bodypartMale - - Comment - URL to the Marketplace Bodyparts Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/ - - MarketplaceURL_glovesMale - - Comment - URL to the Marketplace Gloves Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/gloves_both_women_and_men - - MarketplaceURL_glovesFemale - - Comment - URL to the Marketplace Gloves Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/gloves_both_women_and_men - - MarketplaceURL_jacketFemale - - Comment - URL to the Marketplace Jacket Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/jacket_womens - - MarketplaceURL_jacketMale - - Comment - URL to the Marketplace Jacket Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/jacket_mens - - MarketplaceURL_shirtFemale - - Comment - URL to the Marketplace Shirt Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/shirt_womens - - MarketplaceURL_shirtMale - - Comment - URL to the Marketplace Shirt Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/shirt_mens - - MarketplaceURL_undershirtFemale - - Comment - URL to the Marketplace Undershirt Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/undershirt_womens - - MarketplaceURL_undershirtMale - - Comment - URL to the Marketplace Undershirt Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/undershirt_mens - - MarketplaceURL_skirtFemale - - Comment - URL to the Marketplace Skirt Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/skirts_women - - MarketplaceURL_skirtMale - - Comment - URL to the Marketplace Skirt Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/skirts_women - - MarketplaceURL_pantsFemale - - Comment - URL to the Marketplace Pants Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/pants_women - - MarketplaceURL_pantsMale - - Comment - URL to the Marketplace Pants Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/pants_men - - MarketplaceURL_underpantsFemale - - Comment - URL to the Marketplace Underwear Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/underwear_women - - MarketplaceURL_underpantsMale - - Comment - URL to the Marketplace Underwear Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/underwear_men - - MarketplaceURL_shoesFemale - - Comment - URL to the Marketplace Shoes Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/shoes_women - - MarketplaceURL_shoesMale - - Comment - URL to the Marketplace Shoes Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/shoes_men - - MarketplaceURL_socksFemale - - Comment - URL to the Marketplace Socks Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/socks_women - - MarketplaceURL_socksMale - - Comment - URL to the Marketplace Socks Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/socks_women - - MarketplaceURL_tattooMale - - Comment - URL to the Marketplace Tattoo Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/tattoo_both_women_and_men - - MarketplaceURL_tattooFemale - - Comment - URL to the Marketplace Tattoo Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/tattoo_both_women_and_men - - MarketplaceURL_hairFemale - - Comment - URL to the Marketplace Hair Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/womens_hair - - MarketplaceURL_hairMale - - Comment - URL to the Marketplace Hair Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/mens_hair - - MarketplaceURL_eyesFemale - - Comment - URL to the Marketplace Eyes Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/womens_eyes - - MarketplaceURL_eyesMale - - Comment - URL to the Marketplace Eyes Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/mens_eyes - - MarketplaceURL_shapeFemale - - Comment - URL to the Marketplace Shape Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/womens_shape - - MarketplaceURL_shapeMale - - Comment - URL to the Marketplace Shape Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/mens_shape - - MarketplaceURL_skinFemale - - Comment - URL to the Marketplace Skin Female - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/womens_skin - - MarketplaceURL_skinMale - - Comment - URL to the Marketplace Skins Male - Persist - 0 - Type - String - Value - http://marketplace.secondlife.com/trampoline/viewer21/mens_skin - - MaxDragDistance - - Comment - Maximum allowed translation distance in a single operation of translate tool (meters from start point) - Persist - 1 - Type - F32 - Value - 48.0 - - MaxSelectDistance - - Comment - Maximum allowed selection distance (meters from avatar) - Persist - 1 - Type - F32 - Value - 64.0 - - MaxWearableWaitTime - - Comment - Max seconds to wait for wearable assets to fetch. - Persist - 1 - Type - F32 - Value - 60.0 - - MediaControlFadeTime - - Comment - Amount of time (in seconds) that the media control fades - Persist - 1 - Type - F32 - Value - 1.5 - - MediaControlTimeout - - Comment - Amount of time (in seconds) for media controls to fade with no mouse activity - Persist - 1 - Type - F32 - Value - 3.0 - - MediaEnablePopups - - Comment - If true, enable targeted links and javascript in media to open new media browser windows without a prompt. - Persist - 1 - Type - Boolean - Value - 0 - - MediaOnAPrimUI - - Comment - Whether or not to show the "link sharing" UI - Persist - 1 - Type - Boolean - Value - 1 - - MediaPerformanceManagerDebug - - Comment - Whether to show debug data for the media performance manager in the nearby media list. - Persist - 1 - Type - Boolean - Value - 0 - - MediaShowOnOthers - - Comment - Whether or not to show media on other avatars - Persist - 1 - Type - Boolean - Value - 0 - - MediaShowOutsideParcel - - Comment - Whether or not to show media from outside the current parcel - Persist - 1 - Type - Boolean - Value - 1 - - MediaShowWithinParcel - - Comment - Whether or not to show media within the current parcel - Persist - 1 - Type - Boolean - Value - 1 - - MediaTentativeAutoPlay - - Comment - This is a tentative flag that may be temporarily set off by the user, until she teleports - Persist - 0 - Type - Boolean - Value - 1 - - MemoryLogFrequency - - Comment - Seconds between display of Memory in log (0 for never) - Persist + AnimateTextures + + Comment + Enable texture animation (debug) + Persist + 1 + Type + Boolean + Value 1 - Type - F32 - Value - 600.0 - MemProfiling - - Comment - You want to use tcmalloc's memory profiling options. - Persist - 1 - Type - Boolean - Value - 0 - - MenuAccessKeyTime - - Comment - Time (seconds) in which the menu key must be tapped to move focus to the menu bar - Persist - 1 - Type - F32 - Value - 0.25 - - MenuBarHeight - - Comment - - Persist - 0 - Type - S32 - Value - 18 - - MenuBarWidth - - Comment - - Persist - 0 - Type - S32 - Value - 410 - - MePanelOpened - - Comment - Indicates that Me Panel was opened at least once after Viewer was installed - Persist - 1 - Type - Boolean - Value - 0 - - MeshEnabled - - Comment - Expose UI for mesh functionality (may require restart to take effect). - Persist - 1 - Type - Boolean - Value - 1 - - MeshImportUseSLM - - Comment - Use cached copy of last upload for a dae if available instead of loading dae file from scratch. - Persist - 1 - Type - Boolean - Value - 0 - - MeshUploadLogXML - - Comment - Verbose XML logging on mesh upload - Persist - 1 - Type - Boolean - Value - 0 - - MeshUploadFakeErrors - - Comment - Force upload errors (for testing) - Persist - 1 - Type - S32 - Value - 0 - - MigrateCacheDirectory - - Comment - Check for old version of disk cache to migrate to current location - Persist - 1 - Type - Boolean - Value - 1 - - MiniMapPrimMaxRadius - - Comment - Radius of the largest prim to show on the MiniMap. Increasing beyond 256 may cause client lag. - Persist - 1 - Type - F32 - Value - 256.0 - - MiniMapRotate - - Comment - Rotate miniature world map to avatar direction - Persist - 1 - Type - Boolean - Value - 1 - - MiniMapScale - - Comment - Miniature world map zoom level (pixels per region) - Persist - 1 - Type - F32 - Value - 128.0 - - MouseSensitivity - - Comment - Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity) - Persist - 1 - Type - F32 - Value - 3.0 - - MouseSmooth - - Comment - Smooths out motion of mouse when in mouselook mode. - Persist - 1 - Type - Boolean - Value - 0 - - MouseSun - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - MuteAmbient - - Comment - Ambient sound effects, such as wind noise, play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - - MuteAudio - - Comment - All audio plays at 0 volume (streaming audio still takes up bandwidth, for example) - Persist - 1 - Type - Boolean - Value - 0 - - MuteMedia - - Comment - Media plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - - MuteMusic - - Comment - Music plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - - MuteSounds - - Comment - Sound effects play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - - MuteUI - - Comment - UI sound effects play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - - MuteVoice - - Comment - Voice plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - - MuteWhenMinimized - - Comment - Mute audio when SL window is minimized - Persist - 1 - Type - Boolean - Value - 0 - - MyOutfitsAutofill - - Comment - Always autofill My Outfits from library when empty (else happens just once). - Persist - 1 - Type - Boolean - Value - 0 - - NearMeRange - - Comment - Search radius for nearby avatars - Persist - 1 - Type - F32 - Value - 130 - - NextOwnerCopy - - Comment - Newly created objects can be copied by next owner - Persist - 1 - Type - Boolean - Value - 0 - - NextOwnerModify - - Comment - Newly created objects can be modified by next owner - Persist - 1 - Type - Boolean - Value - 0 - - NextOwnerTransfer - - Comment - Newly created objects can be resold or given away by next owner - Persist - 1 - Type - Boolean - Value - 1 - - NewCacheLocation - - Comment - Change the location of the local disk cache to this - Persist - 1 - Type - String - Value - - - NewCacheLocationTopFolder - - Comment - Change the top folder location of the local disk cache to this - Persist - 1 - Type - String - Value - - - NextLoginLocation - - Comment - Location to log into by default. - Persist - 1 - Type - String - Value - - - NoAudio - - Comment - Disable audio playback. - Persist - 1 - Type - Boolean - Value - 0 - - NoHardwareProbe - - Comment - Disable hardware probe. - Persist - 1 - Type - Boolean - Value - 0 - - NoInventoryLibrary - - Comment - Do not request inventory library. - Persist - 1 - Type - Boolean - Value - 0 - - NoPreload - - Comment - Disable sound and image preload. - Persist - 1 - Type - Boolean - Value - 0 - - NoVerifySSLCert - - Comment - Do not verify SSL peers. - Persist - 1 - Type - Boolean - Value - 0 - - NotifyBoxHeight - - Comment - Height of notification messages - Persist - 1 - Type - S32 - Value - 200 - - NotifyBoxWidth - - Comment - Width of notification messages - Persist - 1 - Type - S32 - Value - 305 - - NotificationToastLifeTime - - Comment - Number of seconds while a notification toast exists - Persist - 1 - Type - S32 - Value - 5 - - NotificationTipToastLifeTime - - Comment - Number of seconds while a notification tip toast exist - Persist - 1 - Type - S32 - Value - 10 - - ToastFadingTime - - Comment - Number of seconds while a toast is fading - Persist - 1 - Type - S32 - Value - 1 - - NearbyToastFadingTime - - Comment - Number of seconds while a nearby chat toast is fading - Persist - 1 - Type - S32 - Value - 3 - - NearbyToastLifeTime - - Comment - Number of seconds while a nearby chat toast exists - Persist - 1 - Type - S32 - Value - 23 - - StartUpToastLifeTime - - Comment - Number of seconds while a StartUp toast exist - Persist - 1 - Type - S32 - Value - 5 - - ToastGap - - Comment - Gap between toasts on a screen (min. value is 5) - Persist - 1 - Type - S32 - Value - 7 - - ToastButtonWidth - - Comment - Default width of buttons in the toast. - Notes: - If required width will be less then this one, a button will be reshaped to default size , otherwise to required - Change of this parameter will affect the layout of buttons in notification toast. - Persist - 1 - Type - S32 - Value - 90 - - ChannelBottomPanelMargin - - Comment - Space from a lower toast to the Bottom Tray - Persist - 1 - Type - S32 - Value - 35 - - NotificationChannelRightMargin - - Comment - Space between toasts and a right border of an area where they can appear - Persist - 1 - Type - S32 - Value - 5 - - NotificationChannelHeightRatio - - Comment - Notification channel and World View ratio(0.0 - always show 1 notification, 1.0 - max ratio). - Persist - 1 - Type - F32 - Value - 0.5 - - OverflowToastHeight - - Comment - Height of an overflow toast - Persist - 1 - Type - S32 - Value - 72 - - NotifyMoneyChange - - Comment - Pop up notifications for all L$ transactions - Persist - 1 - Type - Boolean - Value - 1 - - NotifyTipDuration - - Comment - Length of time that notification tips stay on screen (seconds) - Persist - 1 - Type - F32 - Value - 4.0 - - NumSessions - - Comment - Number of successful logins to Second Life - Persist - 1 - Type - S32 - Value - 0 - - NumpadControl - - Comment - How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock) - Persist - 1 - Type - S32 - Value - 0 - - ObjectCacheEnabled - - Comment - Enable the object cache. - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatAdvanced - - Comment - Expand advanced performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatBasic - - Comment - Expand basic performance stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatNet - - Comment - Expand network stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatRender - - Comment - Expand render stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatSim - - Comment - Expand simulator performance stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatTexture - - Comment - Expand Texture performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatPhysicsDetails - - Comment - Expand Physics Details performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatSimTime - - Comment - Expand Simulator Time performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatSimTimeDetails - - Comment - Expand Simulator Time Details performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OutBandwidth - - Comment - Outgoing bandwidth throttle (bps) - Persist - 1 - Type - F32 - Value - 0.0 - - OverlayTitle - - Comment - Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces) - Persist - 1 - Type - String - Value - Set_via_OverlayTitle_in_settings.xml - - PTTCurrentlyEnabled - - Comment - Use Push to Talk mode - Persist - 0 - Type - Boolean - Value - 1 - - PacketDropPercentage - - Comment - Percentage of packets dropped by the client. - Persist - 1 - Type - F32 - Value - 0.0 - - ObjectCostHighThreshold - - Comment - Threshold at which object cost is considered high (displayed in red). - Persist - 1 - Type - F32 - Value - 50.0 - - ObjectCostLowColor - - Comment - Color for object with a low object cost. - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.5 - 1.0 - 0.5 - - - ObjectCostMidColor - - Comment - Color for object with a medium object cost. - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.75 - 0.0 - 0.65 - - - ObjectCostHighColor - - Comment - Color for object a high object cost. - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.0 - 0.0 - 0.75 - - - - ParcelMediaAutoPlayEnable - - Comment - Auto play parcel media when available - Persist - 1 - Type - Boolean - Value - 1 - - ParticipantListShowIcons - - Comment - Show/hide people icons in participant list - Persist - 1 - Type - Boolean - Value - 1 - - PerAccountSettingsFile - - Comment - Persisted client settings file name (per user). - Persist - 0 - Type - String - Value - - - PermissionsCautionEnabled - - Comment - When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission - Persist - 0 - Type - Boolean - Value - 1 - - PermissionsCautionNotifyBoxHeight - - Comment - Height of caution-style notification messages - Persist - 0 - Type - S32 - Value - 344 - - PickerContextOpacity - - Comment - Controls overall opacity of context frustrum connecting color and texture pickers with their swatches - Persist - 1 - Type - F32 - Value - 0.34999999404 - - PicksPerSecondMouseMoving - - Comment - How often to perform hover picks while the mouse is moving (picks per second) - Persist - 1 - Type - F32 - Value - 5.0 - - PicksPerSecondMouseStationary - - Comment - How often to perform hover picks while the mouse is stationary (picks per second) - Persist - 1 - Type - F32 - Value - 0.0 - - PieMenuLineWidth - - Comment - Width of lines in pie menu display (pixels) - Persist - 1 - Type - F32 - Value - 2.5 - - PingInterpolate - - Comment - Extrapolate object position along velocity vector based on ping delay - Persist - 1 - Type - Boolean - Value - 0 - - PitchFromMousePosition - - Comment - Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom) - Persist - 1 - Type - F32 - Value - 90.0 - - PlayTypingAnim - - Comment - Your avatar plays the typing animation whenever you type in the chat bar - Persist - 1 - Type - Boolean - Value - 1 - - PluginAttachDebuggerToPlugins - - Comment - If true, attach a debugger session to each plugin process as it's launched. - Persist - 1 - Type - Boolean - Value - 0 - - PluginInstancesCPULimit - - Comment - Amount of total plugin CPU usage before inworld plugins start getting turned down to "slideshow" priority. Set to 0 to disable this check. - Persist - 1 - Type - F32 - Value - 0.9 - - - PlainTextChatHistory - - Comment - Enable/Disable plain text chat history style - Persist - 1 - Type - Boolean - Value - 0 - - - PluginInstancesLow - - Comment - Limit on the number of inworld media plugins that will run at "low" priority - Persist - 1 - Type - U32 - Value - 4 - - PluginInstancesNormal - - Comment - Limit on the number of inworld media plugins that will run at "normal" or higher priority - Persist - 1 - Type - U32 - Value - 2 - - PluginInstancesTotal - - Comment - Hard limit on the number of plugins that will be instantiated at once for inworld media - Persist - 1 - Type - U32 - Value - 8 - - - PluginUseReadThread - - Comment - Use a separate thread to read incoming messages from plugins - Persist - 1 - Type - Boolean - Value - 0 - - PostFirstLoginIntroURL - - Comment - URL of intro presenatation after first time users first login - Persist - 1 - Type - String - Value - - - PostFirstLoginIntroViewed - - Comment - Flag indicating if user has seen intro presenatation after first time users first login - Persist - 1 - Type - Boolean - Value - 0 - - PrecachingDelay - - Comment - Delay when logging in to load world before showing it (seconds) - Persist - 1 - Type - F32 - Value - 6.0 - - PreferredMaturity - - Comment - Setting for the user's preferred maturity level (consts in indra_constants.h) - Persist - 1 - Type - U32 - Value - 13 - - - PreviewAmbientColor - - Comment - Ambient color of preview render. - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.0 - 0.0 - 1.0 - - - - - PreviewDiffuse0 - - Comment - Diffise color of preview light 0. - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - - PreviewDiffuse1 - - Comment - Diffise color of preview light 1. - Persist - 1 - Type - Color4 - Value - - 0.25 - 0.25 - 0.25 - 1.0 - - - - PreviewDiffuse2 - - Comment - Diffise color of preview light 2. - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - - PreviewSpecular0 - - Comment - Diffise color of preview light 0. - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - - PreviewSpecular1 - - Comment - Diffise color of preview light 1. - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - - PreviewSpecular2 - - Comment - Diffise color of preview light 2. - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - - - PreviewDirection0 - - Comment - Direction of light 0 for preview render. - Persist - 1 - Type - Vector3 - Value - - -0.75 - 1 - 1.0 - - - - PreviewDirection1 - - Comment - Direction of light 1 for preview render. - Persist - 1 - Type - Vector3 - Value - - 0.5 - -0.6 - 0.4 - - - - PreviewDirection2 - - Comment - Direction of light 2 for preview render. - Persist - 1 - Type - Vector3 - Value - - 0.5 - -0.8 - 0.3 - - - - PrimMediaMasterEnabled - - Comment - Whether or not Media on a Prim is enabled. - Persist - 1 - Type - Boolean - Value - 1 - - PrimMediaControlsUseHoverControlSet - - Comment - Whether or not hovering over prim media uses minimal "hover" controls or the authored control set. - Persist - 1 - Type - Boolean - Value - 0 - - PrimMediaDragNDrop - - Comment - Enable drag and drop of URLs onto prim faces - Persist - 1 - Type - Boolean - Value - 1 - - PrimMediaMaxRetries - - Comment - Maximum number of retries for media queries. - Persist - 1 - Type - U32 - Value - 4 - - PrimMediaRequestQueueDelay - - Comment - Timer delay for fetching media from the queue (in seconds). - Persist - 1 - Type - F32 - Value - 1.0 - - PrimMediaRetryTimerDelay - - Comment - Timer delay for retrying on media queries (in seconds). - Persist - 1 - Type - F32 - Value - 5.0 - - PrimMediaMaxSortedQueueSize - - Comment - Maximum number of objects the viewer will load media for initially - Persist - 1 - Type - U32 - Value - 100000 - - PrimMediaMaxRoundRobinQueueSize - - Comment - Maximum number of objects the viewer will continuously update media for - Persist - 1 - Type - U32 - Value - 100000 - - ProbeHardwareOnStartup - - Comment - Query current hardware configuration on application startup - Persist - 1 - Type - Boolean - Value - 1 - - PurgeCacheOnNextStartup - - Comment - Clear local file cache next time viewer is run - Persist - 1 - Type - Boolean - Value - 0 - - PurgeCacheOnStartup - - Comment - Clear local file cache every time viewer is run - Persist - 1 - Type - Boolean - Value - 0 - - PushToTalkButton - - Comment - Which button or keyboard key is used for push-to-talk - Persist - 1 - Type - String - Value - MiddleMouse - - PushToTalkToggle - - Comment - Should the push-to-talk button behave as a toggle - Persist - 1 - Type - Boolean - Value - 1 - - QAMode - - Comment - Enable Testing Features. - Persist - 1 - Type - Boolean - Value - 0 - - QAModeEventHostPort - - Comment - Port on which lleventhost should listen - Persist - 0 - Type - S32 - Value - -1 - - QAModeTermCode - - Comment - On LL_ERRS, terminate with this code instead of OS message box - Persist - 0 - Type - S32 - Value - -1 - - QuietSnapshotsToDisk - - Comment - Take snapshots to disk without playing animation or sound - Persist - 1 - Type - Boolean - Value - 0 - - QuitAfterSeconds - - Comment - The duration allowed before quitting. - Persist - 1 - Type - F32 - Value - 0.0 - - QuitAfterSecondsOfAFK - - Comment - The duration allowed after being AFK before quitting. - Persist - 1 - Type - F32 - Value - 0.0 - - QuitOnLoginActivated - - Comment - Quit if login page is activated (used when auto login is on and users must not be able to login manually) - Persist - 1 - Type - Boolean - Value - 0 - - RadioLandBrushAction - - Comment - Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert) - Persist - 1 - Type - S32 - Value - 0 - - RadioLandBrushSize - - Comment - Size of land modification brush (0 = small, 1 = medium, 2 = large) - Persist - 1 - Type - S32 - Value - 0 - - LandBrushForce + AnimationDebug - Comment - Multiplier for land modification brush force. - Persist + Comment + Show active animations in a bubble above avatars head + Persist + 1 + Type + Boolean + Value + 0 + + AppearanceCameraMovement + + Comment + When entering appearance editing mode, camera zooms in on currently selected portion of avatar + Persist + 1 + Type + Boolean + Value + 1 + + ApplyColorImmediately + + Comment + Preview selections in color picker immediately + Persist + 1 + Type + Boolean + Value + 1 + + ApplyTextureImmediately + + Comment + Preview selections in texture picker immediately + Persist + 1 + Type + Boolean + Value + 1 + + ArrowKeysAlwaysMove + + Comment + While cursor is in chat entry box, arrow keys still control your avatar + Persist + 1 + Type + Boolean + Value + 0 + + AskedAboutCrashReports + + Comment + Turns off dialog asking if you want to enable crash reporting + Persist + 1 + Type + Boolean + Value + 0 + + AuctionShowFence + + Comment + When auctioning land, include parcel boundary marker in snapshot + Persist + 1 + Type + Boolean + Value + 1 + + AudioLevelAmbient + + Comment + Audio level of environment sounds + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelDoppler + + Comment + Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect) + Persist 1 - Type + Type F32 - Value + Value 1.0 - MediaBrowserWindowLimit - - Comment - Maximum number of media brower windows that can be open at once in the media browser floater (0 for no limit) - Persist - 1 - Type - S32 - Value - 5 - - WebContentWindowLimit - - Comment - Maximum number of web brower windows that can be open at once in the Web content floater (0 for no limit) - Persist - 1 - Type - S32 - Value - 5 - - MediaRollOffRate - - Comment - Multiplier to change rate of media attenuation - Persist - 1 - Type - F32 - Value - 0.125 - - MediaRollOffMin - - Comment - Adjusts the distance at which media attentuation starts - Persist - 1 - Type - F32 - Value - 5.0 - - MediaRollOffMax - - Comment - Distance at which media volume is set to 0 - Persist - 1 - Type - F32 - Value - 30.0 - - RecentItemsSortOrder - - Comment - Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 1 - - RectangleSelectInclusive - - Comment - Select objects that have at least one vertex inside selection rectangle - Persist - 1 - Type - Boolean - Value - 1 - - RegInClient - - Comment - Experimental: Embed registration in login screen - Persist - 1 - Type - Boolean - Value - 0 - - QuickBuyCurrency - - Comment - Toggle between HTML based currency purchase floater and legacy XUI version - Persist - 1 - Type - Boolean - Value - 0 - - RegionTextureSize - - Comment - Terrain texture dimensions (power of 2) - Persist - 1 - Type - U32 - Value - 256 - - RememberPassword - - Comment - Keep password (in encrypted form) for next login - Persist - 1 - Type - Boolean - Value - 1 - - - OctreeMaxNodeCapacity - - Comment - Maximum number of elements to store in a single octree node - Persist - 1 - Type - U32 - Value - 128 - - - OctreeStaticObjectSizeFactor - - Comment - Multiplier on static object size for determining octree node size - Persist - 1 - Type - S32 - Value - 4 - - - OctreeAlphaDistanceFactor - - Comment - Multiplier on alpha object distance for determining octree node size - Persist - 1 - Type - Vector3 - Value - - 0.1 - 0.0 - 0.0 - - - - OctreeAttachmentSizeFactor - - Comment - Multiplier on attachment size for determining octree node size - Persist - 1 - Type - S32 - Value - 4 - - - OctreeDistanceFactor - - Comment - Multiplier on distance for determining octree node size - Persist - 1 - Type - Vector3 - Value - - 0.01 - 0.0 - 0.0 - - - - RenderAnisotropic - - Comment - Render textures using anisotropic filtering - Persist - 1 - Type - Boolean - Value - 0 - - RenderAppleUseMultGL - - Comment - Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL). - Persist - 1 - Type - Boolean - Value - 0 - - RenderAttachedLights + AudioLevelMaster - Comment - Render lighted prims that are attached to avatars - Persist + Comment + Master audio level, or overall volume + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelMedia + + Comment + Audio level of Quicktime movies + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelMic + + Comment + Audio level of microphone input + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelMusic + + Comment + Audio level of streaming music + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelRolloff + + Comment + Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff) + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelSFX + + Comment + Audio level of in-world sound effects + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelUI + + Comment + Audio level of UI sound effects + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelVoice + + Comment + Audio level of voice chat + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelWind + + Comment + Audio level of wind noise when standing still + Persist + 1 + Type + F32 + Value + 0.5 + + AudioStreamingMedia + + Comment + Enable streaming + Persist 1 - Type + Type Boolean - Value + Value 1 - RenderAttachedParticles + AudioStreamingMusic - Comment - Render particle systems that are attached to avatars - Persist + Comment + Enable streaming audio + Persist 1 - Type + Type Boolean - Value + Value 1 - RenderAvatar - - Comment - Render Avatars - Persist - 0 - Type - Boolean - Value - 1 - - RenderAvatarCloth - - Comment - Controls if avatars use wavy cloth - Persist - 1 - Type - Boolean - Value - 1 - - RenderAvatarLODFactor - - Comment - Controls level of detail of avatars (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 0.5 - - RenderAvatarMaxVisible - - Comment - Maximum number of avatars to display at any one time - Persist - 1 - Type - S32 - Value - 12 - - RenderAvatarPhysicsLODFactor - - Comment - Controls level of detail of avatar physics (such as breast physics). - Persist - 1 - Type - F32 - Value - 1.0 - - RenderAvatarVP - - Comment - Use vertex programs to perform hardware skinning of avatar - Persist - 1 - Type - Boolean - Value - 1 - - RenderPerformanceTest - - Comment - Disable rendering of everything but in-world content for - performance testing - Persist - 1 - Type - Boolean - Value - 0 - - - RenderLocalLights - - Comment - Whether or not to render local lights. - Persist - 1 - Type - Boolean - Value - 1 - - - RenderShadowNearDist - - Comment - Near clip plane of shadow camera (affects precision of depth shadows). - Persist - 1 - Type - Vector3 - Value - - 256 - 256 - 256 - - - RenderShadowClipPlanes - - Comment - Near clip plane split distances for shadow map frusta. - Persist - 1 - Type - Vector3 - Value - - 1.0 - 12.0 - 32.0 - - - RenderShadowSplitExponent - - Comment - Near clip plane split distances for shadow map frusta (x=perspective, y=ortho, z=transition rate). - Persist - 1 - Type - Vector3 - Value - - 3.0 - 3.0 - 2.0 - - - RenderShadowOrthoClipPlanes - - Comment - Near clip plane split distances for orthographic shadow map frusta. - Persist - 1 - Type - Vector3 - Value - - 4.0 - 8.0 - 24.0 - - - RenderShadowProjOffset - - Comment - Amount to scale distance to virtual origin of shadow perspective projection. - Persist - 1 - Type - F32 - Value - 2.0 - - RenderShadowSlopeThreshold - - Comment - Cutoff slope value for points to affect perspective shadow generation - Persist - 1 - Type - F32 - Value - 0.0 - - RenderShadowProjExponent - - Comment - Exponent applied to transition between ortho and perspective shadow projections based on viewing angle and light vector. - Persist - 1 - Type - F32 - Value - 0.5 - - RenderSSAOScale - - Comment - Scaling factor for the area to sample for occluders (pixels at 1 meter away, inversely varying with distance) - Persist - 1 - Type - F32 - Value - 500.0 - - RenderSSAOMaxScale - - Comment - Maximum screen radius for sampling (pixels) - Persist - 1 - Type - U32 - Value - 200 - - RenderSSAOFactor - - Comment - Occlusion sensitivity factor for ambient occlusion (larger is more) - Persist - 1 - Type - F32 - Value - 0.30 - - RenderSSAOEffect - - Comment - Multiplier for (1) value and (2) saturation (HSV definition), for areas which are totally occluded. Blends with original color for partly-occluded areas. (Third component is unused.) - Persist - 1 - Type - Vector3 - Value - - 0.80 - 1.00 - 0.00 - - - RenderBumpmapMinDistanceSquared - - Comment - Maximum distance at which to render bumpmapped primitives (distance in meters, squared) - Persist - 1 - Type - F32 - Value - 100.0 - - RenderNormalMapScale - - Comment - Scaler applied to height map when generating normal maps - Persist - 1 - Type - F32 - Value - 64 - - RenderCubeMap - - Comment - Whether we can render the cube map or not - Persist - 1 - Type - Boolean - Value - 1 - - RenderDebugAlphaMask - - Comment - Test Alpha Masking Cutoffs. - Persist - 1 - Type - F32 - Value - 0.5 - - RenderDebugGL - - Comment - Enable strict GL debugging. - Persist - 1 - Type - Boolean - Value - 0 - - RenderDebugNormalScale - - Comment - Scale of normals in debug display. - Persist - 1 - Type - F32 - Value - 0.03 - - RenderDebugPipeline - - Comment - Enable strict pipeline debugging. - Persist - 1 - Type - Boolean - Value - 0 - - RenderMaxTextureIndex - - Comment - Maximum texture index to use for indexed texture rendering. - Persist - 1 - Type - U32 - Value - 6 - - RenderDebugTextureBind - - Comment - Enable texture bind performance test. - Persist - 1 - Type - Boolean - Value - 0 - - RenderDelayCreation - - Comment - Throttle creation of drawables. - Persist - 1 - Type - Boolean - Value - 0 - - - RenderAnimateRes - - Comment - Animate rezing prims. - Persist - 1 - Type - Boolean - Value - 0 - - - RenderBakeSunlight - - Comment - Bake sunlight into vertex buffers for static objects. - Persist - 1 - Type - Boolean - Value - 0 - - - RenderNoAlpha - - Comment - Disable rendering of alpha objects (render all alpha objects as alpha masks). - Persist - 1 - Type - Boolean - Value - 0 - - - RenderAnimateTrees - - Comment - Use GL matrix ops to animate tree branches. - Persist - 1 - Type - Boolean - Value - 0 - - - RenderGIRange - - Comment - Distance to cut off GI effect. - Persist - 1 - Type - F32 - Value - 96 - - - RenderGILuminance - - Comment - Luminance factor of global illumination contribution. - Persist - 1 - Type - F32 - Value - 0.075 - - - RenderGIBrightness - - Comment - Brightness factor of global illumination contribution. - Persist - 1 - Type - F32 - Value - 0.3 - - - RenderGINoise - - Comment - Noise of position sampling for GI photon mapping. - Persist - 1 - Type - F32 - Value - 0.7 - - - RenderGIAttenuation - - Comment - Distance attenuation factor for indirect lighting. - Persist - 1 - Type - F32 - Value - 0.1 - - - RenderGIBlurBrightness - - Comment - Brightness factor of global illumination blur effect. - Persist - 1 - Type - F32 - Value - 1.025 - - - RenderGIBlurEdgeWeight - - Comment - Edge weight for GI soften filter (sharpness). - Persist - 1 - Type - F32 - Value - 0.8 - - - RenderGIBlurIncrement - - Comment - Increment of scale for each pass of global illumination blur effect. - Persist - 1 - Type - F32 - Value - 0.8 - - - RenderLuminanceScale - - Comment - Luminance value scalar for darkening effect. - Persist - 1 - Type - F32 - Value - 1.0 - - - RenderSunLuminanceScale - - Comment - Sun Luminance value scalar for darkening effect. - Persist - 1 - Type - F32 - Value - 1.0 - - - RenderSunLuminanceOffset - - Comment - Sun Luminance value offset for darkening effect. - Persist - 1 - Type - F32 - Value - 0 - - - RenderLuminanceDetail - - Comment - Mipmap level to use for luminance - Persist - 1 - Type - F32 - Value - 16.0 - - - RenderMinimumLODTriangleCount - - Comment - Triangle count threshold at which automatic LOD generation stops - Persist - 1 - Type - U32 - Value - 16 - - - RenderEdgeDepthCutoff - - Comment - Cutoff for depth difference that amounts to an edge. - Persist - 1 - Type - F32 - Value - 0.01 - - RenderEdgeNormCutoff - - Comment - Cutoff for normal difference that amounts to an edge. - Persist - 1 - Type - F32 - Value - 0.25 - - - RenderDeferredAlphaSoften - - Comment - Scalar for softening alpha surfaces (for soft particles). - Persist - 1 - Type - F32 - Value - 0.75 - - RenderDeferredNoise - - Comment - Noise scalar to hide banding in deferred render. - Persist - 1 - Type - F32 - Value - 4 - - RenderDeferredSpotShadowBias - - Comment - Bias value for spot shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - -64.0 - - RenderDeferredSpotShadowOffset - - Comment - Offset value for spot shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - 0.8 - - - RenderShadowBias - - Comment - Bias value for shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - -0.008 - - RenderShadowOffset - - Comment - Offset value for shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - 0.01 - - RenderShadowBiasError - - Comment - Error scale for shadow bias (based on altitude). - Persist - 1 - Type - F32 - Value - 0 - - RenderShadowOffsetError - - Comment - Error scale for shadow offset (based on altitude). - Persist - 1 - Type - F32 - Value - 0 - - - RenderDepthOfField - - Comment - Whether to use depth of field effect when lighting and shadows are enabled - Persist - 1 - Type - Boolean - Value - 0 - - - RenderSpotLightsInNondeferred - - Comment - Whether to support projectors as spotlights when Lighting and Shadows is disabled - Persist - 1 - Type - Boolean - Value - 0 - - - RenderSpotShadowBias - - Comment - Bias value for shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - -0.001 - - RenderSpotShadowOffset - - Comment - Offset value for shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - 0.04 - - - RenderShadowResolutionScale - - Comment - Scale of shadow map resolution vs. screen resolution - Persist - 1 - Type - F32 - Value - 1.0 - - - RenderDeferredTreeShadowBias - - Comment - Bias value for tree shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - 1.0 - - RenderDeferredTreeShadowOffset - - Comment - Offset value for tree shadows (prevent shadow acne). - Persist - 1 - Type - F32 - Value - 1.0 - - - RenderHoverGlowEnable - - Comment - Show glow effect when hovering on interactive objects. - Persist - 1 - Type - Boolean - Value - 0 - - - RenderHighlightFadeTime - - Comment - Transition time for mouseover highlights. - Persist - 1 - Type - F32 - Value - 0.1 - - - RenderHighlightBrightness - - Comment - Brightness of mouseover highlights. - Persist - 1 - Type - F32 - Value - 4.0 - - - RenderHighlightThickness - - Comment - Thickness of mouseover highlights. - Persist - 1 - Type - F32 - Value - 0.6 - - - RenderHighlightColor - - Comment - Brightness of mouseover highlights. - Persist - 1 - Type - Color4 - Value - - 0.4 - 0.98 - 0.93 - 1.0 - - - - RenderSpecularResX - - Comment - Spec map resolution. - Persist - 1 - Type - U32 - Value - 128 - - - RenderSpecularResY - - Comment - Spec map resolution. - Persist - 1 - Type - U32 - Value - 128 - - - RenderSpecularExponent - - Comment - Specular exponent for generating spec map - Persist - 1 - Type - F32 - Value - 8 - - - RenderDeferred - - Comment - Use deferred rendering pipeline. - Persist - 1 - Type - Boolean - Value - 0 - - - RenderDeferredGI - - Comment - Enable GI in deferred renderer. - Persist - 1 - Type - Boolean - Value - 0 - - - RenderDeferredSun - - Comment - Execute sunlight shader in deferred renderer. - Persist - 1 - Type - Boolean - Value - 1 - - - RenderDeferredAtmospheric - - Comment - Execute atmospheric shader in deferred renderer. - Persist - 1 - Type - Boolean - Value - 1 - - - RenderDeferredSSAO - - Comment - Execute screen space ambient occlusion shader in deferred renderer. - Persist - 1 - Type - Boolean - Value - 1 - - - RenderDeferredBlurLight - - Comment - Execute shadow softening shader in deferred renderer. - Persist - 1 - Type - Boolean - Value - 1 - - - RenderDeferredSunWash - - Comment - Amount local lights are washed out by sun. - Persist - 1 - Type - F32 - Value - 0.5 - - RenderShadowNoise - - Comment - Magnitude of noise on shadow samples. - Persist - 1 - Type - F32 - Value - -0.0001 - - RenderShadowErrorCutoff - - Comment - Cutoff error value to use ortho instead of perspective projection. - Persist - 1 - Type - F32 - Value - 5.0 - - RenderShadowFOVCutoff - - Comment - Cutoff FOV to use ortho instead of perspective projection. - Persist - 1 - Type - F32 - Value - 0.8 - - - RenderShadowGaussian - - Comment - Gaussian coefficients for the two shadow/SSAO blurring passes (z component unused). - Persist - 1 - Type - Vector3 - Value - - 3.0 - 2.0 - 0.0 - - - - RenderShadowBlurSize - - Comment - Scale of shadow softening kernel. - Persist - 1 - Type - F32 - Value - 1.4 - - RenderShadowBlurSamples - - Comment - Number of samples to take for each pass of shadow blur (value range 1-16). Actual number of samples is value * 2 - 1. - Persist - 1 - Type - U32 - Value - 4 - - RenderShadowBlurDistFactor - - Comment - Distance scaler for shadow blur. - Persist - 1 - Type - F32 - Value - 0 - - - RenderGIAmbiance - - Comment - Ambiance factor of global illumination contribution. - Persist - 1 - Type - F32 - Value - 0.5 - - - RenderGIMinRenderSize - - Comment - Minimum size of objects to put into GI source map. - Persist - 1 - Type - F32 - Value - 0.5 - - - RenderGIBlurColorCurve - - Comment - Color curve for GI softening kernel - Persist - 1 - Type - Vector3 - Value - - 1.0 - 0.6 - 0.02 - - - - RenderGIBlurPasses - - Comment - Scale of GI softening kernel. - Persist - 1 - Type - U32 - Value - 4 - - - RenderGIBlurSize - - Comment - Scale of GI softening kernel. - Persist - 1 - Type - F32 - Value - 4.0 - - RenderGIBlurSamples - - Comment - Number of samples to take for each pass of GI blur (value range 1-16). Actual number of samples is value * 2 - 1. - Persist - 1 - Type - U32 - Value - 16 - - RenderGIBlurDistFactor - - Comment - Distance scaler for GI blur. - Persist - 1 - Type - F32 - Value - 0.0 - - - RenderDynamicLOD - - Comment - Dynamically adjust level of detail. - Persist - 1 - Type - Boolean - Value - 1 - - RenderFSAASamples - - Comment - Number of samples to use for FSAA (0 = no AA). - Persist - 1 - Type - U32 - Value - 0 - - RenderFarClip - - Comment - Distance of far clip plane from camera (meters) - Persist - 1 - Type - F32 - Value - 256.0 - - RenderAutoMaskAlphaNonDeferred - - Comment - Use alpha masks where appropriate, in the non-deferred (non-'Lighting and Shadows') graphics mode - Persist - 1 - Type - Boolean - Value - 0 - - RenderAutoMaskAlphaDeferred - - Comment - Use alpha masks where appropriate, in the deferred ('Lighting and Shadows') graphics mode - Persist - 1 - Type - Boolean - Value - 1 - - RenderFlexTimeFactor - - Comment - Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderFogRatio - - Comment - Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance) - Persist - 1 - Type - F32 - Value - 4.0 - - RenderGamma - - Comment - Sets gamma exponent for renderer - Persist - 1 - Type - F32 - Value - 0.0 - - RenderGammaFull - - Comment - Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2. - Persist - 1 - Type - Boolean - Value - 1.0 - - RenderGlow - - Comment - Render bloom post effect. - Persist - 1 - Type - Boolean - Value - 1 - - RenderGlowIterations - - Comment - Number of times to iterate the glow (higher = wider and smoother but slower) - Persist - 1 - Type - S32 - Value - 2 - - RenderGlowLumWeights - - Comment - Weights for each color channel to be used in calculating luminance (should add up to 1.0) - Persist - 1 - Type - Vector3 - Value - - 1 - 0 - 0 - - - RenderGlowMaxExtractAlpha - - Comment - Max glow alpha value for brightness extraction to auto-glow. - Persist - 1 - Type - F32 - Value - 0.25 - - RenderGlowMinLuminance - - Comment - Min luminance intensity necessary to consider an object bright enough to automatically glow. - Persist - 1 - Type - F32 - Value - 9999 - - RenderGlowResolutionPow - - Comment - Glow map resolution power of two. - Persist - 1 - Type - S32 - Value - 9 - - RenderGlowStrength - - Comment - Additive strength of glow. - Persist - 1 - Type - F32 - Value - 0.35 - - RenderGlowWarmthAmount - - Comment - Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth - Persist - 1 - Type - F32 - Value - 0.0 - - RenderGlowWarmthWeights - - Comment - Weight of each color channel used before finding the max warmth - Persist - 1 - Type - Vector3 - Value - - 1.0 - 0.5 - 0.7 - - - RenderGlowWidth - - Comment - Glow sample size (higher = wider and softer but eventually more pixelated) - Persist - 1 - Type - F32 - Value - 1.3 - - RenderGround - - Comment - Determines whether we can render the ground pool or not - Persist - 1 - Type - Boolean - Value - 1 - - RenderHUDInSnapshot - - Comment - Display HUD attachments in snapshot - Persist - 1 - Type - Boolean - Value - 0 - - RenderHUDParticles - - Comment - Display particle systems in HUD attachments (experimental) - Persist - 1 - Type - Boolean - Value - 0 - - RenderHighlightSelections - - Comment - Show selection outlines on objects - Persist - 0 - Type - Boolean - Value - 1 - - RenderHiddenSelections - - Comment - Show selection lines on objects that are behind other objects - Persist - 1 - Type - Boolean - Value - 0 - - RenderHideGroupTitle - - Comment - Don't show my group title in my name label - Persist - 1 - Type - Boolean - Value - 0 - - NameTagShowGroupTitles - - Comment - Show group titles in name labels - Persist - 1 - Type - Boolean - Value - 0 - - NameTagShowDisplayNames - - Comment - Show display names in name labels - Persist - 1 - Type - Boolean - Value - 1 - - NameTagShowFriends - - Comment - Highlight the name tags of your friends - Persist - 1 - Type - Boolean - Value - 0 - - NameTagShowUsernames - - Comment - Show usernames in avatar name tags - Persist - 1 - Type - Boolean - Value - 1 - - RenderInitError - - Comment - Error occured while initializing GL - Persist - 1 - Type - Boolean - Value - 0 - - RenderLightRadius - - Comment - Render the radius of selected lights - Persist - 1 - Type - Boolean - Value - 0 - - RenderMaxPartCount - - Comment - Maximum number of particles to display on screen - Persist - 1 - Type - S32 - Value - 4096 - - RenderMaxNodeSize - - Comment - Maximum size of a single node's vertex data (in KB). - Persist - 1 - Type - S32 - Value - 65536 - - RenderMaxVBOSize - - Comment - Maximum size of a vertex buffer (in KB). - Persist - 1 - Type - S32 - Value - 512 - - RenderNameFadeDuration - - Comment - Time interval over which to fade avatar names (seconds) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderNameShowSelf - - Comment - Display own name above avatar - Persist - 1 - Type - Boolean - Value - 1 - - RenderNameShowTime - - Comment - Fade avatar names after specified time (seconds) - Persist - 1 - Type - F32 - Value - 10.0 - - RenderObjectBump - - Comment - Show bumpmapping on primitives - Persist - 1 - Type - Boolean - Value - 1 - - RenderQualityPerformance - - Comment - Which graphics settings you've chosen - Persist - 1 - Type - U32 - Value - 1 - - RenderReflectionDetail - - Comment - Detail of reflection render pass. - Persist - 1 - Type - S32 - Value - 2 - - RenderShadowDetail - - Comment - Detail of shadows. - Persist - 1 - Type - S32 - Value - 2 - - - RenderReflectionRes - - Comment - Reflection map resolution. - Persist - 1 - Type - S32 - Value - 64 - - RenderResolutionDivisor - - Comment - Divisor for rendering 3D scene at reduced resolution. - Persist - 1 - Type - U32 - Value - 1 - - RenderShaderLightingMaxLevel - - Comment - Max lighting level to use in the shader (class 3 is default, 2 is less lights, 1 is sun/moon only. Works around shader compiler bugs on certain platforms.) - Persist - 1 - Type - S32 - Value - 3 - - RenderShaderLODThreshold - - Comment - Fraction of draw distance defining the switch to a different shader LOD - Persist - 1 - Type - F32 - Value - 1.0 - - RenderShaderParticleThreshold - - Comment - Fraction of draw distance to not use shader on particles - Persist - 1 - Type - F32 - Value - 0.25 - - RenderSunDynamicRange - - Comment - Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ). - Persist - 1 - Type - F32 - Value - 1.0 - - RenderTerrainDetail - - Comment - Detail applied to terrain texturing (0 = none, 1 or 2 = full) - Persist - 1 - Type - S32 - Value - 2 - - RenderTerrainLODFactor - - Comment - Controls level of detail of terrain (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderTerrainScale - - Comment - Terrain detail texture scale - Persist - 1 - Type - F32 - Value - 12.0 - - RenderTextureMemoryMultiple - - Comment - Multiple of texture memory value to use (should fit: 0 < value <= 1.0) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderTrackerBeacon - - Comment - Display tracking arrow and beacon to target avatar, teleport destination - Persist - 1 - Type - Boolean - Value - 1 - - RenderTransparentWater - - Comment - Render water as transparent. Setting to false renders water as opaque with a simple texture applied. - Persist - 1 - Type - Boolean - Value - 1 - - RenderTreeLODFactor - - Comment - Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 0.5 - - RenderUIInSnapshot - - Comment - Display user interface in snapshot - Persist - 1 - Type - Boolean - Value - 0 - - RenderUIBuffer - - Comment - Cache ui render in a screen aligned buffer. - Persist - 1 - Type - Boolean - Value - 0 - - RenderUnloadedAvatar - - Comment - Show avatars which haven't finished loading - Persist - 1 - Type - Boolean - Value - 0 - - RenderUseTriStrips - - Comment - Use triangle strips for rendering prims. - Persist - 1 - Type - Boolean - Value - 0 - - RenderUseFarClip - - Comment - If false, frustum culling will ignore far clip plane. - Persist - 1 - Type - Boolean - Value - 1 - - RenderUseImpostors - - Comment - Whether we want to use impostors for far away avatars. - Persist - 1 - Type - Boolean - Value - 1 - - RenderUseShaderLOD - - Comment - Whether we want to have different shaders for LOD - Persist - 1 - Type - Boolean - Value - 1 - - RenderUseShaderNearParticles - - Comment - Whether we want to use shaders on near particles - Persist - 1 - Type - Boolean - Value - 0 - - RenderVBOEnable - - Comment - Use GL Vertex Buffer Objects - Persist - 1 - Type - Boolean - Value - 1 - - RenderVBOMappingDisable - - Comment - Disable VBO glMapBufferARB - Persist - 1 - Type - Boolean - Value - 0 - - RenderUseStreamVBO - - Comment - Use VBO's for stream buffers - Persist - 1 - Type - Boolean - Value - 1 - - RenderPreferStreamDraw - - Comment - Use GL_STREAM_DRAW in place of GL_DYNAMIC_DRAW - Persist - 1 - Type - Boolean - Value - 0 - - RenderVolumeLODFactor - - Comment - Controls level of detail of primitives (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderWater - - Comment - Display water - Persist - 1 - Type - Boolean - Value - 1 - - RenderWaterMipNormal - - Comment - Use mip maps for water normal map. - Persist - 1 - Type - Boolean - Value - 1 - - RenderWaterRefResolution - - Comment - Water planar reflection resolution. - Persist - 1 - Type - S32 - Value - 512 - - RenderParcelSelection - - Comment - Display selected parcel outline - Persist - 1 - Type - Boolean - Value - 1 - - RotateRight - - Comment - Make the agent rotate to its right. - Persist - 1 - Type - Boolean - Value - 0 - - RotationStep - - Comment - All rotations via rotation tool are constrained to multiples of this unit (degrees) - Persist - 1 - Type - F32 - Value - 1.0 - - MeshStreamingCostScaler - - Comment - DEBUG - Persist - 1 - Type - F32 - Value - 2.0 - - MeshThreadCount - - Comment - Number of threads to use for loading meshes. - Persist - 1 - Type - U32 - Value - 8 - - MeshMaxConcurrentRequests - - Comment - Number of threads to use for loading meshes. - Persist - 1 - Type - U32 - Value - 32 - - RunMultipleThreads - - Comment - If TRUE keep background threads active during render - Persist - 1 - Type - Boolean - Value - 0 - - SafeMode - - Comment - Reset preferences, run in safe mode. - Persist - 1 - Type - Boolean - Value - 0 - - SaveMinidump - - Comment - Save minidump for developer debugging on crash - Persist - 1 - Type - Boolean - Value - 1 - - ScaleShowAxes - - Comment - Show indicator of selected scale axis when scaling - Persist - 1 - Type - Boolean - Value - 0 - - ScaleStretchTextures - - Comment - Stretch textures along with object when scaling - Persist - 1 - Type - Boolean - Value - 1 - - ScaleUniform - - Comment - Scale selected objects evenly about center of selection - Persist - 1 - Type - Boolean - Value - 0 - - ScriptHelpFollowsCursor - - Comment - Scripting help window updates contents based on script editor contents under text cursor - Persist - 1 - Type - Boolean - Value - 0 - - ScriptsCanShowUI - - Comment - Allow LSL calls (such as LLMapDestination) to spawn viewer UI - Persist - 1 - Type - Boolean - Value - 1 - - SecondLifeEnterprise - - Comment - Enables Second Life Enterprise features - Persist - 1 - Type - Boolean - Value - 0 - - SelectMovableOnly - - Comment - Select only objects you can move - Persist - 1 - Type - Boolean - Value - 0 - - SelectOwnedOnly - - Comment - Select only objects you own - Persist - 1 - Type - Boolean - Value - 0 - - SelectionHighlightAlpha - - Comment - Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.40000000596 - - SelectionHighlightAlphaTest - - Comment - Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels) - Persist - 1 - Type - F32 - Value - 0.1 - - SelectionHighlightThickness - - Comment - Thickness of selection highlight line (fraction of view distance) - Persist - 1 - Type - F32 - Value - 0.00999999977648 - - SelectionHighlightUAnim - - Comment - Rate at which texture animates along U direction in selection highlight line (fraction of texture per second) - Persist - 1 - Type - F32 - Value - 0.0 - - SelectionHighlightUScale - - Comment - Scale of texture display on selection highlight line (fraction of texture size) - Persist - 1 - Type - F32 - Value - 0.1 - - SelectionHighlightVAnim - - Comment - Rate at which texture animates along V direction in selection highlight line (fraction of texture per second) - Persist - 1 - Type - F32 - Value - 0.5 - - SelectionHighlightVScale - - Comment - Scale of texture display on selection highlight line (fraction of texture size) - Persist - 1 - Type - F32 - Value - 1.0 - - ServerChoice - - Comment - [DO NOT MODIFY] Controls which grid you connect to - Persist - 1 - Type - S32 - Value - 0 - - ShareWithGroup - - Comment - Newly created objects are shared with the currently active group - Persist - 1 - Type - Boolean - Value - 0 - - ShowAdvancedGraphicsSettings - - Comment - Show advanced graphics settings - Persist - 1 - Type - Boolean - Value - 0 - - ShowAllObjectHoverTip - - Comment - Show descriptive tooltip when mouse hovers over non-interactive and interactive objects. - Persist - 1 - Type - Boolean - Value - 0 - - AvatarNameTagMode - - Comment - Select Avatar Name Tag Mode - Persist - 1 - Type - S32 - Value - 1 - - ShowAxes - - Comment - Render coordinate frame at your position - Persist - 1 - Type - Boolean - Value - 0 - - ShowBanLines - - Comment - Show in-world ban/access borders - Persist - 1 - Type - Boolean - Value - 1 - - ShowBuildButton - - Comment - Shows/Hides Build button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 0 - - ShowCameraButton - - Comment - Show/Hide View button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 1 - - ShowConsoleWindow - - Comment - Show log in separate OS window - Persist - 1 - Type - Boolean - Value - 0 - - NavBarShowCoordinates - - Comment - Show coordinates in navigation bar - Persist - 1 - Type - Boolean - Value - 0 - - NavBarShowParcelProperties - - Comment - Show parcel property icons in navigation bar - Persist - 1 - Type - Boolean - Value - 1 - - ShowBetaGrids - - Comment - Display the beta grids in the grid selection control. - Persist - 1 - Type - Boolean - Value - 1 - - ShowCrosshairs - - Comment - Display crosshairs when in mouselook mode - Persist - 1 - Type - Boolean - Value - 1 - - ShowDebugConsole - - Comment - Show log in SL window - Persist - 1 - Type - Boolean - Value - 0 - - ShowEmptyFoldersWhenSearching - - Comment - Shows folders that do not have any visible contents when applying a filter to inventory - Persist - 1 - Type - Boolean - Value - 0 - - ShowGestureButton - - Comment - Shows/Hides Gesture button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 1 - - ShowHoverTips - - Comment - Show descriptive tooltip when mouse hovers over items in world - Persist - 1 - Type - Boolean - Value - 1 - - ShowLandHoverTip - - Comment - Show descriptive tooltip when mouse hovers over land - Persist - 1 - Type - Boolean - Value - 0 - - ShowMiniMapButton - - Comment - Shows/Hides Mini-Map button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 0 - - ShowMoveButton - - Comment - Shows/Hides Move button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 1 - - ShowScriptErrors - - Comment - Show script errors - Persist - 1 - Type - Boolean - Value - 1 - - ShowScriptErrorsLocation - - Comment - Show script error in chat or window - Persist - 1 - Type - S32 - Value - 1 - - ShowSearchButton - - Comment - Shows/Hides Search button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 0 - - ShowSnapshotButton - - Comment - Shows/Hides Snapshot button button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 1 - - ShowObjectRenderingCost - - Comment - Show the object rendering cost in build tools - Persist - 1 - Type - Boolean - Value - 1 - - ShowNavbarFavoritesPanel - - Comment - Show/Hide Navigation Bar Favorites Panel - Persist - 1 - Type - Boolean - Value - 1 - - ShowNavbarNavigationPanel - - Comment - Show/Hide Navigation Bar Navigation Panel - Persist - 1 - Type - Boolean - Value - 1 - - ShowWorldMapButton - - Comment - Shows/Hides Map button in the bottom tray. - Persist - 1 - Type - Boolean - Value - 0 - - ShowMiniLocationPanel - - Comment - Show/Hide Mini-Location Panel - Persist - 1 - Type - Boolean - Value - 0 - - SidebarCameraMovement - - Comment - Reflects world rect changing while changing sidebar visibility. - Persist - 1 - Type - Boolean - Value - 0 - - GroupListShowIcons - - Comment - Show/hide group icons in the group list - Persist - 1 - Type - Boolean - Value - 1 - - FriendsListShowIcons - - Comment - Show/hide online and all friends icons in the friend list - Persist - 1 - Type - Boolean - Value - 1 - - FriendsListShowPermissions - - Comment - Show/hide permission icons in the friend list - Persist - 1 - Type - Boolean - Value - 1 - - NearbyListShowMap - - Comment - Show/hide map above nearby people list - Persist - 1 - Type - Boolean - Value - 1 - - NearbyListShowIcons - - Comment - Show/hide people icons in nearby list - Persist - 1 - Type - Boolean - Value - 1 - - RecentListShowIcons - - Comment - Show/hide people icons in recent list - Persist - 1 - Type - Boolean - Value - 1 - - FriendsSortOrder - - Comment - Specifies sort order for friends (0 = by name, 1 = by online status) - Persist - 1 - Type - U32 - Value - 0 - - NearbyPeopleSortOrder - - Comment - Specifies sort order for nearby people (0 = by name, 3 = by distance, 4 = by most recent) - Persist - 1 - Type - U32 - Value - 4 - - RecentPeopleSortOrder - - Comment - Specifies sort order for recent people (0 = by name, 2 = by most recent) - Persist - 1 - Type - U32 - Value - 2 - - ShowPGSearchAll - - Comment - Display results of search All that are flagged as general - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureSearchAll - - Comment - Display results of search All that are flagged as moderate - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultSearchAll - - Comment - Display results of search All that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGGroups - - Comment - Display results of find groups that are flagged as general - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureGroups - - Comment - Display results of find groups that are flagged as moderate - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultGroups - - Comment - Display results of find groups that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGClassifieds - - Comment - Display results of find classifieds that are flagged as general - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureClassifieds - - Comment - Display results of find classifieds that are flagged as moderate - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultClassifieds - - Comment - Display results of find classifieds that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGEvents - - Comment - Display results of find events that are flagged as general - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureEvents - - Comment - Display results of find events that are flagged as moderate - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultEvents - - Comment - Display results of find events that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGLand - - Comment - Display results of find land sales that are flagged as general - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureLand - - Comment - Display results of find land sales that are flagged as moderate - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultLand - - Comment - Display results of find land sales that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGSims - - Comment - Display results of find places or find popular that are in general sims - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureSims - - Comment - Display results of find places or find popular that are in moderate sims - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultSims - - Comment - Display results of find places or find popular that are in adult sims - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowNearClip - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowNewInventory - - Comment - Automatically views new notecards/textures/landmarks - Persist - 1 - Type - Boolean - Value - 1 - - ShowInInventory + AuditTexture - Comment - Automatically opens inventory to show accepted objects - Persist + Comment + Enable texture auditting. + Persist 1 - Type + Type Boolean - Value + Value + 0 + + AutoAcceptNewInventory + + Comment + Automatically accept new notecards/textures/landmarks + Persist + 1 + Type + Boolean + Value + 0 + + AutoLeveling + + Comment + Keep Flycam level. + Persist + 1 + Type + Boolean + Value + 1 + + AutoLoadWebProfiles + + Comment + Automatically load ALL profile webpages without asking first. + Persist + 1 + Type + Boolean + Value + 0 + + AutoLogin + + Comment + Login automatically using last username/password combination + Persist + 0 + Type + Boolean + Value + 0 + + AutoMimeDiscovery + + Comment + Enable viewer mime type discovery of media URLs + Persist + 1 + Type + Boolean + Value + 0 + + AutoPilotLocksCamera + + Comment + Keep camera position locked when avatar walks to selected position + Persist + 1 + Type + Boolean + Value + 0 + + AutoSnapshot + + Comment + Update snapshot when camera stops moving, or any parameter changes + Persist + 1 + Type + Boolean + Value + 0 + + AutomaticFly + + Comment + Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only) + Persist + 1 + Type + Boolean + Value + 1 + + AvalinePhoneSeparator + + Comment + Separator of phone parts to have Avaline numbers human readable in Voice Control Panel + Persist + 1 + Type + String + Value + - + + AvatarAxisDeadZone0 + + Comment + Avatar axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone1 + + Comment + Avatar axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone2 + + Comment + Avatar axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone3 + + Comment + Avatar axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone4 + + Comment + Avatar axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone5 + + Comment + Avatar axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisScale0 + + Comment + Avatar axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale1 + + Comment + Avatar axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale2 + + Comment + Avatar axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale3 + + Comment + Avatar axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale4 + + Comment + Avatar axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale5 + + Comment + Avatar axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarBacklight + + Comment + Add rim lighting to avatar rendering to approximate shininess of skin + Persist + 1 + Type + Boolean + Value + 1 + + AvatarFeathering + + Comment + Avatar feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + + AvatarPickerSortOrder + + Comment + Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 2 + + AvatarPickerURL + + Comment + Avatar picker contents + Persist + 1 + Type + String + Value + + + AvatarBakedTextureUploadTimeout + + Comment + Specifes the maximum time in seconds to wait before sending your baked textures for avatar appearance. Set to 0 to disable and wait until all baked textures are at highest resolution. + Persist + 1 + Type + U32 + Value + 60 + + AvatarBakedLocalTextureUpdateTimeout + + Comment + Specifes the maximum time in seconds to wait before updating your appearance during appearance mode. + Persist + 1 + Type + U32 + Value + 10 + + AvatarPhysics + + Comment + Enable avatar physics. + Persist + 1 + Type + Boolean + Value + 1 + + AvatarSex + + Comment + + Persist + 0 + Type + U32 + Value + 0 + + + BackgroundYieldTime + + Comment + Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds) + Persist + 1 + Type + S32 + Value + 40 + + BottomPanelNew + + Comment + Enable the new bottom panel + Persist + 1 + Type + Boolean + Value + 0 + + BrowserHomePage + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + http://www.secondlife.com + + BrowserIgnoreSSLCertErrors + + Comment + FOR TESTING ONLY: Tell the built-in web browser to ignore SSL cert errors. + Persist + 1 + Type + Boolean + Value + 0 + + BrowserEnableJSObject + + Comment + (WARNING: Advanced feature. Use if you are aware of the implications). Enable or disable the viewer to Javascript bridge object. + Persist + 0 + Type + Boolean + Value + 0 + + BlockAvatarAppearanceMessages + + Comment + Ignores appearance messages (for simulating Ruth) + Persist + 1 + Type + Boolean + Value + 0 + + BlockSomeAvatarAppearanceVisualParams + + Comment + Drop around 50% of VisualParam occurances in appearance messages (for simulating Ruth) + Persist + 1 + Type + Boolean + Value + 0 + + BrowserProxyAddress + + Comment + Address for the Web Proxy] + Persist + 1 + Type + String + Value + + + BrowserProxyEnabled + + Comment + Use Web Proxy + Persist + 1 + Type + Boolean + Value + 0 + + BrowserProxyExclusions + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + + + BrowserProxyPort + + Comment + Port for Web Proxy + Persist + 1 + Type + S32 + Value + 3128 + + BrowserProxySocks45 + + Comment + [NOT USED] + Persist + 1 + Type + S32 + Value + 5 + + BuildAxisDeadZone0 + + Comment + Build axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone1 + + Comment + Build axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone2 + + Comment + Build axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone3 + + Comment + Build axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone4 + + Comment + Build axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone5 + + Comment + Build axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisScale0 + + Comment + Build axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale1 + + Comment + Build axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale2 + + Comment + Build axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale3 + + Comment + Build axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale4 + + Comment + Build axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale5 + + Comment + Build axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildFeathering + + Comment + Build feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + + BulkChangeIncludeAnimations + + Comment + Bulk permission changes affect animations + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeBodyParts + + Comment + Bulk permission changes affect body parts + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeClothing + + Comment + Bulk permission changes affect clothing + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeGestures + + Comment + Bulk permission changes affect gestures + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeNotecards + + Comment + Bulk permission changes affect notecards + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeObjects + + Comment + Bulk permission changes affect objects + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeScripts + + Comment + Bulk permission changes affect scripts + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeSounds + + Comment + Bulk permission changes affect sounds + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeTextures + + Comment + Bulk permission changes affect textures + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeEveryoneCopy + + Comment + Bulk changed objects can be copied by everyone + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeNextOwnerCopy + + Comment + Bulk changed objects can be copied by next owner + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeNextOwnerModify + + Comment + Bulk changed objects can be modified by next owner + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeNextOwnerTransfer + + Comment + Bulk changed objects can be resold or given away by next owner + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeShareWithGroup + + Comment + Bulk changed objects are shared with the currently active group + Persist + 1 + Type + Boolean + Value + 0 + + ButtonFlashCount + + Comment + Number of flashes after which flashing buttons stay lit up + Persist + 1 + Type + S32 + Value + 8 + + ButtonFlashRate + + Comment + Frequency at which buttons flash (hz) + Persist + 1 + Type + F32 + Value + 1.25 + + ButtonHPad + + Comment + Default horizontal spacing between buttons (pixels) + Persist + 1 + Type + S32 + Value + 4 + + ButtonHeight + + Comment + Default height for normal buttons (pixels) + Persist + 1 + Type + S32 + Value + 23 + + ButtonHeightSmall + + Comment + Default height for small buttons (pixels) + Persist + 1 + Type + S32 + Value + 23 + + CacheLocation + + Comment + Controls the location of the local disk cache + Persist + 1 + Type + String + Value + + + CacheLocationTopFolder + + Comment + Controls the top folder location of the the local disk cache + Persist + 1 + Type + String + Value + + + CacheNumberOfRegionsForObjects + + Comment + Controls number of regions to be cached for objects. + Persist + 1 + Type + U32 + Value + 128 + + CacheSize + + Comment + Controls amount of hard drive space reserved for local file caching in MB + Persist + 1 + Type + U32 + Value + 512 + + CacheValidateCounter + + Comment + Used to distribute cache validation + Persist + 1 + Type + U32 + Value + 0 + + CameraMouseWheelZoom + + Comment + Camera zooms in and out with mousewheel + Persist + 1 + Type + S32 + Value + 5 + + CameraAngle + + Comment + Camera field of view angle (Radians) + Persist + 1 + Type + F32 + Value + 1.047197551 + + CameraOffset + + Comment + Render with camera offset from view frustum (rendering debug) + Persist + 1 + Type + Boolean + Value + 0 + + CameraOffsetBuild + + Comment + Default camera position relative to focus point when entering build mode + Persist + 1 + Type + Vector3 + Value + + -6.0 + 0.0 + 6.0 + + + CameraOffsetRearView + + Comment + Initial camera offset from avatar in Rear View + Persist + 1 + Type + Vector3 + Value + + -3.0 + 0.0 + 0.75 + + + CameraOffsetFrontView + + Comment + Initial camera offset from avatar in Front View + Persist + 1 + Type + Vector3 + Value + + 2.2 + 0.0 + 0.0 + + + CameraOffsetGroupView + + Comment + Initial camera offset from avatar in Group View + Persist + 1 + Type + Vector3 + Value + + -1.0 + 0.7 + 0.5 + + + CameraOffsetScale + + Comment + Scales the default offset + Persist + 1 + Type + F32 + Value + 1.0 + + CameraPosOnLogout + + Comment + Camera position when last logged out (global coordinates) + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + + CameraPositionSmoothing + + Comment + Smooths camera position over time + Persist + 1 + Type + F32 + Value + 1.0 + + CameraPreset + + Comment + Preset camera position - view (0 - rear, 1 - front, 2 - group) + Persist + 1 + Type + U32 + Value + 0 + + + CameraFocusTransitionTime + + Comment + How many seconds it takes the camera to transition between focal distances + Persist + 1 + Type + F32 + Value + 0.5 + + + CameraFNumber + + Comment + Camera f-number value for DoF effect + Persist + 1 + Type + F32 + Value + 9.0 + + + CameraFocalLength + + Comment + Camera focal length for DoF effect (in millimeters) + Persist + 1 + Type + F32 + Value + 50 + + + CameraFieldOfView + + Comment + Vertical camera field of view for DoF effect (in degrees) + Persist + 1 + Type + F32 + Value + 60.0 + + + CameraAspectRatio + + Comment + Camera aspect ratio for DoF effect + Persist + 1 + Type + F32 + Value + 1.5 + + + CertStore + + Comment + Specifies the Certificate Store for certificate trust verification + Persist + 1 + Type + String + Value + default + + ChatBarStealsFocus + + Comment + Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus + Persist + 1 + Type + Boolean + Value + 1 + + LetterKeysFocusChatBar + + Comment + When printable characters keys (possibly with Shift held) are pressed, the chatbar takes focus + Persist + 1 + Type + S32 + Value + 0 + + ChatBubbleOpacity + + Comment + Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.5 + + ChatFontSize + + Comment + Size of chat text in chat console (0 = small, 1 = big) + Persist + 1 + Type + S32 + Value + 1 + + ChatFullWidth + + Comment + Chat console takes up full width of SL window + Persist + 1 + Type + Boolean + Value + 1 + + ChatHistoryTornOff + + Comment + Show chat history window separately from Communicate window. + Persist + 1 + Type + Boolean + Value + 0 + + ChatOnlineNotification + + Comment + Provide notifications for when friend log on and off of SL + Persist + 1 + Type + Boolean + Value + 1 + + ChatPersistTime + + Comment + Time for which chat stays visible in console (seconds) + Persist + 1 + Type + F32 + Value + 20.0 + + ChatShowTimestamps + + Comment + Show timestamps in chat + Persist + 1 + Type + Boolean + Value + 1 + + ChatVisible + + Comment + Chat bar is visible + Persist + 1 + Type + Boolean + Value + 1 + + ChatWindow + + Comment + Show chat in multiple windows(by default) or in one multi-tabbed window(requires restart) + Persist + 1 + Type + S32 + Value + 0 + + CheesyBeacon + + Comment + Enable cheesy beacon effects + Persist + 1 + Type + Boolean + Value + 0 + + ClientSettingsFile + + Comment + Client settings file name (per install). + Persist + 0 + Type + String + Value + + + CloseChatOnReturn + + Comment + Close chat after hitting return + Persist + 1 + Type + Boolean + Value + 0 + + CloseSnapshotOnKeep + + Comment + Close snapshot window after saving snapshot + Persist + 1 + Type + Boolean + Value + 1 + + CmdLineDisableVoice + + Comment + Disable Voice. + Persist + 0 + Type + Boolean + Value + 0 + + CmdLineGridChoice + + Comment + The user's grid choice or ip address. + Persist + 0 + Type + String + Value + + + CmdLineHelperURI + + Comment + Command line specified helper web CGI prefix to use. + Persist + 0 + Type + String + Value + + + CmdLineLoginURI + + Comment + Command line specified login server and CGI prefix to use. + Persist + 0 + Type + LLSD + Value + + + + + CompressSnapshotsToDisk + + Comment + Compress snapshots saved to disk (Using JPEG 2000) + Persist + 1 + Type + Boolean + Value + 0 + + ConnectAsGod + + Comment + Log in a god if you have god access. + Persist + 1 + Type + Boolean + Value + 0 + + ConnectionPort + + Comment + Custom connection port number + Persist + 1 + Type + U32 + Value + 13000 + + ConnectionPortEnabled + + Comment + Use the custom connection port? + Persist + 1 + Type + Boolean + Value + 0 + + ConsoleBackgroundOpacity + + Comment + Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.700 + + ConsoleBufferSize + + Comment + Size of chat console history (lines of chat) + Persist + 1 + Type + S32 + Value + 40 + + ConsoleMaxLines + + Comment + Max number of lines of chat text visible in console. + Persist + 1 + Type + S32 + Value + 40 + + ContactsTornOff + + Comment + Show contacts window separately from Communicate window. + Persist + 1 + Type + Boolean + Value + 0 + + CookiesEnabled + + Comment + Accept cookies from Web sites? + Persist + 1 + Type + Boolean + Value + 1 + + BrowserJavascriptEnabled + + Comment + Enable Javascript in the built-in Web browser? + Persist + 1 + Type + Boolean + Value + 1 + + BrowserPluginsEnabled + + Comment + Enable Web plugins in the built-in Web browser? + Persist + 1 + Type + Boolean + Value + 1 + + ChatBarCustomWidth + + Comment + Stores customized width of chat bar. + Persist + 1 + Type + S32 + Value + 0 + + CreateToolCopyCenters + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + + CreateToolCopyRotates + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + CreateToolCopySelection + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + CreateToolKeepSelected + + Comment + After using create tool, keep the create tool active + Persist + 1 + Type + Boolean + Value + 0 + + Cursor3D + + Comment + Treat Joystick values as absolute positions (not deltas). + Persist + 1 + Type + Boolean + Value + 1 + + CurrentGrid + + Comment + Currently Selected Grid + Persist + 1 + Type + String + Value + + + CustomServer + + Comment + Specifies IP address or hostname of grid to which you connect + Persist + 1 + Type + String + Value + + + DebugAvatarRezTime + + Comment + Display times for avatars to resolve. + Persist + 1 + Type + Boolean + Value + 0 + + DebugAvatarLocalTexLoadedTime + + Comment + Display time for loading avatar local textures. + Persist + 1 + Type + Boolean + Value + 0 + + DebugBeaconLineWidth + + Comment + Size of lines for Debug Beacons + Persist + 1 + Type + S32 + Value + 1 + + DebugInventoryFilters + + Comment + Turn on debugging display for inventory filtering + Persist + 1 + Type + Boolean + Value + 0 + + DebugPermissions + + Comment + Log permissions for selected inventory items + Persist + 1 + Type + Boolean + Value + 0 + + DebugPluginDisableTimeout + + Comment + Disable the code which watches for plugins that are crashed or hung + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowColor + + Comment + Show color under cursor + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowMemory + + Comment + Show Total Allocated Memory + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowRenderInfo + + Comment + Show stats about current scene + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowUploadCost + + Comment + Show what it would cost to upload assets in current scene + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowRenderMatrices + + Comment + Display values of current view and projection matrices. + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowTextureInfo + + Comment + Show inertested texture info + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowTime + + Comment + Show time info + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowXUINames + + Comment + Show tooltips with XUI path to widget + Persist + 0 + Type + Boolean + Value + 0 + + DebugStatModeFPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeBandwidth + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePacketLoss + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatMode + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeKTrisDrawnFr + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeKTrisDrawnSec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTotalObjs + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeNewObjs + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTextureCount + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeRawCount + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeGLMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeFormattedMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeRawMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeBoundMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePacketsIn + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePacketsOut + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTexture + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeAsset + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeLayers + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeActualIn + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeActualOut + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeVFSPendingOps + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTimeDialation + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimFPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePhysicsFPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePinnedObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeLowLODObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeMemoryAllocated + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeAgentUpdatesSec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeMainAgents + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeChildAgents + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimActiveObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimActiveScripts + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimScriptEvents + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimInPPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimOutPPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimPendingDownloads + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + SimPendingUploads + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimTotalUnackedBytes + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimFrameMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimNetMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimOtherMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimAgentMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimImagesMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimScriptMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSpareMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsStepMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsShapeUpdateMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsOtherMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSleepMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimPumpIOMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugViews + + Comment + Display debugging info for views. + Persist + 1 + Type + Boolean + Value + 0 + + DebugWindowProc + + Comment + Log windows messages + Persist + 1 + Type + Boolean + Value + 0 + + DefaultFemaleAvatar + + Comment + Default Female Avatar + Persist + 1 + Type + String + Value + Female Shape & Outfit + + DefaultMaleAvatar + + Comment + Default Male Avatar + Persist + 1 + Type + String + Value + Male Shape & Outfit + + + DefaultObjectTexture + + Comment + Texture used as 'Default' in texture picker. (UUID texture reference) + Persist + 1 + Type + String + Value + 89556747-24cb-43ed-920b-47caed15465f + + DefaultUploadCost + + Comment + Default sound/image/file upload cost(in case economy data is not available). + Persist + 1 + Type + U32 + Value + 10 + + DestinationGuideURL + + Comment + Destination guide contents + Persist + 1 + Type + String + Value + + + DisableCameraConstraints + + Comment + Disable the normal bounds put on the camera by avatar position + Persist + 1 + Type + Boolean + Value + 0 + + DisableMouseWarp + + Comment + Disable warping of the mouse to the center of the screen during alt-zoom and mouse look. Useful with certain input devices, mouse sharing programs like Synergy, or running under Parallels. + Persist + 1 + Type + Boolean + Value + 0 + + DisableExternalBrowser + + Comment + Disable opening an external browser. + Persist + 1 + Type + Boolean + Value + 0 + + HeadlessClient + + Comment + Run in headless mode by disabling GL rendering, keyboard, etc + Persist + 1 + Type + Boolean + Value + 0 + + DisableTextHyperlinkActions + + Comment + Disable highlighting and linking of URLs in XUI text boxes + Persist + 1 + Type + Boolean + Value + 0 + + DisableVerticalSync + + Comment + Update frames as fast as possible (FALSE = update frames between display scans) + Persist + 1 + Type + Boolean + Value + 1 + + EnableGroupChatPopups + + Comment + Enable Incoming Group Chat Popups + Persist + 1 + Type + Boolean + Value + 1 + + EnableIMChatPopups + + Comment + Enable Incoming IM Chat Popups + Persist + 1 + Type + Boolean + Value + 1 + + DisplayAvatarAgentTarget + + Comment + Show avatar positioning locators (animation debug) + Persist + 1 + Type + Boolean + Value + 0 + + DisplayChat + + Comment + Display Latest Chat message on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayDebug + + Comment + Display Network Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayDebugConsole + + Comment + Display Console Debug Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayIM + + Comment + Display Latest IM message on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayLinden + + Comment + Display Account Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayRegion + + Comment + Display Location information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayTimecode + + Comment + Display timecode on screen + Persist + 1 + Type + Boolean + Value + 0 + + Disregard128DefaultDrawDistance + + Comment + Whether to use the auto default to 128 draw distance + Persist + 1 + Type + Boolean + Value + 1 + + Disregard96DefaultDrawDistance + + Comment + Whether to use the auto default to 96 draw distance + Persist + 1 + Type + Boolean + Value + 1 + + ClickActionBuyEnabled + + Comment + Enable click to buy actions in tool pie menu + Persist + 1 + Type + Boolean + Value + 1 + + ClickActionPayEnabled + + Comment + Enable click to pay actions in tool pie menu + Persist + 1 + Type + Boolean + Value + 1 + + DoubleClickAutoPilot + + Comment + Enable double-click auto pilot + Persist + 1 + Type + Boolean + Value + 0 + + DoubleClickTeleport + + Comment + Enable double-click to teleport where allowed + Persist + 1 + Type + Boolean + Value + 0 + + DoubleClickShowWorldMap + + Comment + Enable double-click to show world map from mini map + Persist + 1 + Type + Boolean + Value + 1 + + DragAndDropToolTipDelay + + Comment + Seconds before displaying tooltip when performing drag and drop operation + Persist + 1 + Type + F32 + Value + 0.10000000149 + + DragAndDropDistanceThreshold + + Comment + Number of pixels that mouse should move before triggering drag and drop mode + Persist + 1 + Type + S32 + Value + 3 + + DropShadowButton + + Comment + Drop shadow width for buttons (pixels) + Persist + 1 + Type + S32 + Value + 2 + + DropShadowFloater + + Comment + Drop shadow width for floaters (pixels) + Persist + 1 + Type + S32 + Value + 5 + + DropShadowSlider + + Comment + Drop shadow width for sliders (pixels) + Persist + 1 + Type + S32 + Value + 3 + + DropShadowTooltip + + Comment + Drop shadow width for tooltips (pixels) + Persist + 1 + Type + S32 + Value + 4 + + DumpVFSCaches + + Comment + Dump VFS caches on startup. + Persist + 1 + Type + Boolean + Value + 0 + + DynamicCameraStrength + + Comment + Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity) + Persist + 1 + Type + F32 + Value + 2.0 + + EditCameraMovement + + Comment + When entering build mode, camera moves up above avatar + Persist + 1 + Type + Boolean + Value + 0 + + EditLinkedParts + + Comment + Select individual parts of linked objects + Persist + 0 + Type + Boolean + Value + 0 + + EffectScriptChatParticles + + Comment + 1 = normal behavior, 0 = disable display of swirling lights when scripts communicate + Persist + 1 + Type + Boolean + Value + 1 + + EnableGrab + + Comment + Use Ctrl+mouse to grab and manipulate objects + Persist + 1 + Type + Boolean + Value + 1 + + EnableAltZoom + + Comment + Use Alt+mouse to look at and zoom in on objects + Persist + 1 + Type + Boolean + Value + 1 + + EnableGestureSounds + + Comment + Play sounds from gestures + Persist + 1 + Type + Boolean + Value + 1 + + EnableMouselook + + Comment + Allow first person perspective and mouse control of camera + Persist + 1 + Type + Boolean + Value + 1 + + EnableRippleWater + + Comment + Whether to use ripple water shader or not + Persist + 1 + Type + Boolean + Value + 1 + + EnableTextureAtlas + + Comment + Whether to use texture atlas or not + Persist + 1 + Type + Boolean + Value + 0 + + EnableUIHints + + Comment + Toggles UI hint popups + Persist + 1 + Type + Boolean + Value + 1 + + EnableVoiceChat + + Comment + Enable talking to other residents with a microphone + Persist + 1 + Type + Boolean + Value + 1 + + EnergyFromTop + + Comment + + Persist + 0 + Type + S32 + Value + 20 + + EnergyHeight + + Comment + + Persist + 0 + Type + S32 + Value + 40 + + EnergyWidth + + Comment + + Persist + 0 + Type + S32 + Value + 175 + + EventURL + + Comment + URL for Event website, displayed in the event floater + Persist + 0 + Type + String + Value + http://events.secondlife.com/viewer/embed/event/ + + EveryoneCopy + + Comment + Everyone can copy the newly created objects + Persist + 1 + Type + Boolean + Value + 0 + + FeatureManagerHTTPTable + + Comment + Base directory for HTTP feature/gpu table fetches + Persist + 1 + Type + String + Value + http://viewer-settings.secondlife.com + + FPSLogFrequency + + Comment + Seconds between display of FPS in log (0 for never) + Persist + 1 + Type + F32 + Value + 10.0 + + FilterItemsPerFrame + + Comment + Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed) + Persist + 1 + Type + S32 + Value + 500 + + FindLandArea + + Comment + Enables filtering of land search results by area + Persist + 1 + Type + Boolean + Value + 0 + + FindLandPrice + + Comment + Enables filtering of land search results by price + Persist + 1 + Type + Boolean + Value + 1 + + FindLandType + + Comment + Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale") + Persist + 1 + Type + String + Value + All + + FindPeopleOnline + + Comment + Limits people search to only users who are logged on + Persist + 1 + Type + Boolean + Value + 1 + + FindPlacesPictures + + Comment + Display only results of find places that have pictures + Persist + 1 + Type + Boolean + Value + 1 + + FirstName + + Comment + Login first name + Persist + 1 + Type + String + Value + + + FirstPersonAvatarVisible + + Comment + Display avatar and attachments below neck while in mouselook + Persist + 1 + Type + Boolean + Value + 0 + + FirstRunThisInstall + + Comment + Specifies that you have not run the viewer since you performed a clean install + Persist + 1 + Type + Boolean + Value + 1 + + FirstLoginThisInstall + + Comment + Specifies that you have not logged in with the viewer since you performed a clean install + Persist + 1 + Type + Boolean + Value + 1 + + FirstSelectedDisabledPopups + + Comment + Return false if there is not disabled popup selected in the list of floater preferences popups + Persist + 0 + Type + Boolean + Value + 0 + + FirstSelectedEnabledPopups + + Comment + Return false if there is not enable popup selected in the list of floater preferences popups + Persist + 0 + Type + Boolean + Value + 0 + + FixedWeather + + Comment + Weather effects do not change over time + Persist + 1 + Type + Boolean + Value + 0 + + FloaterActiveSpeakersSortAscending + + Comment + Whether to sort up or down + Persist + 1 + Type + Boolean + Value + 1 + + FloaterActiveSpeakersSortColumn + + Comment + Column name to sort on + Persist + 1 + Type + String + Value + speaking_status + + FloaterMapNorth + + Comment + Floater Map North Label + Persist + 1 + Type + String + Value + N + + FloaterMapNorthEast + + Comment + Floater Map North-East Label + Persist + 1 + Type + String + Value + NE + + FloaterMapNorthWest + + Comment + Floater Map North-West Label + Persist + 1 + Type + String + Value + NW + + FloaterMapEast + + Comment + Floater Map East Label + Persist + 1 + Type + String + Value + E + + FloaterMapWest + + Comment + Floater Map West Label + Persist + 1 + Type + String + Value + W + + FloaterMapSouth + + Comment + Floater Map South Label + Persist + 1 + Type + String + Value + S + + FloaterMapSouthEast + + Comment + Floater Map South-East Label + Persist + 1 + Type + String + Value + SE + + FloaterMapSouthWest + + Comment + Floater Map South-West Label + Persist + 1 + Type + String + Value + SW + + + FloaterStatisticsRect + + Comment + Rectangle for chat history + Persist + 1 + Type + Rect + Value + + 0 + 400 + 250 + 0 + + + FlycamAbsolute + + Comment + Treat Flycam values as absolute positions (not deltas). + Persist + 1 + Type + Boolean + Value + 0 + + FlycamAxisDeadZone0 + + Comment + Flycam axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone1 + + Comment + Flycam axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone2 + + Comment + Flycam axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone3 + + Comment + Flycam axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone4 + + Comment + Flycam axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone5 + + Comment + Flycam axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone6 + + Comment + Flycam axis 6 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisScale0 + + Comment + Flycam axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale1 + + Comment + Flycam axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale2 + + Comment + Flycam axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale3 + + Comment + Flycam axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale4 + + Comment + Flycam axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale5 + + Comment + Flycam axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale6 + + Comment + Flycam axis 6 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamBuildModeScale + + Comment + Scale factor to apply to flycam movements when in build mode. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamFeathering + + Comment + Flycam feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + + FlycamZoomDirect + + Comment + Map flycam zoom axis directly to camera zoom. + Persist + 1 + Type + Boolean + Value + 0 + + FlyingAtExit + + Comment + Was flying when last logged out, so fly when logging in + Persist + 1 + Type + Boolean + Value + 0 + + FocusOffsetRearView + + Comment + Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward) + Persist + 1 + Type + Vector3D + Value + + 1.0 + 0.0 + 1.0 + + + FocusOffsetFrontView + + Comment + Initial focus point offset relative to avatar for the camera preset Front View + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + + FocusOffsetGroupView + + Comment + Initial focus point offset relative to avatar for the camera preset Group View + Persist + 1 + Type + Vector3D + Value + + 1.5 + 0.7 + 1.0 + + + FocusPosOnLogout + + Comment + Camera focus point when last logged out (global coordinates) + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + + FolderAutoOpenDelay + + Comment + Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop + Persist + 1 + Type + F32 + Value + 0.75 + + FolderLoadingMessageWaitTime + + Comment + Seconds to wait before showing the LOADING... text in folder views + Persist + 1 + Type + F32 + Value + 0.5 + + FontScreenDPI + + Comment + Font resolution, higher is bigger (pixels per inch) + Persist + 1 + Type + F32 + Value + 96.0 + + ForceAssetFail + + Comment + Force wearable fetches to fail for this asset type. + Persist + 1 + Type + U32 + Value + 255 + + ForceShowGrid + + Comment + Always show grid dropdown on login screen + Persist + 1 + Type + Boolean + Value + 0 + + ForceMandatoryUpdate + + Comment + For QA: On next startup, forces the auto-updater to run + Persist + 1 + Type + Boolean + Value + 0 + + FreezeTime + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + FullScreenAspectRatio + + Comment + Aspect ratio of fullscreen display (width / height) + Persist + 1 + Type + F32 + Value + 3 + + FullScreenAutoDetectAspectRatio + + Comment + Automatically detect proper aspect ratio for fullscreen display + Persist + 1 + Type + Boolean + Value + 0 + + GesturesMarketplaceURL + + Comment + URL to the Gestures Marketplace + Persist + 0 + Type + String + Value + https://www.xstreetsl.com/modules.php?name=Marketplace&CategoryID=233 + + GridCrossSections + + Comment + Highlight cross sections of prims with grid manipulation plane. + Persist + 1 + Type + Boolean + Value + 0 + + GridDrawSize + + Comment + Visible extent of 2D snap grid (meters) + Persist + 1 + Type + F32 + Value + 12.0 + + GridMode + + Comment + Snap grid reference frame (0 = world, 1 = local, 2 = reference object) + Persist + 1 + Type + S32 + Value + 0 + + GridOpacity + + Comment + Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.699999988079 + + GridResolution + + Comment + Size of single grid step (meters) + Persist + 1 + Type + F32 + Value + 0.5 + + GridSubUnit + + Comment + Display fractional grid steps, relative to grid size + Persist + 1 + Type + Boolean + Value + 0 + + GridSubdivision + + Comment + Maximum number of times to divide single snap grid unit when GridSubUnit is true + Persist + 1 + Type + S32 + Value + 32 + + GroupNotifyBoxHeight + + Comment + Height of group notice messages + Persist + 1 + Type + S32 + Value + 260 + + GroupNotifyBoxWidth + + Comment + Width of group notice messages + Persist + 1 + Type + S32 + Value + 305 + + HelpUseLocal + + Comment + If set, always use this for help: skins/default/html/[LANGUAGE]/help-offline/index.html + Persist + 0 + Type + Boolean + Value + 0 + + HelpURLFormat + + Comment + URL pattern for help page; arguments will be encoded; see llviewerhelp.cpp:buildHelpURL for arguments + Persist + 1 + Type + String + Value + http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC][DEBUG_MODE] + + HomeSidePanelURL + + Comment + URL for the web page to display in the Home side panel + Persist + 1 + Type + String + Value + https://viewer-sidebar.secondlife.com/sidebar.html?p=[AUTH_TOKEN]&lang=[LANGUAGE]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]&firstlogin=[FIRST_LOGIN] + + SearchURL + + Comment + URL for Search website, displayed in the Find floater + Persist + 0 + Type + String + Value + http://search-beta.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD] + + WebProfileURL + + Comment + URL for Web Profiles + Persist + 0 + Type + String + Value + https://my.secondlife.com/[AGENT_NAME] + + WebProfileNonProductionURL + + Comment + URL for Web Profiles on Non-Production grids + Persist + 0 + Type + String + Value + https://my-demo.secondlife.com/[AGENT_NAME] + + HighResSnapshot + + Comment + Double resolution of snapshot from current window resolution + Persist + 1 + Type + Boolean + Value + 0 + + HideSelectedObjects + + Comment + Hide Selected Objects + Persist + 1 + Type + Boolean + Value + 0 + + HostID + + Comment + Machine identifier for hosted Second Life instances + Persist + 0 + Type + String + Value + + + HtmlHelpLastPage + + Comment + Last URL visited via help system + Persist + 1 + Type + String + Value + + + IMShowTimestamps + + Comment + Show timestamps in IM + Persist + 1 + Type + Boolean + Value + 1 + + IMShowControlPanel + + Comment + Show IM Control Panel + Persist + 1 + Type + Boolean + Value + 1 + + IgnoreAllNotifications + + Comment + Ignore all notifications so we never need user input on them. + Persist + 1 + Type + Boolean + Value + 0 + + IgnorePixelDepth + + Comment + Ignore pixel depth settings. + Persist + 1 + Type + Boolean + Value + 0 + + ImagePipelineUseHTTP + + Comment + If TRUE use HTTP GET to fetch textures from the server + Persist + 1 + Type + Boolean + Value + 1 + + InactiveFloaterTransparency + + Comment + Transparency of inactive floaters (floaters that have no focus) + Persist + 1 + Type + F32 + Value + 0.65 + + InBandwidth + + Comment + Incoming bandwidth throttle (bps) + Persist + 1 + Type + F32 + Value + 0.0 + + InspectorFadeTime + + Comment + Fade out timing for inspectors + Persist + 1 + Type + F32 + Value + 0.5 + + InspectorShowTime + + Comment + Stay timing for inspectors + Persist + 1 + Type + F32 + Value + 3.0 + + InstallLanguage + + Comment + Language passed from installer (for UI) + Persist + 1 + Type + String + Value + default + + InventoryAutoOpenDelay + + Comment + Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop + Persist + 1 + Type + F32 + Value + 1.0 + + InventoryDisplayInbox + + Comment + Override received items inventory inbox display + Persist + 0 + Type + Boolean + Value + 0 + + InventoryDisplayOutbox + + Comment + Override merchant inventory outbox display + Persist + 0 + Type + Boolean + Value + 0 + + InventoryLinking + + Comment + Enable ability to create links to folders and items via "Paste as link". + Persist + 1 + Type + Boolean + Value + 0 + + InventorySortOrder + + Comment + Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 7 + + InvertMouse + + Comment + When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up) + Persist + 1 + Type + Boolean + Value + 0 + + JoystickAvatarEnabled + + Comment + Enables the Joystick to control Avatar movement. + Persist + 1 + Type + Boolean + Value + 1 + + JoystickAxis0 + + Comment + Flycam hardware axis mapping for internal axis 0 ([0, 5]). + Persist + 1 + Type + S32 + Value + 1 + + JoystickAxis1 + + Comment + Flycam hardware axis mapping for internal axis 1 ([0, 5]). + Persist + 1 + Type + S32 + Value + 0 + + JoystickAxis2 + + Comment + Flycam hardware axis mapping for internal axis 2 ([0, 5]). + Persist + 1 + Type + S32 + Value + 2 + + JoystickAxis3 + + Comment + Flycam hardware axis mapping for internal axis 3 ([0, 5]). + Persist + 1 + Type + S32 + Value + 4 + + JoystickAxis4 + + Comment + Flycam hardware axis mapping for internal axis 4 ([0, 5]). + Persist + 1 + Type + S32 + Value + 3 + + JoystickAxis5 + + Comment + Flycam hardware axis mapping for internal axis 5 ([0, 5]). + Persist + 1 + Type + S32 + Value + 5 + + JoystickAxis6 + + Comment + Flycam hardware axis mapping for internal axis 6 ([0, 5]). + Persist + 1 + Type + S32 + Value + -1 + + JoystickBuildEnabled + + Comment + Enables the Joystick to move edited objects. + Persist + 1 + Type + Boolean + Value + 0 + + JoystickEnabled + + Comment + Enables Joystick Input. + Persist + 1 + Type + Boolean + Value + 0 + + JoystickFlycamEnabled + + Comment + Enables the Joystick to control the flycam. + Persist + 0 + Type + Boolean + Value + 1 + + JoystickInitialized + + Comment + Whether or not a joystick has been detected and initiailized. + Persist + 1 + Type + String + Value + + + JoystickMouselookYaw + + Comment + Pass joystick yaw to scripts in Mouselook. + Persist + 1 + Type + Boolean + Value + 1 + + JoystickRunThreshold + + Comment + Input threshold to initiate running + Persist + 1 + Type + F32 + Value + 0.25 + + Jpeg2000AdvancedCompression + + Comment + Use advanced Jpeg2000 compression options (precincts, blocks, ordering, markers) + Persist + 1 + Type + Boolean + Value + 0 + + Jpeg2000PrecinctsSize + + Comment + Size of image precincts. Assumed square and same for all levels. Must be power of 2. + Persist + 1 + Type + S32 + Value + 256 + + Jpeg2000BlocksSize + + Comment + Size of encoding blocks. Assumed square and same for all levels. Must be power of 2. Max 64, Min 4. + Persist + 1 + Type + S32 + Value + 64 + + KeepAspectForSnapshot + + Comment + Use full window when taking snapshot, regardless of requested image size + Persist + 1 + Type + Boolean + Value + 1 + + LandBrushSize + + Comment + Size of affected region when using teraform tool + Persist + 1 + Type + F32 + Value + 2.0 + + LastInventoryInboxExpand + + Comment + The last time the received items inbox was expanded. + Persist + 1 + Type + String + Value + + + LCDDestination + + Comment + Which LCD to use + Persist + 1 + Type + S32 + Value + 0 + + LSLFindCaseInsensitivity + + Comment + Use case insensitivity when searching in LSL editor + Persist + 1 + Type + Boolean + Value + 0 + + LSLHelpURL + + Comment + URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword + Persist + 1 + Type + String + Value + http://wiki.secondlife.com/wiki/[LSL_STRING] + + LagMeterShrunk + + Comment + Last large/small state for lag meter + Persist + 1 + Type + Boolean + Value + 0 + + Language + + Comment + Language specifier (for UI) + Persist + 1 + Type + String + Value + default + + LanguageIsPublic + + Comment + Let other residents see our language information + Persist + 1 + Type + Boolean + Value + 1 + + LastGPUClass + + Comment + [DO NOT MODIFY] previous GPU class for tracking hardware changes + Persist + 1 + Type + S32 + Value + -1 + + LastFeatureVersion + + Comment + [DO NOT MODIFY] Version number for tracking hardware changes + Persist + 1 + Type + S32 + Value + 0 + + LastFindPanel + + Comment + Controls which find operation appears by default when clicking "Find" button + Persist + 1 + Type + String + Value + find_all_panel + + LastName + + Comment + Login last name + Persist + 1 + Type + String + Value + + + LastPrefTab + + Comment + Last selected tab in preferences window + Persist + 1 + Type + S32 + Value + 0 + + LastMediaSettingsTab + + Comment + Last selected tab in media settings window + Persist + 1 + Type + S32 + Value + 0 + + LastRunVersion + + Comment + Version number of last instance of the viewer that you ran + Persist + 1 + Type + String + Value + 0.0.0 + + + LastSnapshotToEmailHeight + + Comment + The height of the last email snapshot, in px + Persist + 1 + Type + S32 + Value + 768 + + LastSnapshotToEmailWidth + + Comment + The width of the last email snapshot, in px + Persist + 1 + Type + S32 + Value + 1024 + + LastSnapshotToDiskHeight + + Comment + The height of the last disk snapshot, in px + Persist + 1 + Type + S32 + Value + 768 + + LastSnapshotToDiskWidth + + Comment + The width of the last disk snapshot, in px + Persist + 1 + Type + S32 + Value + 1024 + + LastSnapshotToInventoryHeight + + Comment + The height of the last texture snapshot, in px + Persist + 1 + Type + S32 + Value + 512 + + LastSnapshotToInventoryWidth + + Comment + The width of the last texture snapshot, in px + Persist + 1 + Type + S32 + Value + 512 + + LastSnapshotType + + Comment + Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image) + Persist + 1 + Type + S32 + Value + 0 + + LeftClickShowMenu + + Comment + Left click opens pie menu (FALSE = left click touches or grabs object) + Persist + 1 + Type + Boolean + Value + 0 + + LimitDragDistance + + Comment + Limit translation of object via translate tool + Persist + 1 + Type + Boolean + Value + 1 + + LimitSelectDistance + + Comment + Disallow selection of objects beyond max select distance + Persist + 1 + Type + Boolean + Value + 1 + + LipSyncAah + + Comment + Aah (jaw opening) babble loop + Persist + 1 + Type + String + Value + 257998776531013446642343 + + LipSyncAahPowerTransfer + + Comment + Transfer curve for Voice Interface power to aah lip sync amplitude + Persist + 1 + Type + String + Value + 0000123456789 + + LipSyncEnabled + + Comment + 0 disable lip-sync, 1 enable babble loop + Persist + 1 + Type + Boolean + Value + 1 + + LipSyncOoh + + Comment + Ooh (mouth width) babble loop + Persist + 1 + Type + String + Value + 1247898743223344444443200000 + + LipSyncOohAahRate + + Comment + Rate to babble Ooh and Aah (/sec) + Persist + 1 + Type + F32 + Value + 24.0 + + LipSyncOohPowerTransfer + + Comment + Transfer curve for Voice Interface power to ooh lip sync amplitude + Persist + 1 + Type + String + Value + 0012345566778899 + + LocalCacheVersion + + Comment + Version number of cache + Persist + 1 + Type + S32 + Value + 0 + + LocalFileSystemBrowsingEnabled + + Comment + Enable/disable access to the local file system via the file picker + Persist + 1 + Type + Boolean + Value + 1 + + LoginSRVTimeout + + Comment + Duration in seconds of the login SRV request timeout + Persist + 0 + Type + F32 + Value + 10.0 + + LoginSRVPump + + Comment + Name of the message pump that handles SRV request + Persist + 0 + Type + String + Value + LLAres + + LogMessages + + Comment + Log network traffic + Persist + 1 + Type + Boolean + Value + 0 + + LogTextureNetworkTraffic + + Comment + Log network traffic for textures + Persist + 1 + Type + Boolean + Value + 0 + + LoginAsGod + + Comment + Attempt to login with god powers (Linden accounts only) + Persist + 1 + Type + Boolean + Value + 0 + + LoginLocation + + Comment + Login location ('last', 'home') + Persist + 1 + Type + String + Value + last + + LoginPage + + Comment + Login authentication page. + Persist + 1 + Type + String + Value + + + LosslessJ2CUpload + + Comment + Use lossless compression for small image uploads + Persist + 1 + Type + Boolean + Value + 0 + + MainloopTimeoutDefault + + Comment + Timeout duration for mainloop lock detection, in seconds. + Persist + 1 + Type + F32 + Value + 20.0 + + MapOverlayIndex + + Comment + Currently selected world map type + Persist + 1 + Type + S32 + Value + 0 + + MapScale + + Comment + World map zoom level (pixels per region) + Persist + 1 + Type + F32 + Value + 128.0 + + MapServerURL + + Comment + World map URL template for locating map tiles + Persist + 0 + Type + String + Value + http://map.secondlife.com.s3.amazonaws.com/ + + CurrentMapServerURL + + Comment + Current Session World map URL + Persist + 0 + Type + String + Value + + + MapShowEvents + + Comment + Show events on world map + Persist + 1 + Type + Boolean + Value + 1 + + MapShowInfohubs + + Comment + Show infohubs on the world map + Persist + 1 + Type + Boolean + Value + 1 + + MapShowLandForSale + + Comment + Show land for sale on world map + Persist + 1 + Type + Boolean + Value + 0 + + MapShowPeople + + Comment + Show other users on world map + Persist + 1 + Type + Boolean + Value + 1 + + MapShowTelehubs + + Comment + Show telehubs on world map + Persist + 1 + Type + Boolean + Value + 1 + + MiniMapAutoCenter + + Comment + Center the focal point of the minimap. + Persist + 0 + Type + Boolean + Value + 1 + + Marker + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + + + MarketplaceURL + + Comment + URL to the Marketplace + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/ + + MarketplaceURL_objectFemale + + Comment + URL to the Marketplace Attachments Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/attachments + + MarketplaceURL_objectMale + + Comment + URL to the Marketplace Attachments Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/attachments + + MarketplaceURL_clothingFemale + + Comment + URL to the Marketplace Clothing Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/clothing_female_avatar + + MarketplaceURL_clothingMale + + Comment + URL to the Marketplace Clothing Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/clothing_male_avatar + + MarketplaceURL_bodypartFemale + + Comment + URL to the Marketplace Bodyparts Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com + + MarketplaceURL_bodypartMale + + Comment + URL to the Marketplace Bodyparts Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/ + + MarketplaceURL_glovesMale + + Comment + URL to the Marketplace Gloves Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/gloves_both_women_and_men + + MarketplaceURL_glovesFemale + + Comment + URL to the Marketplace Gloves Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/gloves_both_women_and_men + + MarketplaceURL_jacketFemale + + Comment + URL to the Marketplace Jacket Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/jacket_womens + + MarketplaceURL_jacketMale + + Comment + URL to the Marketplace Jacket Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/jacket_mens + + MarketplaceURL_shirtFemale + + Comment + URL to the Marketplace Shirt Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/shirt_womens + + MarketplaceURL_shirtMale + + Comment + URL to the Marketplace Shirt Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/shirt_mens + + MarketplaceURL_undershirtFemale + + Comment + URL to the Marketplace Undershirt Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/undershirt_womens + + MarketplaceURL_undershirtMale + + Comment + URL to the Marketplace Undershirt Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/undershirt_mens + + MarketplaceURL_skirtFemale + + Comment + URL to the Marketplace Skirt Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/skirts_women + + MarketplaceURL_skirtMale + + Comment + URL to the Marketplace Skirt Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/skirts_women + + MarketplaceURL_pantsFemale + + Comment + URL to the Marketplace Pants Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/pants_women + + MarketplaceURL_pantsMale + + Comment + URL to the Marketplace Pants Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/pants_men + + MarketplaceURL_underpantsFemale + + Comment + URL to the Marketplace Underwear Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/underwear_women + + MarketplaceURL_underpantsMale + + Comment + URL to the Marketplace Underwear Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/underwear_men + + MarketplaceURL_shoesFemale + + Comment + URL to the Marketplace Shoes Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/shoes_women + + MarketplaceURL_shoesMale + + Comment + URL to the Marketplace Shoes Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/shoes_men + + MarketplaceURL_socksFemale + + Comment + URL to the Marketplace Socks Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/socks_women + + MarketplaceURL_socksMale + + Comment + URL to the Marketplace Socks Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/socks_women + + MarketplaceURL_tattooMale + + Comment + URL to the Marketplace Tattoo Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/tattoo_both_women_and_men + + MarketplaceURL_tattooFemale + + Comment + URL to the Marketplace Tattoo Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/tattoo_both_women_and_men + + MarketplaceURL_hairFemale + + Comment + URL to the Marketplace Hair Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/womens_hair + + MarketplaceURL_hairMale + + Comment + URL to the Marketplace Hair Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/mens_hair + + MarketplaceURL_eyesFemale + + Comment + URL to the Marketplace Eyes Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/womens_eyes + + MarketplaceURL_eyesMale + + Comment + URL to the Marketplace Eyes Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/mens_eyes + + MarketplaceURL_shapeFemale + + Comment + URL to the Marketplace Shape Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/womens_shape + + MarketplaceURL_shapeMale + + Comment + URL to the Marketplace Shape Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/mens_shape + + MarketplaceURL_skinFemale + + Comment + URL to the Marketplace Skin Female + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/womens_skin + + MarketplaceURL_skinMale + + Comment + URL to the Marketplace Skins Male + Persist + 0 + Type + String + Value + http://marketplace.secondlife.com/trampoline/viewer21/mens_skin + + MaxDragDistance + + Comment + Maximum allowed translation distance in a single operation of translate tool (meters from start point) + Persist + 1 + Type + F32 + Value + 48.0 + + MaxSelectDistance + + Comment + Maximum allowed selection distance (meters from avatar) + Persist + 1 + Type + F32 + Value + 64.0 + + MaxWearableWaitTime + + Comment + Max seconds to wait for wearable assets to fetch. + Persist + 1 + Type + F32 + Value + 60.0 + + MediaControlFadeTime + + Comment + Amount of time (in seconds) that the media control fades + Persist + 1 + Type + F32 + Value + 1.5 + + MediaControlTimeout + + Comment + Amount of time (in seconds) for media controls to fade with no mouse activity + Persist + 1 + Type + F32 + Value + 3.0 + + MediaEnablePopups + + Comment + If true, enable targeted links and javascript in media to open new media browser windows without a prompt. + Persist + 1 + Type + Boolean + Value + 0 + + MediaOnAPrimUI + + Comment + Whether or not to show the "link sharing" UI + Persist + 1 + Type + Boolean + Value + 1 + + MediaPerformanceManagerDebug + + Comment + Whether to show debug data for the media performance manager in the nearby media list. + Persist + 1 + Type + Boolean + Value + 0 + + MediaShowOnOthers + + Comment + Whether or not to show media on other avatars + Persist + 1 + Type + Boolean + Value + 0 + + MediaShowOutsideParcel + + Comment + Whether or not to show media from outside the current parcel + Persist + 1 + Type + Boolean + Value + 1 + + MediaShowWithinParcel + + Comment + Whether or not to show media within the current parcel + Persist + 1 + Type + Boolean + Value + 1 + + MediaTentativeAutoPlay + + Comment + This is a tentative flag that may be temporarily set off by the user, until she teleports + Persist + 0 + Type + Boolean + Value + 1 + + MemoryLogFrequency + + Comment + Seconds between display of Memory in log (0 for never) + Persist + 1 + Type + F32 + Value + 600.0 + + MemProfiling + + Comment + You want to use tcmalloc's memory profiling options. + Persist + 1 + Type + Boolean + Value + 0 + + MenuAccessKeyTime + + Comment + Time (seconds) in which the menu key must be tapped to move focus to the menu bar + Persist + 1 + Type + F32 + Value + 0.25 + + MenuBarHeight + + Comment + + Persist + 0 + Type + S32 + Value + 18 + + MenuBarWidth + + Comment + + Persist + 0 + Type + S32 + Value + 410 + + MePanelOpened + + Comment + Indicates that Me Panel was opened at least once after Viewer was installed + Persist + 1 + Type + Boolean + Value + 0 + + MeshEnabled + + Comment + Expose UI for mesh functionality (may require restart to take effect). + Persist + 1 + Type + Boolean + Value + 1 + + MeshImportUseSLM + + Comment + Use cached copy of last upload for a dae if available instead of loading dae file from scratch. + Persist + 1 + Type + Boolean + Value + 0 + + MeshUploadLogXML + + Comment + Verbose XML logging on mesh upload + Persist + 1 + Type + Boolean + Value + 0 + + MeshUploadFakeErrors + + Comment + Force upload errors (for testing) + Persist + 1 + Type + S32 + Value + 0 + + MigrateCacheDirectory + + Comment + Check for old version of disk cache to migrate to current location + Persist + 1 + Type + Boolean + Value + 1 + + MiniMapPrimMaxRadius + + Comment + Radius of the largest prim to show on the MiniMap. Increasing beyond 256 may cause client lag. + Persist + 1 + Type + F32 + Value + 256.0 + + MiniMapRotate + + Comment + Rotate miniature world map to avatar direction + Persist + 1 + Type + Boolean + Value + 1 + + MiniMapScale + + Comment + Miniature world map zoom level (pixels per region) + Persist + 1 + Type + F32 + Value + 128.0 + + MouseSensitivity + + Comment + Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity) + Persist + 1 + Type + F32 + Value + 3.0 + + MouseSmooth + + Comment + Smooths out motion of mouse when in mouselook mode. + Persist + 1 + Type + Boolean + Value + 0 + + MouseSun + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + MuteAmbient + + Comment + Ambient sound effects, such as wind noise, play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + + MuteAudio + + Comment + All audio plays at 0 volume (streaming audio still takes up bandwidth, for example) + Persist + 1 + Type + Boolean + Value + 0 + + MuteMedia + + Comment + Media plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + + MuteMusic + + Comment + Music plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + + MuteSounds + + Comment + Sound effects play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + + MuteUI + + Comment + UI sound effects play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + + MuteVoice + + Comment + Voice plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + + MuteWhenMinimized + + Comment + Mute audio when SL window is minimized + Persist + 1 + Type + Boolean + Value + 0 + + MyOutfitsAutofill + + Comment + Always autofill My Outfits from library when empty (else happens just once). + Persist + 1 + Type + Boolean + Value + 0 + + NearMeRange + + Comment + Search radius for nearby avatars + Persist + 1 + Type + F32 + Value + 130 + + NextOwnerCopy + + Comment + Newly created objects can be copied by next owner + Persist + 1 + Type + Boolean + Value + 0 + + NextOwnerModify + + Comment + Newly created objects can be modified by next owner + Persist + 1 + Type + Boolean + Value + 0 + + NextOwnerTransfer + + Comment + Newly created objects can be resold or given away by next owner + Persist + 1 + Type + Boolean + Value + 1 + + NewCacheLocation + + Comment + Change the location of the local disk cache to this + Persist + 1 + Type + String + Value + + + NewCacheLocationTopFolder + + Comment + Change the top folder location of the local disk cache to this + Persist + 1 + Type + String + Value + + + NextLoginLocation + + Comment + Location to log into by default. + Persist + 1 + Type + String + Value + + + NoAudio + + Comment + Disable audio playback. + Persist + 1 + Type + Boolean + Value + 0 + + NoHardwareProbe + + Comment + Disable hardware probe. + Persist + 1 + Type + Boolean + Value + 0 + + NoInventoryLibrary + + Comment + Do not request inventory library. + Persist + 1 + Type + Boolean + Value + 0 + + NoPreload + + Comment + Disable sound and image preload. + Persist + 1 + Type + Boolean + Value + 0 + + NoVerifySSLCert + + Comment + Do not verify SSL peers. + Persist + 1 + Type + Boolean + Value + 0 + + NotifyBoxHeight + + Comment + Height of notification messages + Persist + 1 + Type + S32 + Value + 200 + + NotifyBoxWidth + + Comment + Width of notification messages + Persist + 1 + Type + S32 + Value + 305 + + NotificationToastLifeTime + + Comment + Number of seconds while a notification toast exists + Persist + 1 + Type + S32 + Value + 5 + + NotificationTipToastLifeTime + + Comment + Number of seconds while a notification tip toast exist + Persist + 1 + Type + S32 + Value + 10 + + ToastFadingTime + + Comment + Number of seconds while a toast is fading + Persist + 1 + Type + S32 + Value + 1 + + NearbyToastFadingTime + + Comment + Number of seconds while a nearby chat toast is fading + Persist + 1 + Type + S32 + Value + 3 + + NearbyToastLifeTime + + Comment + Number of seconds while a nearby chat toast exists + Persist + 1 + Type + S32 + Value + 23 + + StartUpToastLifeTime + + Comment + Number of seconds while a StartUp toast exist + Persist + 1 + Type + S32 + Value + 5 + + ToastGap + + Comment + Gap between toasts on a screen (min. value is 5) + Persist + 1 + Type + S32 + Value + 7 + + ToastButtonWidth + + Comment + + Default width of buttons in the toast. + Notes: + If required width will be less then this one, a button will be reshaped to default size , otherwise to required + Change of this parameter will affect the layout of buttons in notification toast. + + Persist + 1 + Type + S32 + Value + 90 + + ChannelBottomPanelMargin + + Comment + Space from a lower toast to the Bottom Tray + Persist + 1 + Type + S32 + Value + 35 + + NotificationChannelRightMargin + + Comment + Space between toasts and a right border of an area where they can appear + Persist + 1 + Type + S32 + Value + 5 + + NotificationChannelHeightRatio + + Comment + Notification channel and World View ratio(0.0 - always show 1 notification, 1.0 - max ratio). + Persist + 1 + Type + F32 + Value + 0.5 + + OverflowToastHeight + + Comment + Height of an overflow toast + Persist + 1 + Type + S32 + Value + 72 + + NotifyMoneyChange + + Comment + Pop up notifications for all L$ transactions + Persist + 1 + Type + Boolean + Value + 1 + + NotifyTipDuration + + Comment + Length of time that notification tips stay on screen (seconds) + Persist + 1 + Type + F32 + Value + 4.0 + + NumSessions + + Comment + Number of successful logins to Second Life + Persist + 1 + Type + S32 + Value + 0 + + NumpadControl + + Comment + How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock) + Persist + 1 + Type + S32 + Value + 0 + + ObjectCacheEnabled + + Comment + Enable the object cache. + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatAdvanced + + Comment + Expand advanced performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatBasic + + Comment + Expand basic performance stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatNet + + Comment + Expand network stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatRender + + Comment + Expand render stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatSim + + Comment + Expand simulator performance stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatTexture + + Comment + Expand Texture performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatPhysicsDetails + + Comment + Expand Physics Details performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatSimTime + + Comment + Expand Simulator Time performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatSimTimeDetails + + Comment + Expand Simulator Time Details performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OutBandwidth + + Comment + Outgoing bandwidth throttle (bps) + Persist + 1 + Type + F32 + Value + 0.0 + + OverlayTitle + + Comment + Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces) + Persist + 1 + Type + String + Value + Set_via_OverlayTitle_in_settings.xml + + PTTCurrentlyEnabled + + Comment + Use Push to Talk mode + Persist + 0 + Type + Boolean + Value + 1 + + PacketDropPercentage + + Comment + Percentage of packets dropped by the client. + Persist + 1 + Type + F32 + Value + 0.0 + + ObjectCostHighThreshold + + Comment + Threshold at which object cost is considered high (displayed in red). + Persist + 1 + Type + F32 + Value + 50.0 + + ObjectCostLowColor + + Comment + Color for object with a low object cost. + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.5 + 1.0 + 0.5 + + + ObjectCostMidColor + + Comment + Color for object with a medium object cost. + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.75 + 0.0 + 0.65 + + + ObjectCostHighColor + + Comment + Color for object a high object cost. + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.0 + 0.75 + + + + ParcelMediaAutoPlayEnable + + Comment + Auto play parcel media when available + Persist + 1 + Type + Boolean + Value + 1 + + ParticipantListShowIcons + + Comment + Show/hide people icons in participant list + Persist + 1 + Type + Boolean + Value + 1 + + PerAccountSettingsFile + + Comment + Persisted client settings file name (per user). + Persist + 0 + Type + String + Value + + + PermissionsCautionEnabled + + Comment + When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission + Persist + 0 + Type + Boolean + Value + 1 + + PermissionsCautionNotifyBoxHeight + + Comment + Height of caution-style notification messages + Persist + 0 + Type + S32 + Value + 344 + + PickerContextOpacity + + Comment + Controls overall opacity of context frustrum connecting color and texture pickers with their swatches + Persist + 1 + Type + F32 + Value + 0.34999999404 + + PicksPerSecondMouseMoving + + Comment + How often to perform hover picks while the mouse is moving (picks per second) + Persist + 1 + Type + F32 + Value + 5.0 + + PicksPerSecondMouseStationary + + Comment + How often to perform hover picks while the mouse is stationary (picks per second) + Persist + 1 + Type + F32 + Value + 0.0 + + PieMenuLineWidth + + Comment + Width of lines in pie menu display (pixels) + Persist + 1 + Type + F32 + Value + 2.5 + + PingInterpolate + + Comment + Extrapolate object position along velocity vector based on ping delay + Persist + 1 + Type + Boolean + Value + 0 + + PitchFromMousePosition + + Comment + Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom) + Persist + 1 + Type + F32 + Value + 90.0 + + PlayTypingAnim + + Comment + Your avatar plays the typing animation whenever you type in the chat bar + Persist + 1 + Type + Boolean + Value + 1 + + PluginAttachDebuggerToPlugins + + Comment + If true, attach a debugger session to each plugin process as it's launched. + Persist + 1 + Type + Boolean + Value + 0 + + PluginInstancesCPULimit + + Comment + Amount of total plugin CPU usage before inworld plugins start getting turned down to "slideshow" priority. Set to 0 to disable this check. + Persist + 1 + Type + F32 + Value + 0.9 + + + PlainTextChatHistory + + Comment + Enable/Disable plain text chat history style + Persist + 1 + Type + Boolean + Value + 0 + + + PluginInstancesLow + + Comment + Limit on the number of inworld media plugins that will run at "low" priority + Persist + 1 + Type + U32 + Value + 4 + + PluginInstancesNormal + + Comment + Limit on the number of inworld media plugins that will run at "normal" or higher priority + Persist + 1 + Type + U32 + Value + 2 + + PluginInstancesTotal + + Comment + Hard limit on the number of plugins that will be instantiated at once for inworld media + Persist + 1 + Type + U32 + Value + 8 + + + PluginUseReadThread + + Comment + Use a separate thread to read incoming messages from plugins + Persist + 1 + Type + Boolean + Value + 0 + + PostFirstLoginIntroURL + + Comment + URL of intro presenatation after first time users first login + Persist + 1 + Type + String + Value + + + PostFirstLoginIntroViewed + + Comment + Flag indicating if user has seen intro presenatation after first time users first login + Persist + 1 + Type + Boolean + Value + 0 + + PrecachingDelay + + Comment + Delay when logging in to load world before showing it (seconds) + Persist + 1 + Type + F32 + Value + 6.0 + + PreferredMaturity + + Comment + Setting for the user's preferred maturity level (consts in indra_constants.h) + Persist + 1 + Type + U32 + Value + 13 + + + PreviewAmbientColor + + Comment + Ambient color of preview render. + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 0.0 + 1.0 + + + + + PreviewDiffuse0 + + Comment + Diffise color of preview light 0. + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + + PreviewDiffuse1 + + Comment + Diffise color of preview light 1. + Persist + 1 + Type + Color4 + Value + + 0.25 + 0.25 + 0.25 + 1.0 + + + + PreviewDiffuse2 + + Comment + Diffise color of preview light 2. + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + + PreviewSpecular0 + + Comment + Diffise color of preview light 0. + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + + PreviewSpecular1 + + Comment + Diffise color of preview light 1. + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + + PreviewSpecular2 + + Comment + Diffise color of preview light 2. + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + + + PreviewDirection0 + + Comment + Direction of light 0 for preview render. + Persist + 1 + Type + Vector3 + Value + + -0.75 + 1 + 1.0 + + + + PreviewDirection1 + + Comment + Direction of light 1 for preview render. + Persist + 1 + Type + Vector3 + Value + + 0.5 + -0.6 + 0.4 + + + + PreviewDirection2 + + Comment + Direction of light 2 for preview render. + Persist + 1 + Type + Vector3 + Value + + 0.5 + -0.8 + 0.3 + + + + PrimMediaMasterEnabled + + Comment + Whether or not Media on a Prim is enabled. + Persist + 1 + Type + Boolean + Value + 1 + + PrimMediaControlsUseHoverControlSet + + Comment + Whether or not hovering over prim media uses minimal "hover" controls or the authored control set. + Persist + 1 + Type + Boolean + Value + 0 + + PrimMediaDragNDrop + + Comment + Enable drag and drop of URLs onto prim faces + Persist + 1 + Type + Boolean + Value + 1 + + PrimMediaMaxRetries + + Comment + Maximum number of retries for media queries. + Persist + 1 + Type + U32 + Value + 4 + + PrimMediaRequestQueueDelay + + Comment + Timer delay for fetching media from the queue (in seconds). + Persist + 1 + Type + F32 + Value + 1.0 + + PrimMediaRetryTimerDelay + + Comment + Timer delay for retrying on media queries (in seconds). + Persist + 1 + Type + F32 + Value + 5.0 + + PrimMediaMaxSortedQueueSize + + Comment + Maximum number of objects the viewer will load media for initially + Persist + 1 + Type + U32 + Value + 100000 + + PrimMediaMaxRoundRobinQueueSize + + Comment + Maximum number of objects the viewer will continuously update media for + Persist + 1 + Type + U32 + Value + 100000 + + ProbeHardwareOnStartup + + Comment + Query current hardware configuration on application startup + Persist + 1 + Type + Boolean + Value + 1 + + PurgeCacheOnNextStartup + + Comment + Clear local file cache next time viewer is run + Persist + 1 + Type + Boolean + Value + 0 + + PurgeCacheOnStartup + + Comment + Clear local file cache every time viewer is run + Persist + 1 + Type + Boolean + Value + 0 + + PushToTalkButton + + Comment + Which button or keyboard key is used for push-to-talk + Persist + 1 + Type + String + Value + MiddleMouse + + PushToTalkToggle + + Comment + Should the push-to-talk button behave as a toggle + Persist + 1 + Type + Boolean + Value + 1 + + QAMode + + Comment + Enable Testing Features. + Persist + 1 + Type + Boolean + Value + 0 + + QAModeEventHostPort + + Comment + Port on which lleventhost should listen + Persist + 0 + Type + S32 + Value + -1 + + QAModeTermCode + + Comment + On LL_ERRS, terminate with this code instead of OS message box + Persist + 0 + Type + S32 + Value + -1 + + QuietSnapshotsToDisk + + Comment + Take snapshots to disk without playing animation or sound + Persist + 1 + Type + Boolean + Value + 0 + + QuitAfterSeconds + + Comment + The duration allowed before quitting. + Persist + 1 + Type + F32 + Value + 0.0 + + QuitAfterSecondsOfAFK + + Comment + The duration allowed after being AFK before quitting. + Persist + 1 + Type + F32 + Value + 0.0 + + QuitOnLoginActivated + + Comment + Quit if login page is activated (used when auto login is on and users must not be able to login manually) + Persist + 1 + Type + Boolean + Value + 0 + + RadioLandBrushAction + + Comment + Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert) + Persist + 1 + Type + S32 + Value + 0 + + RadioLandBrushSize + + Comment + Size of land modification brush (0 = small, 1 = medium, 2 = large) + Persist + 1 + Type + S32 + Value + 0 + + LandBrushForce + + Comment + Multiplier for land modification brush force. + Persist + 1 + Type + F32 + Value + 1.0 + + MediaBrowserWindowLimit + + Comment + Maximum number of media brower windows that can be open at once in the media browser floater (0 for no limit) + Persist + 1 + Type + S32 + Value + 5 + + WebContentWindowLimit + + Comment + Maximum number of web brower windows that can be open at once in the Web content floater (0 for no limit) + Persist + 1 + Type + S32 + Value + 5 + + MediaRollOffRate + + Comment + Multiplier to change rate of media attenuation + Persist + 1 + Type + F32 + Value + 0.125 + + MediaRollOffMin + + Comment + Adjusts the distance at which media attentuation starts + Persist + 1 + Type + F32 + Value + 5.0 + + MediaRollOffMax + + Comment + Distance at which media volume is set to 0 + Persist + 1 + Type + F32 + Value + 30.0 + + RecentItemsSortOrder + + Comment + Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 1 + + RectangleSelectInclusive + + Comment + Select objects that have at least one vertex inside selection rectangle + Persist + 1 + Type + Boolean + Value + 1 + + RegInClient + + Comment + Experimental: Embed registration in login screen + Persist + 1 + Type + Boolean + Value + 0 + + QuickBuyCurrency + + Comment + Toggle between HTML based currency purchase floater and legacy XUI version + Persist + 1 + Type + Boolean + Value + 0 + + RegionTextureSize + + Comment + Terrain texture dimensions (power of 2) + Persist + 1 + Type + U32 + Value + 256 + + RememberPassword + + Comment + Keep password (in encrypted form) for next login + Persist + 1 + Type + Boolean + Value + 1 + + + OctreeMaxNodeCapacity + + Comment + Maximum number of elements to store in a single octree node + Persist + 1 + Type + U32 + Value + 128 + + + OctreeStaticObjectSizeFactor + + Comment + Multiplier on static object size for determining octree node size + Persist + 1 + Type + S32 + Value + 4 + + + OctreeAlphaDistanceFactor + + Comment + Multiplier on alpha object distance for determining octree node size + Persist + 1 + Type + Vector3 + Value + + 0.1 + 0.0 + 0.0 + + + + OctreeAttachmentSizeFactor + + Comment + Multiplier on attachment size for determining octree node size + Persist + 1 + Type + S32 + Value + 4 + + + OctreeDistanceFactor + + Comment + Multiplier on distance for determining octree node size + Persist + 1 + Type + Vector3 + Value + + 0.01 + 0.0 + 0.0 + + + + RenderAnisotropic + + Comment + Render textures using anisotropic filtering + Persist + 1 + Type + Boolean + Value + 0 + + RenderAppleUseMultGL + + Comment + Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL). + Persist + 1 + Type + Boolean + Value + 0 + + RenderAttachedLights + + Comment + Render lighted prims that are attached to avatars + Persist + 1 + Type + Boolean + Value + 1 + + RenderAttachedParticles + + Comment + Render particle systems that are attached to avatars + Persist + 1 + Type + Boolean + Value + 1 + + RenderAvatar + + Comment + Render Avatars + Persist + 0 + Type + Boolean + Value + 1 + + RenderAvatarCloth + + Comment + Controls if avatars use wavy cloth + Persist + 1 + Type + Boolean + Value + 1 + + RenderAvatarLODFactor + + Comment + Controls level of detail of avatars (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 0.5 + + RenderAvatarMaxVisible + + Comment + Maximum number of avatars to display at any one time + Persist + 1 + Type + S32 + Value + 12 + + RenderAvatarPhysicsLODFactor + + Comment + Controls level of detail of avatar physics (such as breast physics). + Persist + 1 + Type + F32 + Value + 1.0 + + RenderAvatarVP + + Comment + Use vertex programs to perform hardware skinning of avatar + Persist + 1 + Type + Boolean + Value + 1 + + RenderPerformanceTest + + Comment + + Disable rendering of everything but in-world content for + performance testing + + Persist + 1 + Type + Boolean + Value + 0 + + + RenderLocalLights + + Comment + Whether or not to render local lights. + Persist + 1 + Type + Boolean + Value + 1 + + + RenderShadowNearDist + + Comment + Near clip plane of shadow camera (affects precision of depth shadows). + Persist + 1 + Type + Vector3 + Value + + 256 + 256 + 256 + + + RenderShadowClipPlanes + + Comment + Near clip plane split distances for shadow map frusta. + Persist + 1 + Type + Vector3 + Value + + 1.0 + 12.0 + 32.0 + + + RenderShadowSplitExponent + + Comment + Near clip plane split distances for shadow map frusta (x=perspective, y=ortho, z=transition rate). + Persist + 1 + Type + Vector3 + Value + + 3.0 + 3.0 + 2.0 + + + RenderShadowOrthoClipPlanes + + Comment + Near clip plane split distances for orthographic shadow map frusta. + Persist + 1 + Type + Vector3 + Value + + 4.0 + 8.0 + 24.0 + + + RenderShadowProjOffset + + Comment + Amount to scale distance to virtual origin of shadow perspective projection. + Persist + 1 + Type + F32 + Value + 2.0 + + RenderShadowSlopeThreshold + + Comment + Cutoff slope value for points to affect perspective shadow generation + Persist + 1 + Type + F32 + Value + 0.0 + + RenderShadowProjExponent + + Comment + Exponent applied to transition between ortho and perspective shadow projections based on viewing angle and light vector. + Persist + 1 + Type + F32 + Value + 0.5 + + RenderSSAOScale + + Comment + Scaling factor for the area to sample for occluders (pixels at 1 meter away, inversely varying with distance) + Persist + 1 + Type + F32 + Value + 500.0 + + RenderSSAOMaxScale + + Comment + Maximum screen radius for sampling (pixels) + Persist + 1 + Type + U32 + Value + 200 + + RenderSSAOFactor + + Comment + Occlusion sensitivity factor for ambient occlusion (larger is more) + Persist + 1 + Type + F32 + Value + 0.30 + + RenderSSAOEffect + + Comment + Multiplier for (1) value and (2) saturation (HSV definition), for areas which are totally occluded. Blends with original color for partly-occluded areas. (Third component is unused.) + Persist + 1 + Type + Vector3 + Value + + 0.80 + 1.00 + 0.00 + + + RenderBumpmapMinDistanceSquared + + Comment + Maximum distance at which to render bumpmapped primitives (distance in meters, squared) + Persist + 1 + Type + F32 + Value + 100.0 + + RenderNormalMapScale + + Comment + Scaler applied to height map when generating normal maps + Persist + 1 + Type + F32 + Value + 64 + + RenderCubeMap + + Comment + Whether we can render the cube map or not + Persist + 1 + Type + Boolean + Value + 1 + + RenderDebugAlphaMask + + Comment + Test Alpha Masking Cutoffs. + Persist + 1 + Type + F32 + Value + 0.5 + + RenderDebugGL + + Comment + Enable strict GL debugging. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDebugNormalScale + + Comment + Scale of normals in debug display. + Persist + 1 + Type + F32 + Value + 0.03 + + RenderDebugPipeline + + Comment + Enable strict pipeline debugging. + Persist + 1 + Type + Boolean + Value + 0 + + RenderMaxTextureIndex + + Comment + Maximum texture index to use for indexed texture rendering. + Persist + 1 + Type + U32 + Value + 6 + + RenderDebugTextureBind + + Comment + Enable texture bind performance test. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDelayCreation + + Comment + Throttle creation of drawables. + Persist + 1 + Type + Boolean + Value + 0 + + + RenderAnimateRes + + Comment + Animate rezing prims. + Persist + 1 + Type + Boolean + Value + 0 + + + RenderBakeSunlight + + Comment + Bake sunlight into vertex buffers for static objects. + Persist + 1 + Type + Boolean + Value + 0 + + + RenderNoAlpha + + Comment + Disable rendering of alpha objects (render all alpha objects as alpha masks). + Persist + 1 + Type + Boolean + Value + 0 + + + RenderAnimateTrees + + Comment + Use GL matrix ops to animate tree branches. + Persist + 1 + Type + Boolean + Value + 0 + + + RenderGIRange + + Comment + Distance to cut off GI effect. + Persist + 1 + Type + F32 + Value + 96 + + + RenderGILuminance + + Comment + Luminance factor of global illumination contribution. + Persist + 1 + Type + F32 + Value + 0.075 + + + RenderGIBrightness + + Comment + Brightness factor of global illumination contribution. + Persist + 1 + Type + F32 + Value + 0.3 + + + RenderGINoise + + Comment + Noise of position sampling for GI photon mapping. + Persist + 1 + Type + F32 + Value + 0.7 + + + RenderGIAttenuation + + Comment + Distance attenuation factor for indirect lighting. + Persist + 1 + Type + F32 + Value + 0.1 + + + RenderGIBlurBrightness + + Comment + Brightness factor of global illumination blur effect. + Persist + 1 + Type + F32 + Value + 1.025 + + + RenderGIBlurEdgeWeight + + Comment + Edge weight for GI soften filter (sharpness). + Persist + 1 + Type + F32 + Value + 0.8 + + + RenderGIBlurIncrement + + Comment + Increment of scale for each pass of global illumination blur effect. + Persist + 1 + Type + F32 + Value + 0.8 + + + RenderLuminanceScale + + Comment + Luminance value scalar for darkening effect. + Persist + 1 + Type + F32 + Value + 1.0 + + + RenderSunLuminanceScale + + Comment + Sun Luminance value scalar for darkening effect. + Persist + 1 + Type + F32 + Value + 1.0 + + + RenderSunLuminanceOffset + + Comment + Sun Luminance value offset for darkening effect. + Persist + 1 + Type + F32 + Value + 0 + + + RenderLuminanceDetail + + Comment + Mipmap level to use for luminance + Persist + 1 + Type + F32 + Value + 16.0 + + + RenderMinimumLODTriangleCount + + Comment + Triangle count threshold at which automatic LOD generation stops + Persist + 1 + Type + U32 + Value + 16 + + + RenderEdgeDepthCutoff + + Comment + Cutoff for depth difference that amounts to an edge. + Persist + 1 + Type + F32 + Value + 0.01 + + RenderEdgeNormCutoff + + Comment + Cutoff for normal difference that amounts to an edge. + Persist + 1 + Type + F32 + Value + 0.25 + + + RenderDeferredAlphaSoften + + Comment + Scalar for softening alpha surfaces (for soft particles). + Persist + 1 + Type + F32 + Value + 0.75 + + RenderDeferredNoise + + Comment + Noise scalar to hide banding in deferred render. + Persist + 1 + Type + F32 + Value + 4 + + RenderDeferredSpotShadowBias + + Comment + Bias value for spot shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + -64.0 + + RenderDeferredSpotShadowOffset + + Comment + Offset value for spot shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + 0.8 + + + RenderShadowBias + + Comment + Bias value for shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + -0.008 + + RenderShadowOffset + + Comment + Offset value for shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + 0.01 + + RenderShadowBiasError + + Comment + Error scale for shadow bias (based on altitude). + Persist + 1 + Type + F32 + Value + 0 + + RenderShadowOffsetError + + Comment + Error scale for shadow offset (based on altitude). + Persist + 1 + Type + F32 + Value + 0 + + + RenderDepthOfField + + Comment + Whether to use depth of field effect when lighting and shadows are enabled + Persist + 1 + Type + Boolean + Value + 0 + + + RenderSpotLightsInNondeferred + + Comment + Whether to support projectors as spotlights when Lighting and Shadows is disabled + Persist + 1 + Type + Boolean + Value + 0 + + + RenderSpotShadowBias + + Comment + Bias value for shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + -0.001 + + RenderSpotShadowOffset + + Comment + Offset value for shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + 0.04 + + + RenderShadowResolutionScale + + Comment + Scale of shadow map resolution vs. screen resolution + Persist + 1 + Type + F32 + Value + 1.0 + + + RenderDeferredTreeShadowBias + + Comment + Bias value for tree shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + 1.0 + + RenderDeferredTreeShadowOffset + + Comment + Offset value for tree shadows (prevent shadow acne). + Persist + 1 + Type + F32 + Value + 1.0 + + + RenderHoverGlowEnable + + Comment + Show glow effect when hovering on interactive objects. + Persist + 1 + Type + Boolean + Value + 0 + + + RenderHighlightFadeTime + + Comment + Transition time for mouseover highlights. + Persist + 1 + Type + F32 + Value + 0.1 + + + RenderHighlightBrightness + + Comment + Brightness of mouseover highlights. + Persist + 1 + Type + F32 + Value + 4.0 + + + RenderHighlightThickness + + Comment + Thickness of mouseover highlights. + Persist + 1 + Type + F32 + Value + 0.6 + + + RenderHighlightColor + + Comment + Brightness of mouseover highlights. + Persist + 1 + Type + Color4 + Value + + 0.4 + 0.98 + 0.93 + 1.0 + + + + RenderSpecularResX + + Comment + Spec map resolution. + Persist + 1 + Type + U32 + Value + 128 + + + RenderSpecularResY + + Comment + Spec map resolution. + Persist + 1 + Type + U32 + Value + 128 + + + RenderSpecularExponent + + Comment + Specular exponent for generating spec map + Persist + 1 + Type + F32 + Value + 8 + + + RenderDeferred + + Comment + Use deferred rendering pipeline. + Persist + 1 + Type + Boolean + Value + 0 + + + RenderDeferredGI + + Comment + Enable GI in deferred renderer. + Persist + 1 + Type + Boolean + Value + 0 + + + RenderDeferredSun + + Comment + Execute sunlight shader in deferred renderer. + Persist + 1 + Type + Boolean + Value + 1 + + + RenderDeferredAtmospheric + + Comment + Execute atmospheric shader in deferred renderer. + Persist + 1 + Type + Boolean + Value + 1 + + + RenderDeferredSSAO + + Comment + Execute screen space ambient occlusion shader in deferred renderer. + Persist + 1 + Type + Boolean + Value + 1 + + + RenderDeferredBlurLight + + Comment + Execute shadow softening shader in deferred renderer. + Persist + 1 + Type + Boolean + Value + 1 + + + RenderDeferredSunWash + + Comment + Amount local lights are washed out by sun. + Persist + 1 + Type + F32 + Value + 0.5 + + RenderShadowNoise + + Comment + Magnitude of noise on shadow samples. + Persist + 1 + Type + F32 + Value + -0.0001 + + RenderShadowErrorCutoff + + Comment + Cutoff error value to use ortho instead of perspective projection. + Persist + 1 + Type + F32 + Value + 5.0 + + RenderShadowFOVCutoff + + Comment + Cutoff FOV to use ortho instead of perspective projection. + Persist + 1 + Type + F32 + Value + 0.8 + + + RenderShadowGaussian + + Comment + Gaussian coefficients for the two shadow/SSAO blurring passes (z component unused). + Persist + 1 + Type + Vector3 + Value + + 3.0 + 2.0 + 0.0 + + + + RenderShadowBlurSize + + Comment + Scale of shadow softening kernel. + Persist + 1 + Type + F32 + Value + 1.4 + + RenderShadowBlurSamples + + Comment + Number of samples to take for each pass of shadow blur (value range 1-16). Actual number of samples is value * 2 - 1. + Persist + 1 + Type + U32 + Value + 4 + + RenderShadowBlurDistFactor + + Comment + Distance scaler for shadow blur. + Persist + 1 + Type + F32 + Value + 0 + + + RenderGIAmbiance + + Comment + Ambiance factor of global illumination contribution. + Persist + 1 + Type + F32 + Value + 0.5 + + + RenderGIMinRenderSize + + Comment + Minimum size of objects to put into GI source map. + Persist + 1 + Type + F32 + Value + 0.5 + + + RenderGIBlurColorCurve + + Comment + Color curve for GI softening kernel + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.6 + 0.02 + + + + RenderGIBlurPasses + + Comment + Scale of GI softening kernel. + Persist + 1 + Type + U32 + Value + 4 + + + RenderGIBlurSize + + Comment + Scale of GI softening kernel. + Persist + 1 + Type + F32 + Value + 4.0 + + RenderGIBlurSamples + + Comment + Number of samples to take for each pass of GI blur (value range 1-16). Actual number of samples is value * 2 - 1. + Persist + 1 + Type + U32 + Value + 16 + + RenderGIBlurDistFactor + + Comment + Distance scaler for GI blur. + Persist + 1 + Type + F32 + Value + 0.0 + + + RenderDynamicLOD + + Comment + Dynamically adjust level of detail. + Persist + 1 + Type + Boolean + Value + 1 + + RenderFSAASamples + + Comment + Number of samples to use for FSAA (0 = no AA). + Persist + 1 + Type + U32 + Value + 0 + + RenderFarClip + + Comment + Distance of far clip plane from camera (meters) + Persist + 1 + Type + F32 + Value + 256.0 + + RenderAutoMaskAlphaNonDeferred + + Comment + Use alpha masks where appropriate, in the non-deferred (non-'Lighting and Shadows') graphics mode + Persist + 1 + Type + Boolean + Value + 0 + + RenderAutoMaskAlphaDeferred + + Comment + Use alpha masks where appropriate, in the deferred ('Lighting and Shadows') graphics mode + Persist + 1 + Type + Boolean + Value + 1 + + RenderFlexTimeFactor + + Comment + Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderFogRatio + + Comment + Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance) + Persist + 1 + Type + F32 + Value + 4.0 + + RenderGamma + + Comment + Sets gamma exponent for renderer + Persist + 1 + Type + F32 + Value + 0.0 + + RenderGammaFull + + Comment + Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2. + Persist + 1 + Type + Boolean + Value + 1.0 + + RenderGlow + + Comment + Render bloom post effect. + Persist + 1 + Type + Boolean + Value + 1 + + RenderGlowIterations + + Comment + Number of times to iterate the glow (higher = wider and smoother but slower) + Persist + 1 + Type + S32 + Value + 2 + + RenderGlowLumWeights + + Comment + Weights for each color channel to be used in calculating luminance (should add up to 1.0) + Persist + 1 + Type + Vector3 + Value + + 1 + 0 + 0 + + + RenderGlowMaxExtractAlpha + + Comment + Max glow alpha value for brightness extraction to auto-glow. + Persist + 1 + Type + F32 + Value + 0.25 + + RenderGlowMinLuminance + + Comment + Min luminance intensity necessary to consider an object bright enough to automatically glow. + Persist + 1 + Type + F32 + Value + 9999 + + RenderGlowResolutionPow + + Comment + Glow map resolution power of two. + Persist + 1 + Type + S32 + Value + 9 + + RenderGlowStrength + + Comment + Additive strength of glow. + Persist + 1 + Type + F32 + Value + 0.35 + + RenderGlowWarmthAmount + + Comment + Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth + Persist + 1 + Type + F32 + Value + 0.0 + + RenderGlowWarmthWeights + + Comment + Weight of each color channel used before finding the max warmth + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.5 + 0.7 + + + RenderGlowWidth + + Comment + Glow sample size (higher = wider and softer but eventually more pixelated) + Persist + 1 + Type + F32 + Value + 1.3 + + RenderGround + + Comment + Determines whether we can render the ground pool or not + Persist + 1 + Type + Boolean + Value + 1 + + RenderHUDInSnapshot + + Comment + Display HUD attachments in snapshot + Persist + 1 + Type + Boolean + Value + 0 + + RenderHUDParticles + + Comment + Display particle systems in HUD attachments (experimental) + Persist + 1 + Type + Boolean + Value + 0 + + RenderHighlightSelections + + Comment + Show selection outlines on objects + Persist + 0 + Type + Boolean + Value + 1 + + RenderHiddenSelections + + Comment + Show selection lines on objects that are behind other objects + Persist + 1 + Type + Boolean + Value + 0 + + RenderHideGroupTitle + + Comment + Don't show my group title in my name label + Persist + 1 + Type + Boolean + Value + 0 + + NameTagShowGroupTitles + + Comment + Show group titles in name labels + Persist + 1 + Type + Boolean + Value + 0 + + NameTagShowDisplayNames + + Comment + Show display names in name labels + Persist + 1 + Type + Boolean + Value + 1 + + NameTagShowFriends + + Comment + Highlight the name tags of your friends + Persist + 1 + Type + Boolean + Value + 0 + + NameTagShowUsernames + + Comment + Show usernames in avatar name tags + Persist + 1 + Type + Boolean + Value + 1 + + RenderInitError + + Comment + Error occured while initializing GL + Persist + 1 + Type + Boolean + Value + 0 + + RenderLightRadius + + Comment + Render the radius of selected lights + Persist + 1 + Type + Boolean + Value + 0 + + RenderMaxPartCount + + Comment + Maximum number of particles to display on screen + Persist + 1 + Type + S32 + Value + 4096 + + RenderMaxNodeSize + + Comment + Maximum size of a single node's vertex data (in KB). + Persist + 1 + Type + S32 + Value + 65536 + + RenderMaxVBOSize + + Comment + Maximum size of a vertex buffer (in KB). + Persist + 1 + Type + S32 + Value + 512 + + RenderNameFadeDuration + + Comment + Time interval over which to fade avatar names (seconds) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderNameShowSelf + + Comment + Display own name above avatar + Persist + 1 + Type + Boolean + Value + 1 + + RenderNameShowTime + + Comment + Fade avatar names after specified time (seconds) + Persist + 1 + Type + F32 + Value + 10.0 + + RenderObjectBump + + Comment + Show bumpmapping on primitives + Persist + 1 + Type + Boolean + Value + 1 + + RenderQualityPerformance + + Comment + Which graphics settings you've chosen + Persist + 1 + Type + U32 + Value + 1 + + RenderReflectionDetail + + Comment + Detail of reflection render pass. + Persist + 1 + Type + S32 + Value + 2 + + RenderShadowDetail + + Comment + Detail of shadows. + Persist + 1 + Type + S32 + Value + 2 + + + RenderReflectionRes + + Comment + Reflection map resolution. + Persist + 1 + Type + S32 + Value + 64 + + RenderResolutionDivisor + + Comment + Divisor for rendering 3D scene at reduced resolution. + Persist + 1 + Type + U32 + Value + 1 + + RenderShaderLightingMaxLevel + + Comment + Max lighting level to use in the shader (class 3 is default, 2 is less lights, 1 is sun/moon only. Works around shader compiler bugs on certain platforms.) + Persist + 1 + Type + S32 + Value + 3 + + RenderShaderLODThreshold + + Comment + Fraction of draw distance defining the switch to a different shader LOD + Persist + 1 + Type + F32 + Value + 1.0 + + RenderShaderParticleThreshold + + Comment + Fraction of draw distance to not use shader on particles + Persist + 1 + Type + F32 + Value + 0.25 + + RenderSunDynamicRange + + Comment + Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ). + Persist + 1 + Type + F32 + Value + 1.0 + + RenderTerrainDetail + + Comment + Detail applied to terrain texturing (0 = none, 1 or 2 = full) + Persist + 1 + Type + S32 + Value + 2 + + RenderTerrainLODFactor + + Comment + Controls level of detail of terrain (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderTerrainScale + + Comment + Terrain detail texture scale + Persist + 1 + Type + F32 + Value + 12.0 + + RenderTextureMemoryMultiple + + Comment + Multiple of texture memory value to use (should fit: 0 < value <= 1.0) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderTrackerBeacon + + Comment + Display tracking arrow and beacon to target avatar, teleport destination + Persist + 1 + Type + Boolean + Value + 1 + + RenderTransparentWater + + Comment + Render water as transparent. Setting to false renders water as opaque with a simple texture applied. + Persist + 1 + Type + Boolean + Value + 1 + + RenderTreeLODFactor + + Comment + Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 0.5 + + RenderUIInSnapshot + + Comment + Display user interface in snapshot + Persist + 1 + Type + Boolean + Value + 0 + + RenderUIBuffer + + Comment + Cache ui render in a screen aligned buffer. + Persist + 1 + Type + Boolean + Value + 0 + + RenderUnloadedAvatar + + Comment + Show avatars which haven't finished loading + Persist + 1 + Type + Boolean + Value + 0 + + RenderUseTriStrips + + Comment + Use triangle strips for rendering prims. + Persist + 1 + Type + Boolean + Value + 0 + + RenderUseFarClip + + Comment + If false, frustum culling will ignore far clip plane. + Persist + 1 + Type + Boolean + Value + 1 + + RenderUseImpostors + + Comment + Whether we want to use impostors for far away avatars. + Persist + 1 + Type + Boolean + Value + 1 + + RenderUseShaderLOD + + Comment + Whether we want to have different shaders for LOD + Persist + 1 + Type + Boolean + Value + 1 + + RenderUseShaderNearParticles + + Comment + Whether we want to use shaders on near particles + Persist + 1 + Type + Boolean + Value + 0 + + RenderVBOEnable + + Comment + Use GL Vertex Buffer Objects + Persist + 1 + Type + Boolean + Value + 1 + + RenderVBOMappingDisable + + Comment + Disable VBO glMapBufferARB + Persist + 1 + Type + Boolean + Value + 0 + + RenderUseStreamVBO + + Comment + Use VBO's for stream buffers + Persist + 1 + Type + Boolean + Value + 1 + + RenderPreferStreamDraw + + Comment + Use GL_STREAM_DRAW in place of GL_DYNAMIC_DRAW + Persist + 1 + Type + Boolean + Value + 0 + + RenderVolumeLODFactor + + Comment + Controls level of detail of primitives (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderWater + + Comment + Display water + Persist + 1 + Type + Boolean + Value + 1 + + RenderWaterMipNormal + + Comment + Use mip maps for water normal map. + Persist + 1 + Type + Boolean + Value + 1 + + RenderWaterRefResolution + + Comment + Water planar reflection resolution. + Persist + 1 + Type + S32 + Value + 512 + + RenderParcelSelection + + Comment + Display selected parcel outline + Persist + 1 + Type + Boolean + Value + 1 + + RotateRight + + Comment + Make the agent rotate to its right. + Persist + 1 + Type + Boolean + Value + 0 + + RotationStep + + Comment + All rotations via rotation tool are constrained to multiples of this unit (degrees) + Persist + 1 + Type + F32 + Value + 1.0 + + MeshStreamingCostScaler + + Comment + DEBUG + Persist + 1 + Type + F32 + Value + 2.0 + + MeshThreadCount + + Comment + Number of threads to use for loading meshes. + Persist + 1 + Type + U32 + Value + 8 + + MeshMaxConcurrentRequests + + Comment + Number of threads to use for loading meshes. + Persist + 1 + Type + U32 + Value + 32 + + RunMultipleThreads + + Comment + If TRUE keep background threads active during render + Persist + 1 + Type + Boolean + Value + 0 + + SafeMode + + Comment + Reset preferences, run in safe mode. + Persist + 1 + Type + Boolean + Value + 0 + + SaveMinidump + + Comment + Save minidump for developer debugging on crash + Persist + 1 + Type + Boolean + Value + 1 + + ScaleShowAxes + + Comment + Show indicator of selected scale axis when scaling + Persist + 1 + Type + Boolean + Value + 0 + + ScaleStretchTextures + + Comment + Stretch textures along with object when scaling + Persist + 1 + Type + Boolean + Value + 1 + + ScaleUniform + + Comment + Scale selected objects evenly about center of selection + Persist + 1 + Type + Boolean + Value + 0 + + ScriptHelpFollowsCursor + + Comment + Scripting help window updates contents based on script editor contents under text cursor + Persist + 1 + Type + Boolean + Value + 0 + + ScriptsCanShowUI + + Comment + Allow LSL calls (such as LLMapDestination) to spawn viewer UI + Persist + 1 + Type + Boolean + Value + 1 + + SecondLifeEnterprise + + Comment + Enables Second Life Enterprise features + Persist + 1 + Type + Boolean + Value + 0 + + SelectMovableOnly + + Comment + Select only objects you can move + Persist + 1 + Type + Boolean + Value + 0 + + SelectOwnedOnly + + Comment + Select only objects you own + Persist + 1 + Type + Boolean + Value + 0 + + SelectionHighlightAlpha + + Comment + Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.40000000596 + + SelectionHighlightAlphaTest + + Comment + Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels) + Persist + 1 + Type + F32 + Value + 0.1 + + SelectionHighlightThickness + + Comment + Thickness of selection highlight line (fraction of view distance) + Persist + 1 + Type + F32 + Value + 0.00999999977648 + + SelectionHighlightUAnim + + Comment + Rate at which texture animates along U direction in selection highlight line (fraction of texture per second) + Persist + 1 + Type + F32 + Value + 0.0 + + SelectionHighlightUScale + + Comment + Scale of texture display on selection highlight line (fraction of texture size) + Persist + 1 + Type + F32 + Value + 0.1 + + SelectionHighlightVAnim + + Comment + Rate at which texture animates along V direction in selection highlight line (fraction of texture per second) + Persist + 1 + Type + F32 + Value + 0.5 + + SelectionHighlightVScale + + Comment + Scale of texture display on selection highlight line (fraction of texture size) + Persist + 1 + Type + F32 + Value + 1.0 + + ServerChoice + + Comment + [DO NOT MODIFY] Controls which grid you connect to + Persist + 1 + Type + S32 + Value + 0 + + ShareWithGroup + + Comment + Newly created objects are shared with the currently active group + Persist + 1 + Type + Boolean + Value + 0 + + ShowAdvancedGraphicsSettings + + Comment + Show advanced graphics settings + Persist + 1 + Type + Boolean + Value + 0 + + ShowAllObjectHoverTip + + Comment + Show descriptive tooltip when mouse hovers over non-interactive and interactive objects. + Persist + 1 + Type + Boolean + Value + 0 + + AvatarNameTagMode + + Comment + Select Avatar Name Tag Mode + Persist + 1 + Type + S32 + Value + 1 + + ShowAxes + + Comment + Render coordinate frame at your position + Persist + 1 + Type + Boolean + Value + 0 + + ShowBanLines + + Comment + Show in-world ban/access borders + Persist + 1 + Type + Boolean + Value + 1 + + ShowBuildButton + + Comment + Shows/Hides Build button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 0 + + ShowCameraButton + + Comment + Show/Hide View button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 1 + + ShowConsoleWindow + + Comment + Show log in separate OS window + Persist + 1 + Type + Boolean + Value + 0 + + NavBarShowCoordinates + + Comment + Show coordinates in navigation bar + Persist + 1 + Type + Boolean + Value + 0 + + NavBarShowParcelProperties + + Comment + Show parcel property icons in navigation bar + Persist + 1 + Type + Boolean + Value + 1 + + ShowBetaGrids + + Comment + Display the beta grids in the grid selection control. + Persist + 1 + Type + Boolean + Value + 1 + + ShowCrosshairs + + Comment + Display crosshairs when in mouselook mode + Persist + 1 + Type + Boolean + Value + 1 + + ShowDebugConsole + + Comment + Show log in SL window + Persist + 1 + Type + Boolean + Value + 0 + + ShowEmptyFoldersWhenSearching + + Comment + Shows folders that do not have any visible contents when applying a filter to inventory + Persist + 1 + Type + Boolean + Value + 0 + + ShowGestureButton + + Comment + Shows/Hides Gesture button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 1 + + ShowHoverTips + + Comment + Show descriptive tooltip when mouse hovers over items in world + Persist + 1 + Type + Boolean + Value + 1 + + ShowLandHoverTip + + Comment + Show descriptive tooltip when mouse hovers over land + Persist + 1 + Type + Boolean + Value + 0 + + ShowMiniMapButton + + Comment + Shows/Hides Mini-Map button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 0 + + ShowMoveButton + + Comment + Shows/Hides Move button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 1 + + ShowScriptErrors + + Comment + Show script errors + Persist + 1 + Type + Boolean + Value + 1 + + ShowScriptErrorsLocation + + Comment + Show script error in chat or window + Persist + 1 + Type + S32 + Value + 1 + + ShowSearchButton + + Comment + Shows/Hides Search button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 0 + + ShowSnapshotButton + + Comment + Shows/Hides Snapshot button button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 1 + + ShowObjectRenderingCost + + Comment + Show the object rendering cost in build tools + Persist + 1 + Type + Boolean + Value + 1 + + ShowNavbarFavoritesPanel + + Comment + Show/Hide Navigation Bar Favorites Panel + Persist + 1 + Type + Boolean + Value + 1 + + ShowNavbarNavigationPanel + + Comment + Show/Hide Navigation Bar Navigation Panel + Persist + 1 + Type + Boolean + Value + 1 + + ShowWorldMapButton + + Comment + Shows/Hides Map button in the bottom tray. + Persist + 1 + Type + Boolean + Value + 0 + + ShowMiniLocationPanel + + Comment + Show/Hide Mini-Location Panel + Persist + 1 + Type + Boolean + Value + 0 + + SidebarCameraMovement + + Comment + Reflects world rect changing while changing sidebar visibility. + Persist + 1 + Type + Boolean + Value + 0 + + GroupListShowIcons + + Comment + Show/hide group icons in the group list + Persist + 1 + Type + Boolean + Value + 1 + + FriendsListShowIcons + + Comment + Show/hide online and all friends icons in the friend list + Persist + 1 + Type + Boolean + Value + 1 + + FriendsListShowPermissions + + Comment + Show/hide permission icons in the friend list + Persist + 1 + Type + Boolean + Value + 1 + + NearbyListShowMap + + Comment + Show/hide map above nearby people list + Persist + 1 + Type + Boolean + Value + 1 + + NearbyListShowIcons + + Comment + Show/hide people icons in nearby list + Persist + 1 + Type + Boolean + Value + 1 + + RecentListShowIcons + + Comment + Show/hide people icons in recent list + Persist + 1 + Type + Boolean + Value + 1 + + FriendsSortOrder + + Comment + Specifies sort order for friends (0 = by name, 1 = by online status) + Persist + 1 + Type + U32 + Value + 0 + + NearbyPeopleSortOrder + + Comment + Specifies sort order for nearby people (0 = by name, 3 = by distance, 4 = by most recent) + Persist + 1 + Type + U32 + Value + 4 + + RecentPeopleSortOrder + + Comment + Specifies sort order for recent people (0 = by name, 2 = by most recent) + Persist + 1 + Type + U32 + Value + 2 + + ShowPGSearchAll + + Comment + Display results of search All that are flagged as general + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureSearchAll + + Comment + Display results of search All that are flagged as moderate + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultSearchAll + + Comment + Display results of search All that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGGroups + + Comment + Display results of find groups that are flagged as general + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureGroups + + Comment + Display results of find groups that are flagged as moderate + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultGroups + + Comment + Display results of find groups that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGClassifieds + + Comment + Display results of find classifieds that are flagged as general + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureClassifieds + + Comment + Display results of find classifieds that are flagged as moderate + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultClassifieds + + Comment + Display results of find classifieds that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGEvents + + Comment + Display results of find events that are flagged as general + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureEvents + + Comment + Display results of find events that are flagged as moderate + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultEvents + + Comment + Display results of find events that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGLand + + Comment + Display results of find land sales that are flagged as general + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureLand + + Comment + Display results of find land sales that are flagged as moderate + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultLand + + Comment + Display results of find land sales that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGSims + + Comment + Display results of find places or find popular that are in general sims + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureSims + + Comment + Display results of find places or find popular that are in moderate sims + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultSims + + Comment + Display results of find places or find popular that are in adult sims + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowNearClip + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowNewInventory + + Comment + Automatically views new notecards/textures/landmarks + Persist + 1 + Type + Boolean + Value + 1 + + ShowInInventory + + Comment + Automatically opens inventory to show accepted objects + Persist + 1 + Type + Boolean + Value + 1 + + ShowObjectUpdates + + Comment + Show when update messages are received for individual objects + Persist + 0 + Type + Boolean + Value + 0 + + ShowOverlayTitle + + Comment + Prints watermark text message on screen + Persist + 1 + Type + Boolean + Value + 0 + + ShowParcelOwners + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowPermissions + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowPropertyLines + + Comment + Show line overlay demarking property boundaries + Persist + 1 + Type + Boolean + Value + 0 + + ShowNetStats + + Comment + Show the Status Indicators for the Viewer and Network Usage in the Status Overlay + Persist + 1 + Type + Boolean + Value + 0 + + ShowSelectionBeam + + Comment + Show selection particle beam when selecting or interacting with objects. + Persist + 1 + Type + Boolean + Value + 1 + + ShowStartLocation + + Comment + Display starting location menu on login screen + Persist + 1 + Type + Boolean + Value + 0 + + ShowTangentBasis + + Comment + Render normal and binormal (debugging bump mapping) + Persist + 1 + Type + Boolean + Value + 0 + + ShowToolBar + + Comment + Show toolbar at bottom of screen + Persist + 1 + Type + Boolean + Value + 1 + + ShowTutorial + + Comment + Show tutorial window on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowVoiceVisualizersInCalls + + Comment + Enables in-world voice visualizers, voice gestures and lip-sync while in group or P2P calls. + Persist + 1 + Type + Boolean + Value + 0 + + SkinCurrent + + Comment + The currently selected skin. + Persist + 1 + Type + String + Value + default + + SkinningSettingsFile + + Comment + Client skin color setting file name (per install). + Persist + 0 + Type + String + Value + + + SkyAmbientScale + + Comment + Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level) + Persist + 1 + Type + F32 + Value + 0.300000011921 + + SkyEditPresets + + Comment + Whether to be able to edit the sky defaults or not + Persist + 1 + Type + Boolean + Value + 0 + + SkyNightColorShift + + Comment + Controls moonlight color (base color applied to moon as light source) + Persist + 1 + Type + Color3 + Value + + 0.67 + 0.67 + 1.0 + + + SkyOverrideSimSunPosition + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + SkySunDefaultPosition + + Comment + Default position of sun in sky (direction in world coordinates) + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.0 + 0.1 + + + SkyUseClassicClouds + + Comment + Whether to use the old Second Life particle clouds or not + Persist + 1 + Type + Boolean + Value + 1 + + SnapEnabled + + Comment + Enable snapping to grid + Persist + 1 + Type + Boolean + Value + 1 + + SnapMargin + + Comment + Controls maximum distance between windows before they auto-snap together (pixels) + Persist + 1 + Type + S32 + Value + 10 + + SnapToMouseCursor + + Comment + When snapping to grid, center object on nearest grid point to mouse cursor + Persist + 1 + Type + Boolean + Value + 0 + + SnapshotFormat + + Comment + Save snapshots in this format (0 = PNG, 1 = JPEG, 2 = BMP) + Persist + 1 + Type + S32 + Value + 0 + + SnapshotLocalLastResolution + + Comment + Take next local snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + + SnapshotPostcardLastResolution + + Comment + Take next postcard snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + + SnapshotQuality + + Comment + Quality setting of postcard JPEGs (0 = worst, 100 = best) + Persist + 1 + Type + S32 + Value + 75 + + SnapshotSharingEnabled + + Comment + Enable uploading of snapshots to a web service. + Persist + 1 + Type + Boolean + Value + 0 + + SnapshotConfigURL + + Comment + URL to fetch Snapshot Sharing configuration data from. + Persist + 1 + Type + String + Value + http://photos.apps.staging.avatarsunited.com/viewer_config + + SnapshotTextureLastResolution + + Comment + Take next texture snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + + SpeedTest + + Comment + Performance testing mode, no network + Persist + 1 + Type + Boolean + Value + 0 + + StatsAutoRun + + Comment + Play back autopilot + Persist + 1 + Type + Boolean + Value + 0 + + StatsFile + + Comment + Filename for stats logging output + Persist + 1 + Type + String + Value + fs.txt + + StatsNumRuns + + Comment + Loop autopilot playback this number of times + Persist + 1 + Type + S32 + Value + -1 + + StatsPilotFile + + Comment + Filename for stats logging autopilot path + Persist + 1 + Type + String + Value + pilot.txt + + StatsPilotXMLFile + + Comment + Filename for stats logging extended autopilot path + Persist + 1 + Type + String + Value + pilot.xml + + StatsQuitAfterRuns + + Comment + Quit application after this number of autopilot playback runs + Persist + 1 + Type + Boolean + Value + 0 + + StatsSessionTrackFrameStats + + Comment + Track rendering and network statistics + Persist + 1 + Type + Boolean + Value + 0 + + StatsSummaryFile + + Comment + Filename for stats logging summary + Persist + 1 + Type + String + Value + fss.txt + + SystemLanguage + + Comment + Language indicated by system settings (for UI) + Persist + 1 + Type + String + Value + en + + TabToTextFieldsOnly + + Comment + TAB key takes you to next text entry field, instead of next widget + Persist + 1 + Type + Boolean + Value + 0 + + TerrainColorHeightRange + + Comment + Altitude range over which a given terrain texture has effect (meters) + Persist + 1 + Type + F32 + Value + 60.0 + + TerrainColorStartHeight + + Comment + Starting altitude for terrain texturing (meters) + Persist + 1 + Type + F32 + Value + 20.0 + + TextureDecodeDisabled + + Comment + If TRUE, do not fetch and decode any textures + Persist + 1 + Type + Boolean + Value + 0 + + TextureDisable + + Comment + If TRUE, do not load textures for in-world content + Persist + 1 + Type + Boolean + Value + 0 + + TextureDiscardLevel + + Comment + Specify texture resolution (0 = highest, 5 = lowest) + Persist + 1 + Type + U32 + Value + 0 + + TextureLoadFullRes + + Comment + If TRUE, always load textures at full resolution (discard = 0) + Persist + 1 + Type + Boolean + Value + 0 + + TextureMemory + + Comment + Amount of memory to use for textures in MB (0 = autodetect) + Persist + 1 + Type + S32 + Value + 0 + + TexturePickerShowFolders + + Comment + Show folders with no texures in texture picker + Persist + 1 + Type + Boolean + Value + 1 + + TexturePickerSortOrder + + Comment + Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 2 + + ThrottleBandwidthKBPS + + Comment + Maximum allowable downstream bandwidth (kilo bits per second) + Persist + 1 + Type + F32 + Value + 500.0 + + UpdaterMaximumBandwidth + + Comment + Maximum allowable downstream bandwidth for updater service (kilo bits per second) + Persist + 1 + Type + F32 + Value + 500.0 + + ToolTipDelay + + Comment + Seconds before displaying tooltip when mouse stops over UI element + Persist + 1 + Type + F32 + Value + 0.699999988079 + + ToolTipFadeTime + + Comment + Seconds over which tooltip fades away + Persist + 1 + Type + F32 + Value + 0.2 + + ToolTipVisibleTimeFar + + Comment + Fade tooltip after after time passes (seconds) while mouse not near tooltip + Persist + 1 + Type + F32 + Value + 1.0 + + ToolTipVisibleTimeNear + + Comment + Fade tooltip after after time passes (seconds) while mouse near tooltip or original position + Persist + 1 + Type + F32 + Value + 10.0 + + ToolTipVisibleTimeOver + + Comment + Fade tooltip after after time passes (seconds) while mouse over tooltip + Persist + 1 + Type + F32 + Value + 1000.0 + + ToolboxAutoMove + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + + TrackFocusObject + + Comment + Camera tracks last object zoomed on + Persist + 1 + Type + Boolean + Value + 1 + + TranslateLanguage + + Comment + Translate Language specifier + Persist + 1 + Type + String + Value + default + + TranslateChat + + Comment + Translate incoming chat messages + Persist + 1 + Type + Boolean + Value + 0 + + TutorialURL + + Comment + URL for tutorial menu item, set automatically during login + Persist + 0 + Type + String + Value + + + TypeAheadTimeout + + Comment + Time delay before clearing type-ahead buffer in lists (seconds) + Persist + 1 + Type + F32 + Value + 1.5 + + UIAutoScale + + Comment + Keep UI scale consistent across different resolutions + Persist + 1 + Type + Boolean + Value + 1 + + UIAvatariconctrlSymbolHPad + + Comment + UI Avatar Icon Control Symbol Horizontal Pad + Persist + 1 + Type + S32 + Value + 2 + + UIAvatariconctrlSymbolVPad + + Comment + UI Avatar Icon Control Symbol Vertical Pad + Persist + 1 + Type + S32 + Value + 2 + + UIAvatariconctrlSymbolSize + + Comment + UI Avatar Icon Control Symbol Size + Persist + 1 + Type + S32 + Value + 5 + + UIAvatariconctrlSymbolPosition + + Comment + UI Avatar Icon Control Symbol Position (TopLeft|TopRight|BottomLeft|BottomRight) + Persist + 1 + Type + String + Value + BottomRight + + UIButtonOrigHPad + + Comment + UI Button Original Horizontal Pad + Persist + 1 + Type + S32 + Value + 6 + + UICheckboxctrlBtnSize + + Comment + UI Checkbox Control Button Size + Persist + 1 + Type + S32 + Value + 13 + + UICheckboxctrlHeight + + Comment + UI Checkbox Control Height + Persist + 1 + Type + S32 + Value + 16 + + UICheckboxctrlHPad + + Comment + UI Checkbox Control Horizontal Pad + Persist + 1 + Type + S32 + Value + 2 + + UICheckboxctrlSpacing + + Comment + UI Checkbox Control Spacing + Persist + 1 + Type + S32 + Value + 5 + + UICheckboxctrlVPad + + Comment + UI Checkbox Control Vertical Pad + Persist + 1 + Type + S32 + Value + 2 + + UICloseBoxFromTop + + Comment + Distance from top of floater to top of close box icon, pixels + Persist + 1 + Type + S32 + Value + 5 + + UIExtraTriangleHeight + + Comment + UI extra triangle height + Persist + 1 + Type + S32 + Value + -2 + + UIExtraTriangleWidth + + Comment + UI extra triangle width + Persist + 1 + Type + S32 + Value + 2 + + UIFloaterCloseBoxSize + + Comment + Size of UI floater close box size + Persist + 1 + Type + S32 + Value + 16 + + UIFloaterHPad + + Comment + Size of UI floater horizontal pad + Persist + 1 + Type + S32 + Value + 6 + + UIFloaterTestBool + + Comment + Example saved setting for the test floater + Persist + 1 + Type + Boolean + Value + 0 + + UIFloaterTitleVPad + + Comment + Distance from top of floater to top of title string, pixels + Persist + 1 + Type + S32 + Value + 7 + + UIImgDefaultEyesUUID + + Comment + + Persist + 0 + Type + String + Value + 6522e74d-1660-4e7f-b601-6f48c1659a77 + + UIImgDefaultGlovesUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultHairUUID + + Comment + + Persist + 0 + Type + String + Value + 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b + + UIImgDefaultJacketUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultPantsUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultShirtUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultShoesUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultSkirtUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultSocksUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultAlphaUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultUnderwearUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + StartUpChannelUUID + + Comment + + Persist + 0 + Type + String + Value + B56AF90D-6684-48E4-B1E4-722D3DEB2CB6 + + NearByChatChannelUUID + + Comment + + Persist + 0 + Type + String + Value + E1158BD6-661C-4981-9DAD-4DCBFF062502 + + NotificationChannelUUID + + Comment + + Persist + 0 + Type + String + Value + AEED3193-8709-4693-8558-7452CCA97AE5 + + AlertChannelUUID + + Comment + + Persist + 0 + Type + String + Value + F3E07BC8-A973-476D-8C7F-F3B7293975D1 + + UIImgWhiteUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UILineEditorCursorThickness + + Comment + UI Line Editor Cursor Thickness + Persist + 1 + Type + S32 + Value + 2 + + UIMaxComboWidth + + Comment + Maximum width of combo box + Persist + 1 + Type + S32 + Value + 500 + + UIMinimizedWidth + + Comment + Size of UI floater minimized width + Persist + 1 + Type + S32 + Value + 160 + + UIMultiSliderctrlSpacing + + Comment + UI multi slider ctrl spacing + Persist + 1 + Type + S32 + Value + 4 + + UIMultiTrackHeight + + Comment + UI multi track height + Persist + 1 + Type + S32 + Value + 6 + + UIPreeditMarkerBrightness + + Comment + UI Preedit Marker Brightness + Persist + 1 + Type + F32 + Value + 0.4 + + UIPreeditMarkerGap + + Comment + UI Preedit Marker Gap + Persist + 1 + Type + S32 + Value + 1 + + UIPreeditMarkerPosition + + Comment + UI Preedit Marker Position + Persist + 1 + Type + S32 + Value + 4 + + UIPreeditMarkerThickness + + Comment + UI Preedit Marker Thickness + Persist + 1 + Type + S32 + Value + 1 + + UIPreeditStandoutBrightness + + Comment + UI Preedit Standout Brightness + Persist + 1 + Type + F32 + Value + 0.6 + + UIPreeditStandoutGap + + Comment + UI Preedit Standout Gap + Persist + 1 + Type + S32 + Value + 1 + + UIPreeditStandoutPosition + + Comment + UI Preedit Standout Position + Persist + 1 + Type + S32 + Value + 4 + + UIPreeditStandoutThickness + + Comment + UI Preedit Standout Thickness + Persist + 1 + Type + S32 + Value + 2 + + UIResizeBarHeight + + Comment + Size of UI resize bar height + Persist + 1 + Type + S32 + Value + 3 + + UIResizeBarOverlap + + Comment + Size of UI resize bar overlap + Persist + 1 + Type + S32 + Value + 1 + + UIScaleFactor + + Comment + Size of UI relative to default layout on 1024x768 screen + Persist + 1 + Type + F32 + Value + 1.0 + + UIScrollbarSize + + Comment + UI scrollbar size + Persist + 1 + Type + S32 + Value + 15 + + UISliderctrlHeight + + Comment + UI slider ctrl height + Persist + 1 + Type + S32 + Value + 16 + + UISliderctrlSpacing + + Comment + UI slider ctrl spacing + Persist + 1 + Type + S32 + Value + 4 + + UISndAlert + + Comment + Sound file for alerts (uuid for sound asset) + Persist + 1 + Type + String + Value + ed124764-705d-d497-167a-182cd9fa2e6c + + UISndBadKeystroke + + Comment + Sound file for invalid keystroke (uuid for sound asset) + Persist + 1 + Type + String + Value + 2ca849ba-2885-4bc3-90ef-d4987a5b983a + + UISndClick + + Comment + Sound file for mouse click (uuid for sound asset) + Persist + 1 + Type + String + Value + 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 + + UISndClickRelease + + Comment + Sound file for mouse button release (uuid for sound asset) + Persist + 1 + Type + String + Value + 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 + + UISndDebugSpamToggle + + Comment + Log UI sound effects as they are played + Persist + 1 + Type + Boolean + Value + 0 + + UISndHealthReductionF + + Comment + Sound file for female pain (uuid for sound asset) + Persist + 1 + Type + String + Value + 219c5d93-6c09-31c5-fb3f-c5fe7495c115 + + UISndHealthReductionM + + Comment + Sound file for male pain (uuid for sound asset) + Persist + 1 + Type + String + Value + e057c244-5768-1056-c37e-1537454eeb62 + + UISndHealthReductionThreshold + + Comment + Amount of health reduction required to trigger "pain" sound + Persist + 1 + Type + F32 + Value + 10.0 + + UISndInvalidOp + + Comment + Sound file for invalid operations (uuid for sound asset) + Persist + 1 + Type + String + Value + 4174f859-0d3d-c517-c424-72923dc21f65 + + UISndMoneyChangeDown + + Comment + Sound file for L$ balance increase (uuid for sound asset) + Persist + 1 + Type + String + Value + 104974e3-dfda-428b-99ee-b0d4e748d3a3 + + UISndMoneyChangeThreshold + + Comment + Amount of change in L$ balance required to trigger "money" sound + Persist + 1 + Type + F32 + Value + 50.0 + + UISndMoneyChangeUp + + Comment + Sound file for L$ balance decrease(uuid for sound asset) + Persist + 1 + Type + String + Value + 77a018af-098e-c037-51a6-178f05877c6f + + UISndNewIncomingIMSession + + Comment + Sound file for new instant message session(uuid for sound asset) + Persist + 1 + Type + String + Value + 67cc2844-00f3-2b3c-b991-6418d01e1bb7 + + UISndObjectCreate + + Comment + Sound file for object creation (uuid for sound asset) + Persist + 1 + Type + String + Value + f4a0660f-5446-dea2-80b7-6482a082803c + + UISndObjectDelete + + Comment + Sound file for object deletion (uuid for sound asset) + Persist + 1 + Type + String + Value + 0cb7b00a-4c10-6948-84de-a93c09af2ba9 + + UISndObjectRezIn + + Comment + Sound file for rezzing objects (uuid for sound asset) + Persist + 1 + Type + String + Value + 3c8fc726-1fd6-862d-fa01-16c5b2568db6 + + UISndObjectRezOut + + Comment + Sound file for derezzing objects (uuid for sound asset) + Persist + 1 + Type + String + Value + 00000000-0000-0000-0000-000000000000 + + UISndSnapshot + + Comment + Sound file for taking a snapshot (uuid for sound asset) + Persist + 1 + Type + String + Value + 3d09f582-3851-c0e0-f5ba-277ac5c73fb4 + + UISndStartIM + + Comment + Sound file for starting a new IM session (uuid for sound asset) + Persist + 1 + Type + String + Value + c825dfbc-9827-7e02-6507-3713d18916c1 + + UISndTeleportOut + + Comment + Sound file for teleporting (uuid for sound asset) + Persist + 1 + Type + String + Value + d7a9a565-a013-2a69-797d-5332baa1a947 + + UISndTyping + + Comment + Sound file for starting to type a chat message (uuid for sound asset) + Persist + 1 + Type + String + Value + 5e191c7b-8996-9ced-a177-b2ac32bfea06 + + UISndWindowClose + + Comment + Sound file for closing a window (uuid for sound asset) + Persist + 1 + Type + String + Value + 2c346eda-b60c-ab33-1119-b8941916a499 + + UISndWindowOpen + + Comment + Sound file for opening a window (uuid for sound asset) + Persist + 1 + Type + String + Value + c80260ba-41fd-8a46-768a-6bf236360e3a + + UISpinctrlBtnHeight + + Comment + UI spin control button height + Persist + 1 + Type + S32 + Value + 11 + + UISpinctrlBtnWidth + + Comment + UI spin control button width + Persist + 1 + Type + S32 + Value + 16 + + UISpinctrlDefaultLabelWidth + + Comment + UI spin control default label width + Persist + 1 + Type + S32 + Value + 10 + + UISpinctrlSpacing + + Comment + UI spin control spacing + Persist + 1 + Type + S32 + Value + 2 + + UITabCntrArrowBtnSize + + Comment + UI Tab Container Arrow Button Size + Persist + 1 + Type + S32 + Value + 16 + + UITabCntrvArrowBtnSize + + Comment + UI Tab Container V Arrow Button Size + Persist + 1 + Type + S32 + Value + 16 + + UITabCntrvPad + + Comment + UI Tab Container V Pad + Persist + 1 + Type + S32 + Value + 0 + + UITabCntrButtonPanelOverlap + + Comment + UI Tab Container Button Panel Overlap + Persist + 1 + Type + S32 + Value + 1 + + UITabCntrCloseBtnSize + + Comment + UI Tab Container Close Button Size + Persist + 1 + Type + S32 + Value + 16 + + UITabCntrTabHPad + + Comment + UI Tab Container Tab Horizontal Pad + Persist + 1 + Type + S32 + Value + 4 + + UITabCntrTabPartialWidth + + Comment + UI Tab Container Tab Partial Width + Persist + 1 + Type + S32 + Value + 12 + + UITabCntrVertTabMinWidth + + Comment + UI Tab Container Vertical Tab Minimum Width + Persist + 1 + Type + S32 + Value + 100 + + UITabPadding + + Comment + UI Tab Padding + Persist + 1 + Type + S32 + Value + 15 + + UpdaterServiceSetting + + Comment + Configure updater service. + Persist + 1 + Type + U32 + Value + 3 + + UpdaterServiceCheckPeriod + + Comment + Default period between update checking. + Persist + 1 + Type + U32 + Value + 3600 + + UpdaterServiceURL + + Comment + Default location for the updater service. + Persist + 0 + Type + String + Value + https://update.secondlife.com + + UpdaterServicePath + + Comment + Path on the update server host. + Persist + 0 + Type + String + Value + update + + UpdaterServiceProtocolVersion + + Comment + The update protocol version to use. + Persist + 0 + Type + String + Value + v1.0 + + UploadBakedTexOld + + Comment + Forces the baked texture pipeline to upload using the old method. + Persist + 1 + Type + Boolean + Value + 0 + + UseAltKeyForMenus + + Comment + Access menus via keyboard by tapping Alt + Persist + 1 + Type + Boolean + Value + 0 + + UseChatBubbles + + Comment + Show chat above avatars head in chat bubbles + Persist + 1 + Type + Boolean + Value + 0 + + UseCircuitCodeMaxRetries + + Comment + Max timeout count for the initial UseCircuitCode message + Persist + 0 + Type + S32 + Value + 3 + + UseCircuitCodeTimeout + + Comment + Timeout duration in seconds for the initial UseCircuitCode message + Persist + 0 + Type + F32 + Value + 5.0 + + UseDebugLogin + + Comment + Provides extra control over which grid to connect to + Persist + 1 + Type + Boolean + Value + 0 + + UseDebugMenus + + Comment + Turns on "Debug" menu + Persist + 1 + Type + Boolean + Value + 0 + + UseDefaultColorPicker + + Comment + Use color picker supplied by operating system + Persist + 1 + Type + Boolean + Value + 0 + + UseDisplayNames + + Comment + Use new, changeable, unicode names + Persist + 1 + Type + Boolean + Value + 1 + + UseEnergy + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + + UseExternalBrowser + + Comment + Use default browser when opening web pages instead of in-world browser. + Persist + 1 + Type + Boolean + Value + 1 + + UseFreezeFrame + + Comment + Freeze time when taking snapshots. + Persist + 1 + Type + Boolean + Value + 0 + + UseOcclusion + + Comment + Enable object culling based on occlusion (coverage) by other objects + Persist + 1 + Type + Boolean + Value + 1 + + RenderDelayVBUpdate + + Comment + Delay vertex buffer updates until just before rendering + Persist + 1 + Type + Boolean + Value + 0 + + SpeakerParticipantDefaultOrder + + Comment + Order for displaying speakers in voice controls. 0 = alphabetical. 1 = recent. + Persist + 1 + Type + U32 + Value + 1 + + SpeakerParticipantRemoveDelay + + Comment + Timeout to remove participants who is not in channel before removed from list of active speakers (text/voice chat) + Persist + 1 + Type + F32 + Value + 10.0 + + UseNewWalkRun + + Comment + Replace standard walk/run animations with new ones. + Persist + 1 + Type + Boolean + Value + 1 + + UseStartScreen + + Comment + Whether to load a start screen image or not. + Persist + 1 + Type + Boolean + Value + 1 + + UseWebPagesOnPrims + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + + UserConnectionPort + + Comment + Port that this client transmits on. + Persist + 1 + Type + U32 + Value + 0 + + UserLogFile + + Comment + User specified log file name. + Persist + 1 + Type + String + Value + + + UserLoginInfo + + Comment + Users loging data. + Persist + 1 + Type + LLSD + Value + + VFSOldSize + + Comment + [DO NOT MODIFY] Controls resizing of local file cache + Persist + 1 + Type + U32 + Value + 0 + + VFSSalt + + Comment + [DO NOT MODIFY] Controls local file caching behavior + Persist + 1 + Type + U32 + Value + 1 + + VectorizeEnable + + Comment + Enable general vector operations and data alignment. + Persist + 1 + Type + Boolean + Value + 0 + + VectorizePerfTest + + Comment + Test SSE/vectorization performance and choose fastest version. + Persist + 1 + Type + Boolean + Value + 1 + + VectorizeProcessor + + Comment + 0=Compiler Default, 1=SSE, 2=SSE2, autodetected + Persist + 0 + Type + U32 + Value + 0 + + VectorizeSkin + + Comment + Enable vector operations for avatar skinning. + Persist + 1 + Type + Boolean + Value + 1 + + VelocityInterpolate + + Comment + Extrapolate object motion from last packet based on received velocity + Persist + 1 + Type + Boolean + Value + 1 + + InterpolationTime + + Comment + How long to extrapolate object motion after last packet received + Persist + 1 + Type + F32 + Value + 3 + + InterpolationPhaseOut + + Comment + Seconds to phase out interpolated motion + Persist + 1 + Type + F32 + Value + 1 + + VerboseLogs + + Comment + Display source file and line number for each log item for debugging purposes + Persist + 1 + Type + Boolean + Value + 0 + + VertexShaderEnable + + Comment + Enable/disable all GLSL shaders (debug) + Persist + 1 + Type + Boolean + Value + 0 + + VivoxAutoPostCrashDumps + + Comment + If true, SLVoice will automatically send crash dumps directly to Vivox. + Persist + 1 + Type + Boolean + Value + 0 + + VivoxDebugLevel + + Comment + Logging level to use when launching the vivox daemon + Persist + 1 + Type + String + Value + -1 + + VivoxDebugSIPURIHostName + + Comment + Hostname portion of vivox SIP URIs (empty string for the default). + Persist + 1 + Type + String + Value + + + VivoxDebugVoiceAccountServerURI + + Comment + URI to the vivox account management server (empty string for the default). + Persist + 1 + Type + String + Value + + + VivoxVoiceHost + + Comment + Client SLVoice host to connect to + Persist + 1 + Type + String + Value + 127.0.0.1 + + VivoxVoicePort + + Comment + Client SLVoice port to connect to + Persist + 1 + Type + U32 + Value + 44125 + + VoiceCallsFriendsOnly + + Comment + Only accept voice calls from residents on your friends list + Persist + 1 + Type + Boolean + Value + 0 + + VoiceCallsRejectGroup + + Comment + Silently reject all incoming group voice calls. + Persist + 1 + Type + Boolean + Value + 0 + + VoiceDisableMic + + Comment + Completely disable the ability to open the mic. + Persist + 1 + Type + Boolean + Value + 0 + + VoiceEffectExpiryWarningTime + + Comment + How much notice to give of Voice Morph subscriptions expiry, in seconds. + Persist + 1 + Type + S32 + Value + 259200 + + VoiceMorphingEnabled + + Comment + Whether or not to enable Voice Morphs and show the UI. + Persist + 0 + Type + Boolean + Value + 1 + + AutoDisengageMic + + Comment + Automatically turn off the microphone when ending IM calls. + Persist + 1 + Type + Boolean + Value + 1 + + VoiceEarLocation + + Comment + Location of the virtual ear for voice + Persist + 1 + Type + S32 + Value + 0 + + VoiceHost + + Comment + Client SLVoice host to connect to + Persist + 1 + Type + String + Value + 127.0.0.1 + + VoiceImageLevel0 + + Comment + Texture UUID for voice image level 0 + Persist + 1 + Type + String + Value + 041ee5a0-cb6a-9ac5-6e49-41e9320507d5 + + VoiceImageLevel1 + + Comment + Texture UUID for voice image level 1 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel2 + + Comment + Texture UUID for voice image level 2 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel3 + + Comment + Texture UUID for voice image level 3 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel4 + + Comment + Texture UUID for voice image level 4 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel5 + + Comment + Texture UUID for voice image level 5 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel6 + + Comment + Texture UUID for voice image level 6 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceInputAudioDevice + + Comment + Audio input device to use for voice + Persist + 1 + Type + String + Value + Default + + VoiceLogFile + + Comment + Log file to use when launching the voice daemon + Persist + 1 + Type + String + Value + + + VoiceOutputAudioDevice + + Comment + Audio output device to use for voice + Persist + 1 + Type + String + Value + Default + + VoiceParticipantLeftRemoveDelay + + Comment + Timeout to remove participants who has left Voice chat from the list in Voice Controls Panel + Persist + 1 + Type + S32 + Value + 10 + + VoicePort + + Comment + Client SLVoice port to connect to + Persist + 1 + Type + U32 + Value + 44125 + + WarningsAsChat + + Comment + Display warning messages in chat history + Persist + 1 + Type + Boolean + Value + 0 + + VoiceServerType + + Comment + The type of voice server to connect to. + Persist + 0 + Type + String + Value + vivox + + WLSkyDetail + + Comment + Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies. + Persist + 1 + Type + U32 + Value + 64 + + WatchdogEnabled + + Comment + Controls whether the thread watchdog timer is activated. + Persist + 0 + Type + S32 + Value + 20 + + WaterEditPresets + + Comment + Whether to be able to edit the water defaults or not + Persist + 1 + Type + Boolean + Value + 0 + + WaterFogColor + + Comment + Water fog color + Persist + 1 + Type + Color4 + Value + + 0.0863 + 0.168 + 0.212 + 0 + + + WaterFogDensity + + Comment + Water fog density + Persist + 1 + Type + F32 + Value + 16.0 + + WaterGLFogDensityScale + + Comment + Maps shader water fog density to gl fog density + Persist + 1 + Type + F32 + Value + 0.02 + + WaterGLFogDepthFloor + + Comment + Controls how dark water gl fog can get + Persist + 1 + Type + F32 + Value + 0.25 + + WaterGLFogDepthScale + + Comment + Controls how quickly gl fog gets dark under water + Persist + 1 + Type + F32 + Value + 50.0 + + WellIconFlashCount + + Comment + Number of flashes of IM Well and Notification Well icons after which flashing buttons stay lit up. Requires restart. + Persist + 1 + Type + S32 + Value + 3 + + WellIconFlashPeriod + + Comment + Period at which IM Well and Notification Well icons flash (seconds). Requires restart. + Persist + 1 + Type + F32 + Value + 0.25 + + WindLightUseAtmosShaders + + Comment + Whether to enable or disable WindLight atmospheric shaders. + Persist + 1 + Type + Boolean + Value + 1 + + WindowFullScreen + + Comment + SL viewer window full screen + Persist + 1 + Type + Boolean + Value + 0 + + WindowHeight + + Comment + SL viewer window height + Persist + 1 + Type + S32 + Value + 738 + + WindowMaximized + + Comment + SL viewer window maximized on login + Persist + 1 + Type + Boolean + Value + 0 + + WindowWidth + + Comment + SL viewer window width + Persist + 1 + Type + S32 + Value + 1024 + + WindowX + + Comment + X coordinate of lower left corner of SL viewer window, relative to primary display (pixels) + Persist + 1 + Type + S32 + Value + 10 + + WindowY + + Comment + Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels) + Persist + 1 + Type + S32 + Value + 10 + + XferThrottle + + Comment + Maximum allowable downstream bandwidth for asset transfers (bits per second) + Persist + 1 + Type + F32 + Value + 150000.0 + + ExternalEditor + + Comment + Path to program used to edit LSL scripts and XUI files, e.g.: /usr/bin/gedit --new-window "%s" + Persist + 1 + Type + String + Value + + + YawFromMousePosition + + Comment + Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right) + Persist + 1 + Type + F32 + Value + 90.0 + + YouAreHereDistance + + Comment + Radius of distance for banner that indicates if the resident is "on" the Place.(meters from avatar to requested place) + Persist + 1 + Type + F32 + Value + 10.0 + + YieldTime + + Comment + Yield some time to the local host. + Persist + 1 + Type + S32 + Value + -1 + + ZoomDirect + + Comment + Map Joystick zoom axis directly to camera zoom. + Persist + 1 + Type + Boolean + Value + 0 + + ZoomTime + + Comment + Time of transition between different camera modes (seconds) + Persist + 1 + Type + F32 + Value + 0.40000000596 + + moapbeacon + + Comment + Beacon / Highlight media on a prim sources + Persist + 1 + Type + Boolean + Value + 0 + + particlesbeacon + + Comment + Beacon / Highlight particle generators + Persist + 1 + Type + Boolean + Value + 0 + + physicalbeacon + + Comment + Beacon / Highlight physical objects + Persist + 1 + Type + Boolean + Value + 1 + + renderbeacons + + Comment + Beacon / Highlight particle generators + Persist + 1 + Type + Boolean + Value + 0 + + renderhighlights + + Comment + Beacon / Highlight scripted objects with touch function + Persist + 1 + Type + Boolean + Value + 1 + + scriptsbeacon + + Comment + Beacon / Highlight scripted objects + Persist + 1 + Type + Boolean + Value + 0 + + scripttouchbeacon + + Comment + Beacon / Highlight scripted objects with touch function + Persist + 1 + Type + Boolean + Value + 1 + + ShowDeviceSettings + + Comment + Show device settings + Persist + 1 + Type + Boolean + Value + 0 + + SLURLDragNDrop + + Comment + Enable drag and drop of SLURLs onto the viewer + Persist + 1 + Type + Boolean + Value + 1 + + SLURLPassToOtherInstance + + Comment + Pass execution to prevoius viewer instances if there is a given slurl + Persist + 1 + Type + Boolean + Value + 1 + + soundsbeacon + + Comment + Beacon / Highlight sound generators + Persist + 1 + Type + Boolean + Value + 0 + + LogTextureDownloadsToViewerLog + + Comment + Send texture download details to the viewer log + Persist + 1 + Type + Boolean + Value + 0 + + LogTextureDownloadsToSimulator + + Comment + Send a digest of texture info to the sim + Persist + 1 + Type + Boolean + Value + 0 + + TextureLoggingThreshold + + Comment + Specifies the byte threshold at which texture download data should be sent to the sim. + Persist + 1 + Type + U32 + Value 1 - ShowObjectUpdates - - Comment - Show when update messages are received for individual objects - Persist - 0 - Type - Boolean - Value - 0 - - ShowOverlayTitle - - Comment - Prints watermark text message on screen - Persist - 1 - Type - Boolean - Value - 0 - - ShowParcelOwners - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowPermissions - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowPropertyLines - - Comment - Show line overlay demarking property boundaries - Persist - 1 - Type - Boolean - Value - 0 - - ShowNetStats - - Comment - Show the Status Indicators for the Viewer and Network Usage in the Status Overlay - Persist - 1 - Type - Boolean - Value - 0 - - ShowSelectionBeam - - Comment - Show selection particle beam when selecting or interacting with objects. - Persist - 1 - Type - Boolean - Value - 1 - - ShowStartLocation - - Comment - Display starting location menu on login screen - Persist - 1 - Type - Boolean - Value - 0 - - ShowTangentBasis - - Comment - Render normal and binormal (debugging bump mapping) - Persist - 1 - Type - Boolean - Value - 0 - - ShowToolBar - - Comment - Show toolbar at bottom of screen - Persist - 1 - Type - Boolean - Value - 1 - - ShowTutorial - - Comment - Show tutorial window on login - Persist - 1 - Type - Boolean - Value - 0 - - ShowVoiceVisualizersInCalls - - Comment - Enables in-world voice visualizers, voice gestures and lip-sync while in group or P2P calls. - Persist - 1 - Type - Boolean - Value - 0 - - SkinCurrent - - Comment - The currently selected skin. - Persist - 1 - Type - String - Value - default - - SkinningSettingsFile - - Comment - Client skin color setting file name (per install). - Persist - 0 - Type - String - Value - - - SkyAmbientScale - - Comment - Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level) - Persist - 1 - Type - F32 - Value - 0.300000011921 - - SkyEditPresets - - Comment - Whether to be able to edit the sky defaults or not - Persist - 1 - Type - Boolean - Value - 0 - - SkyNightColorShift - - Comment - Controls moonlight color (base color applied to moon as light source) - Persist - 1 - Type - Color3 - Value - - 0.67 - 0.67 - 1.0 - - - SkyOverrideSimSunPosition - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - SkySunDefaultPosition - - Comment - Default position of sun in sky (direction in world coordinates) - Persist - 1 - Type - Vector3 - Value - - 1.0 - 0.0 - 0.1 - - - SkyUseClassicClouds - - Comment - Whether to use the old Second Life particle clouds or not - Persist - 1 - Type - Boolean - Value - 1 - - SnapEnabled - - Comment - Enable snapping to grid - Persist - 1 - Type - Boolean - Value - 1 - - SnapMargin - - Comment - Controls maximum distance between windows before they auto-snap together (pixels) - Persist - 1 - Type - S32 - Value - 10 - - SnapToMouseCursor - - Comment - When snapping to grid, center object on nearest grid point to mouse cursor - Persist - 1 - Type - Boolean - Value - 0 - - SnapshotFormat - - Comment - Save snapshots in this format (0 = PNG, 1 = JPEG, 2 = BMP) - Persist - 1 - Type - S32 - Value - 0 - - SnapshotLocalLastResolution - - Comment - Take next local snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - - SnapshotPostcardLastResolution - - Comment - Take next postcard snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - - SnapshotQuality - - Comment - Quality setting of postcard JPEGs (0 = worst, 100 = best) - Persist - 1 - Type - S32 - Value - 75 - - SnapshotSharingEnabled - - Comment - Enable uploading of snapshots to a web service. - Persist - 1 - Type - Boolean - Value - 0 - - SnapshotConfigURL - - Comment - URL to fetch Snapshot Sharing configuration data from. - Persist - 1 - Type - String - Value - http://photos.apps.staging.avatarsunited.com/viewer_config - - SnapshotTextureLastResolution - - Comment - Take next texture snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - - SpeedTest - - Comment - Performance testing mode, no network - Persist - 1 - Type - Boolean - Value - 0 - - StatsAutoRun - - Comment - Play back autopilot - Persist - 1 - Type - Boolean - Value - 0 - - StatsFile - - Comment - Filename for stats logging output - Persist - 1 - Type - String - Value - fs.txt - - StatsNumRuns - - Comment - Loop autopilot playback this number of times - Persist - 1 - Type - S32 - Value - -1 - - StatsPilotFile - - Comment - Filename for stats logging autopilot path - Persist - 1 - Type - String - Value - pilot.txt - - StatsPilotXMLFile - - Comment - Filename for stats logging extended autopilot path - Persist - 1 - Type - String - Value - pilot.xml - - StatsQuitAfterRuns - - Comment - Quit application after this number of autopilot playback runs - Persist - 1 - Type - Boolean - Value - 0 - - StatsSessionTrackFrameStats - - Comment - Track rendering and network statistics - Persist - 1 - Type - Boolean - Value - 0 - - StatsSummaryFile - - Comment - Filename for stats logging summary - Persist - 1 - Type - String - Value - fss.txt - - SystemLanguage - - Comment - Language indicated by system settings (for UI) - Persist - 1 - Type - String - Value - en - - TabToTextFieldsOnly - - Comment - TAB key takes you to next text entry field, instead of next widget - Persist - 1 - Type - Boolean - Value - 0 - - TerrainColorHeightRange - - Comment - Altitude range over which a given terrain texture has effect (meters) - Persist - 1 - Type - F32 - Value - 60.0 - - TerrainColorStartHeight - - Comment - Starting altitude for terrain texturing (meters) - Persist - 1 - Type - F32 - Value - 20.0 - - TextureDecodeDisabled - - Comment - If TRUE, do not fetch and decode any textures - Persist - 1 - Type - Boolean - Value - 0 - - TextureDisable - - Comment - If TRUE, do not load textures for in-world content - Persist - 1 - Type - Boolean - Value - 0 - - TextureDiscardLevel - - Comment - Specify texture resolution (0 = highest, 5 = lowest) - Persist - 1 - Type - U32 - Value - 0 - - TextureLoadFullRes - - Comment - If TRUE, always load textures at full resolution (discard = 0) - Persist - 1 - Type - Boolean - Value - 0 - - TextureMemory - - Comment - Amount of memory to use for textures in MB (0 = autodetect) - Persist - 1 - Type - S32 - Value - 0 - - TexturePickerShowFolders - - Comment - Show folders with no texures in texture picker - Persist - 1 - Type - Boolean - Value - 1 - - TexturePickerSortOrder - - Comment - Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 2 - - ThrottleBandwidthKBPS - - Comment - Maximum allowable downstream bandwidth (kilo bits per second) - Persist - 1 - Type - F32 - Value - 500.0 - - UpdaterMaximumBandwidth - - Comment - Maximum allowable downstream bandwidth for updater service (kilo bits per second) - Persist - 1 - Type - F32 - Value - 500.0 - - ToolTipDelay - - Comment - Seconds before displaying tooltip when mouse stops over UI element - Persist - 1 - Type - F32 - Value - 0.699999988079 - - ToolTipFadeTime - - Comment - Seconds over which tooltip fades away - Persist - 1 - Type - F32 - Value - 0.2 - - ToolTipVisibleTimeFar - - Comment - Fade tooltip after after time passes (seconds) while mouse not near tooltip - Persist - 1 - Type - F32 - Value - 1.0 - - ToolTipVisibleTimeNear - - Comment - Fade tooltip after after time passes (seconds) while mouse near tooltip or original position - Persist - 1 - Type - F32 - Value - 10.0 - - ToolTipVisibleTimeOver - - Comment - Fade tooltip after after time passes (seconds) while mouse over tooltip - Persist - 1 - Type - F32 - Value - 1000.0 - - ToolboxAutoMove - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - - TrackFocusObject - - Comment - Camera tracks last object zoomed on - Persist - 1 - Type - Boolean - Value - 1 - - TranslateLanguage - - Comment - Translate Language specifier - Persist - 1 - Type - String - Value - default - - TranslateChat - - Comment - Translate incoming chat messages - Persist - 1 - Type - Boolean - Value - 0 - - TutorialURL - - Comment - URL for tutorial menu item, set automatically during login - Persist - 0 - Type - String - Value - - - TypeAheadTimeout - - Comment - Time delay before clearing type-ahead buffer in lists (seconds) - Persist - 1 - Type - F32 - Value - 1.5 - - UIAutoScale - - Comment - Keep UI scale consistent across different resolutions - Persist - 1 - Type - Boolean - Value - 1 - - UIAvatariconctrlSymbolHPad - - Comment - UI Avatar Icon Control Symbol Horizontal Pad - Persist - 1 - Type - S32 - Value - 2 - - UIAvatariconctrlSymbolVPad - - Comment - UI Avatar Icon Control Symbol Vertical Pad - Persist - 1 - Type - S32 - Value - 2 - - UIAvatariconctrlSymbolSize - - Comment - UI Avatar Icon Control Symbol Size - Persist - 1 - Type - S32 - Value - 5 - - UIAvatariconctrlSymbolPosition - - Comment - UI Avatar Icon Control Symbol Position (TopLeft|TopRight|BottomLeft|BottomRight) - Persist - 1 - Type - String - Value - BottomRight - - UIButtonOrigHPad - - Comment - UI Button Original Horizontal Pad - Persist - 1 - Type - S32 - Value - 6 - - UICheckboxctrlBtnSize - - Comment - UI Checkbox Control Button Size - Persist - 1 - Type - S32 - Value - 13 - - UICheckboxctrlHeight - - Comment - UI Checkbox Control Height - Persist - 1 - Type - S32 - Value - 16 - - UICheckboxctrlHPad - - Comment - UI Checkbox Control Horizontal Pad - Persist - 1 - Type - S32 - Value - 2 - - UICheckboxctrlSpacing - - Comment - UI Checkbox Control Spacing - Persist - 1 - Type - S32 - Value - 5 - - UICheckboxctrlVPad - - Comment - UI Checkbox Control Vertical Pad - Persist - 1 - Type - S32 - Value - 2 - - UICloseBoxFromTop - - Comment - Distance from top of floater to top of close box icon, pixels - Persist - 1 - Type - S32 - Value - 5 - - UIExtraTriangleHeight - - Comment - UI extra triangle height - Persist - 1 - Type - S32 - Value - -2 - - UIExtraTriangleWidth - - Comment - UI extra triangle width - Persist - 1 - Type - S32 - Value - 2 - - UIFloaterCloseBoxSize - - Comment - Size of UI floater close box size - Persist - 1 - Type - S32 - Value - 16 - - UIFloaterHPad - - Comment - Size of UI floater horizontal pad - Persist - 1 - Type - S32 - Value - 6 - - UIFloaterTestBool - - Comment - Example saved setting for the test floater - Persist - 1 - Type - Boolean - Value - 0 - - UIFloaterTitleVPad - - Comment - Distance from top of floater to top of title string, pixels - Persist - 1 - Type - S32 - Value - 7 - - UIImgDefaultEyesUUID - - Comment - - Persist - 0 - Type - String - Value - 6522e74d-1660-4e7f-b601-6f48c1659a77 - - UIImgDefaultGlovesUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultHairUUID - - Comment - - Persist - 0 - Type - String - Value - 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b - - UIImgDefaultJacketUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultPantsUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultShirtUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultShoesUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultSkirtUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultSocksUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultAlphaUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultUnderwearUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - StartUpChannelUUID - - Comment - - Persist - 0 - Type - String - Value - B56AF90D-6684-48E4-B1E4-722D3DEB2CB6 - - NearByChatChannelUUID - - Comment - - Persist - 0 - Type - String - Value - E1158BD6-661C-4981-9DAD-4DCBFF062502 - - NotificationChannelUUID - - Comment - - Persist - 0 - Type - String - Value - AEED3193-8709-4693-8558-7452CCA97AE5 - - AlertChannelUUID - - Comment - - Persist - 0 - Type - String - Value - F3E07BC8-A973-476D-8C7F-F3B7293975D1 - - UIImgWhiteUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UILineEditorCursorThickness - - Comment - UI Line Editor Cursor Thickness - Persist - 1 - Type - S32 - Value - 2 - - UIMaxComboWidth - - Comment - Maximum width of combo box - Persist - 1 - Type - S32 - Value - 500 - - UIMinimizedWidth - - Comment - Size of UI floater minimized width - Persist - 1 - Type - S32 - Value - 160 - - UIMultiSliderctrlSpacing - - Comment - UI multi slider ctrl spacing - Persist - 1 - Type - S32 - Value - 4 - - UIMultiTrackHeight - - Comment - UI multi track height - Persist - 1 - Type - S32 - Value - 6 - - UIPreeditMarkerBrightness - - Comment - UI Preedit Marker Brightness - Persist - 1 - Type - F32 - Value - 0.4 - - UIPreeditMarkerGap - - Comment - UI Preedit Marker Gap - Persist - 1 - Type - S32 - Value - 1 - - UIPreeditMarkerPosition - - Comment - UI Preedit Marker Position - Persist - 1 - Type - S32 - Value - 4 - - UIPreeditMarkerThickness - - Comment - UI Preedit Marker Thickness - Persist - 1 - Type - S32 - Value - 1 - - UIPreeditStandoutBrightness - - Comment - UI Preedit Standout Brightness - Persist - 1 - Type - F32 - Value - 0.6 - - UIPreeditStandoutGap - - Comment - UI Preedit Standout Gap - Persist - 1 - Type - S32 - Value - 1 - - UIPreeditStandoutPosition - - Comment - UI Preedit Standout Position - Persist - 1 - Type - S32 - Value - 4 - - UIPreeditStandoutThickness - - Comment - UI Preedit Standout Thickness - Persist - 1 - Type - S32 - Value - 2 - - UIResizeBarHeight - - Comment - Size of UI resize bar height - Persist - 1 - Type - S32 - Value - 3 - - UIResizeBarOverlap - - Comment - Size of UI resize bar overlap - Persist - 1 - Type - S32 - Value - 1 - - UIScaleFactor - - Comment - Size of UI relative to default layout on 1024x768 screen - Persist - 1 - Type - F32 - Value - 1.0 - - UIScrollbarSize - - Comment - UI scrollbar size - Persist - 1 - Type - S32 - Value - 15 - - UISliderctrlHeight - - Comment - UI slider ctrl height - Persist - 1 - Type - S32 - Value - 16 - - UISliderctrlSpacing - - Comment - UI slider ctrl spacing - Persist - 1 - Type - S32 - Value - 4 - - UISndAlert - - Comment - Sound file for alerts (uuid for sound asset) - Persist - 1 - Type - String - Value - ed124764-705d-d497-167a-182cd9fa2e6c - - UISndBadKeystroke - - Comment - Sound file for invalid keystroke (uuid for sound asset) - Persist - 1 - Type - String - Value - 2ca849ba-2885-4bc3-90ef-d4987a5b983a - - UISndClick - - Comment - Sound file for mouse click (uuid for sound asset) - Persist - 1 - Type - String - Value - 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 - - UISndClickRelease - - Comment - Sound file for mouse button release (uuid for sound asset) - Persist - 1 - Type - String - Value - 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 - - UISndDebugSpamToggle - - Comment - Log UI sound effects as they are played - Persist - 1 - Type - Boolean - Value - 0 - - UISndHealthReductionF - - Comment - Sound file for female pain (uuid for sound asset) - Persist - 1 - Type - String - Value - 219c5d93-6c09-31c5-fb3f-c5fe7495c115 - - UISndHealthReductionM - - Comment - Sound file for male pain (uuid for sound asset) - Persist - 1 - Type - String - Value - e057c244-5768-1056-c37e-1537454eeb62 - - UISndHealthReductionThreshold - - Comment - Amount of health reduction required to trigger "pain" sound - Persist - 1 - Type - F32 - Value - 10.0 - - UISndInvalidOp - - Comment - Sound file for invalid operations (uuid for sound asset) - Persist - 1 - Type - String - Value - 4174f859-0d3d-c517-c424-72923dc21f65 - - UISndMoneyChangeDown - - Comment - Sound file for L$ balance increase (uuid for sound asset) - Persist - 1 - Type - String - Value - 104974e3-dfda-428b-99ee-b0d4e748d3a3 - - UISndMoneyChangeThreshold - - Comment - Amount of change in L$ balance required to trigger "money" sound - Persist - 1 - Type - F32 - Value - 50.0 - - UISndMoneyChangeUp - - Comment - Sound file for L$ balance decrease(uuid for sound asset) - Persist - 1 - Type - String - Value - 77a018af-098e-c037-51a6-178f05877c6f - - UISndNewIncomingIMSession - - Comment - Sound file for new instant message session(uuid for sound asset) - Persist - 1 - Type - String - Value - 67cc2844-00f3-2b3c-b991-6418d01e1bb7 - - UISndObjectCreate - - Comment - Sound file for object creation (uuid for sound asset) - Persist - 1 - Type - String - Value - f4a0660f-5446-dea2-80b7-6482a082803c - - UISndObjectDelete - - Comment - Sound file for object deletion (uuid for sound asset) - Persist - 1 - Type - String - Value - 0cb7b00a-4c10-6948-84de-a93c09af2ba9 - - UISndObjectRezIn - - Comment - Sound file for rezzing objects (uuid for sound asset) - Persist - 1 - Type - String - Value - 3c8fc726-1fd6-862d-fa01-16c5b2568db6 - - UISndObjectRezOut - - Comment - Sound file for derezzing objects (uuid for sound asset) - Persist - 1 - Type - String - Value - 00000000-0000-0000-0000-000000000000 - - UISndSnapshot - - Comment - Sound file for taking a snapshot (uuid for sound asset) - Persist - 1 - Type - String - Value - 3d09f582-3851-c0e0-f5ba-277ac5c73fb4 - - UISndStartIM - - Comment - Sound file for starting a new IM session (uuid for sound asset) - Persist - 1 - Type - String - Value - c825dfbc-9827-7e02-6507-3713d18916c1 - - UISndTeleportOut - - Comment - Sound file for teleporting (uuid for sound asset) - Persist - 1 - Type - String - Value - d7a9a565-a013-2a69-797d-5332baa1a947 - - UISndTyping - - Comment - Sound file for starting to type a chat message (uuid for sound asset) - Persist - 1 - Type - String - Value - 5e191c7b-8996-9ced-a177-b2ac32bfea06 - - UISndWindowClose - - Comment - Sound file for closing a window (uuid for sound asset) - Persist - 1 - Type - String - Value - 2c346eda-b60c-ab33-1119-b8941916a499 - - UISndWindowOpen - - Comment - Sound file for opening a window (uuid for sound asset) - Persist - 1 - Type - String - Value - c80260ba-41fd-8a46-768a-6bf236360e3a - - UISpinctrlBtnHeight - - Comment - UI spin control button height - Persist - 1 - Type - S32 - Value - 11 - - UISpinctrlBtnWidth - - Comment - UI spin control button width - Persist - 1 - Type - S32 - Value - 16 - - UISpinctrlDefaultLabelWidth - - Comment - UI spin control default label width - Persist - 1 - Type - S32 - Value - 10 - - UISpinctrlSpacing - - Comment - UI spin control spacing - Persist - 1 - Type - S32 - Value - 2 - - UITabCntrArrowBtnSize - - Comment - UI Tab Container Arrow Button Size - Persist - 1 - Type - S32 - Value - 16 - - UITabCntrvArrowBtnSize - - Comment - UI Tab Container V Arrow Button Size - Persist - 1 - Type - S32 - Value - 16 - - UITabCntrvPad - - Comment - UI Tab Container V Pad - Persist - 1 - Type - S32 - Value - 0 - - UITabCntrButtonPanelOverlap - - Comment - UI Tab Container Button Panel Overlap - Persist - 1 - Type - S32 - Value - 1 - - UITabCntrCloseBtnSize - - Comment - UI Tab Container Close Button Size - Persist - 1 - Type - S32 - Value - 16 - - UITabCntrTabHPad - - Comment - UI Tab Container Tab Horizontal Pad - Persist - 1 - Type - S32 - Value - 4 - - UITabCntrTabPartialWidth - - Comment - UI Tab Container Tab Partial Width - Persist - 1 - Type - S32 - Value - 12 - - UITabCntrVertTabMinWidth - - Comment - UI Tab Container Vertical Tab Minimum Width - Persist - 1 - Type - S32 - Value - 100 - - UITabPadding - - Comment - UI Tab Padding - Persist - 1 - Type - S32 - Value - 15 - - UpdaterServiceSetting - - Comment - Configure updater service. - Persist - 1 - Type - U32 - Value - 3 - - UpdaterServiceCheckPeriod - - Comment - Default period between update checking. - Persist - 1 - Type - U32 - Value - 3600 - - UpdaterServiceURL - - Comment - Default location for the updater service. - Persist - 0 - Type - String - Value - https://update.secondlife.com - - UpdaterServicePath - - Comment - Path on the update server host. - Persist - 0 - Type - String - Value - update - - UpdaterServiceProtocolVersion - - Comment - The update protocol version to use. - Persist - 0 - Type - String - Value - v1.0 - - UploadBakedTexOld - - Comment - Forces the baked texture pipeline to upload using the old method. - Persist - 1 - Type - Boolean - Value - 0 - - UseAltKeyForMenus - - Comment - Access menus via keyboard by tapping Alt - Persist - 1 - Type - Boolean - Value - 0 - - UseChatBubbles - - Comment - Show chat above avatars head in chat bubbles - Persist - 1 - Type - Boolean - Value - 0 - - UseCircuitCodeMaxRetries - - Comment - Max timeout count for the initial UseCircuitCode message - Persist - 0 - Type - S32 - Value - 3 - - UseCircuitCodeTimeout - - Comment - Timeout duration in seconds for the initial UseCircuitCode message - Persist - 0 - Type - F32 - Value - 5.0 - - UseDebugLogin - - Comment - Provides extra control over which grid to connect to - Persist - 1 - Type - Boolean - Value - 0 - - UseDebugMenus - - Comment - Turns on "Debug" menu - Persist - 1 - Type - Boolean - Value - 0 - - UseDefaultColorPicker - - Comment - Use color picker supplied by operating system - Persist - 1 - Type - Boolean - Value - 0 - - UseDisplayNames - - Comment - Use new, changeable, unicode names - Persist - 1 - Type - Boolean - Value - 1 - - UseEnergy - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - - UseExternalBrowser - - Comment - Use default browser when opening web pages instead of in-world browser. - Persist - 1 - Type - Boolean - Value - 1 - - UseFreezeFrame - - Comment - Freeze time when taking snapshots. - Persist - 1 - Type - Boolean - Value - 0 - - UseOcclusion - - Comment - Enable object culling based on occlusion (coverage) by other objects - Persist - 1 - Type - Boolean - Value - 1 - - RenderDelayVBUpdate - - Comment - Delay vertex buffer updates until just before rendering - Persist - 1 - Type - Boolean - Value - 0 - - SpeakerParticipantDefaultOrder - - Comment - Order for displaying speakers in voice controls. 0 = alphabetical. 1 = recent. - Persist - 1 - Type - U32 - Value - 1 - - SpeakerParticipantRemoveDelay - - Comment - Timeout to remove participants who is not in channel before removed from list of active speakers (text/voice chat) - Persist - 1 - Type - F32 - Value - 10.0 - - UseNewWalkRun - - Comment - Replace standard walk/run animations with new ones. - Persist - 1 - Type - Boolean - Value - 1 - - UseStartScreen - - Comment - Whether to load a start screen image or not. - Persist - 1 - Type - Boolean - Value - 1 - - UseWebPagesOnPrims - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - - UserConnectionPort - - Comment - Port that this client transmits on. - Persist - 1 - Type - U32 - Value - 0 - - UserLogFile - - Comment - User specified log file name. - Persist - 1 - Type - String - Value - - - UserLoginInfo - - Comment - Users loging data. - Persist - 1 - Type - LLSD - Value - - VFSOldSize - - Comment - [DO NOT MODIFY] Controls resizing of local file cache - Persist - 1 - Type - U32 - Value - 0 - - VFSSalt - - Comment - [DO NOT MODIFY] Controls local file caching behavior - Persist - 1 - Type - U32 - Value - 1 - - VectorizeEnable - - Comment - Enable general vector operations and data alignment. - Persist - 1 - Type - Boolean - Value - 0 - - VectorizePerfTest - - Comment - Test SSE/vectorization performance and choose fastest version. - Persist - 1 - Type - Boolean - Value - 1 - - VectorizeProcessor - - Comment - 0=Compiler Default, 1=SSE, 2=SSE2, autodetected - Persist - 0 - Type - U32 - Value - 0 - - VectorizeSkin - - Comment - Enable vector operations for avatar skinning. - Persist - 1 - Type - Boolean - Value - 1 - - VelocityInterpolate - - Comment - Extrapolate object motion from last packet based on received velocity - Persist - 1 - Type - Boolean - Value - 1 - - InterpolationTime - - Comment - How long to extrapolate object motion after last packet received - Persist - 1 - Type - F32 - Value - 3 - - InterpolationPhaseOut - - Comment - Seconds to phase out interpolated motion - Persist - 1 - Type - F32 - Value - 1 - - VerboseLogs - - Comment - Display source file and line number for each log item for debugging purposes - Persist - 1 - Type - Boolean - Value - 0 - - VertexShaderEnable - - Comment - Enable/disable all GLSL shaders (debug) - Persist - 1 - Type - Boolean - Value - 0 - - VivoxAutoPostCrashDumps - - Comment - If true, SLVoice will automatically send crash dumps directly to Vivox. - Persist - 1 - Type - Boolean - Value - 0 - - VivoxDebugLevel - - Comment - Logging level to use when launching the vivox daemon - Persist - 1 - Type - String - Value - -1 - - VivoxDebugSIPURIHostName - - Comment - Hostname portion of vivox SIP URIs (empty string for the default). - Persist - 1 - Type - String - Value - - - VivoxDebugVoiceAccountServerURI - - Comment - URI to the vivox account management server (empty string for the default). - Persist - 1 - Type - String - Value - - - VivoxVoiceHost - - Comment - Client SLVoice host to connect to - Persist - 1 - Type - String - Value - 127.0.0.1 - - VivoxVoicePort - - Comment - Client SLVoice port to connect to - Persist - 1 - Type - U32 - Value - 44125 - - VoiceCallsFriendsOnly - - Comment - Only accept voice calls from residents on your friends list - Persist - 1 - Type - Boolean - Value - 0 - - VoiceCallsRejectGroup - - Comment - Silently reject all incoming group voice calls. - Persist - 1 - Type - Boolean - Value - 0 - - VoiceDisableMic - - Comment - Completely disable the ability to open the mic. - Persist - 1 - Type - Boolean - Value - 0 - - VoiceEffectExpiryWarningTime - - Comment - How much notice to give of Voice Morph subscriptions expiry, in seconds. - Persist - 1 - Type - S32 - Value - 259200 - - VoiceMorphingEnabled - - Comment - Whether or not to enable Voice Morphs and show the UI. - Persist - 0 - Type - Boolean - Value - 1 - - AutoDisengageMic - - Comment - Automatically turn off the microphone when ending IM calls. - Persist - 1 - Type - Boolean - Value - 1 - - VoiceEarLocation - - Comment - Location of the virtual ear for voice - Persist - 1 - Type - S32 - Value - 0 - - VoiceHost - - Comment - Client SLVoice host to connect to - Persist - 1 - Type - String - Value - 127.0.0.1 - - VoiceImageLevel0 - - Comment - Texture UUID for voice image level 0 - Persist - 1 - Type - String - Value - 041ee5a0-cb6a-9ac5-6e49-41e9320507d5 - - VoiceImageLevel1 - - Comment - Texture UUID for voice image level 1 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel2 - - Comment - Texture UUID for voice image level 2 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel3 - - Comment - Texture UUID for voice image level 3 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel4 - - Comment - Texture UUID for voice image level 4 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel5 - - Comment - Texture UUID for voice image level 5 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel6 - - Comment - Texture UUID for voice image level 6 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceInputAudioDevice - - Comment - Audio input device to use for voice - Persist - 1 - Type - String - Value - Default - - VoiceLogFile - - Comment - Log file to use when launching the voice daemon - Persist - 1 - Type - String - Value - - - VoiceOutputAudioDevice - - Comment - Audio output device to use for voice - Persist - 1 - Type - String - Value - Default - - VoiceParticipantLeftRemoveDelay - - Comment - Timeout to remove participants who has left Voice chat from the list in Voice Controls Panel - Persist - 1 - Type - S32 - Value - 10 - - VoicePort - - Comment - Client SLVoice port to connect to - Persist - 1 - Type - U32 - Value - 44125 - - WarningsAsChat - - Comment - Display warning messages in chat history - Persist - 1 - Type - Boolean - Value - 0 - - VoiceServerType - - Comment - The type of voice server to connect to. - Persist - 0 - Type - String - Value - vivox - - WLSkyDetail - - Comment - Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies. - Persist - 1 - Type - U32 - Value - 64 - - WatchdogEnabled - - Comment - Controls whether the thread watchdog timer is activated. - Persist - 0 - Type - S32 - Value - 20 - - WaterEditPresets - - Comment - Whether to be able to edit the water defaults or not - Persist - 1 - Type - Boolean - Value - 0 - - WaterFogColor - - Comment - Water fog color - Persist - 1 - Type - Color4 - Value - - 0.0863 - 0.168 - 0.212 - 0 - - - WaterFogDensity - - Comment - Water fog density - Persist - 1 - Type - F32 - Value - 16.0 - - WaterGLFogDensityScale - - Comment - Maps shader water fog density to gl fog density - Persist - 1 - Type - F32 - Value - 0.02 - - WaterGLFogDepthFloor - - Comment - Controls how dark water gl fog can get - Persist - 1 - Type - F32 - Value - 0.25 - - WaterGLFogDepthScale - - Comment - Controls how quickly gl fog gets dark under water - Persist - 1 - Type - F32 - Value - 50.0 - - WellIconFlashCount - - Comment - Number of flashes of IM Well and Notification Well icons after which flashing buttons stay lit up. Requires restart. - Persist - 1 - Type - S32 - Value - 3 - - WellIconFlashPeriod - - Comment - Period at which IM Well and Notification Well icons flash (seconds). Requires restart. - Persist - 1 - Type - F32 - Value - 0.25 - - WindLightUseAtmosShaders - - Comment - Whether to enable or disable WindLight atmospheric shaders. - Persist - 1 - Type - Boolean - Value - 1 - - WindowFullScreen - - Comment - SL viewer window full screen - Persist - 1 - Type - Boolean - Value - 0 - - WindowHeight - - Comment - SL viewer window height - Persist - 1 - Type - S32 - Value - 738 - - WindowMaximized - - Comment - SL viewer window maximized on login - Persist - 1 - Type - Boolean - Value - 0 - - WindowWidth - - Comment - SL viewer window width - Persist - 1 - Type - S32 - Value - 1024 - - WindowX - - Comment - X coordinate of lower left corner of SL viewer window, relative to primary display (pixels) - Persist - 1 - Type - S32 - Value - 10 - - WindowY - - Comment - Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels) - Persist - 1 - Type - S32 - Value - 10 - - XferThrottle - - Comment - Maximum allowable downstream bandwidth for asset transfers (bits per second) - Persist - 1 - Type - F32 - Value - 150000.0 - - ExternalEditor - - Comment - Path to program used to edit LSL scripts and XUI files, e.g.: /usr/bin/gedit --new-window "%s" - Persist - 1 - Type - String - Value - - - YawFromMousePosition - - Comment - Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right) - Persist - 1 - Type - F32 - Value - 90.0 - - YouAreHereDistance - - Comment - Radius of distance for banner that indicates if the resident is "on" the Place.(meters from avatar to requested place) - Persist - 1 - Type - F32 - Value - 10.0 - - YieldTime - - Comment - Yield some time to the local host. - Persist - 1 - Type - S32 - Value - -1 - - ZoomDirect - - Comment - Map Joystick zoom axis directly to camera zoom. - Persist - 1 - Type - Boolean - Value - 0 - - ZoomTime - - Comment - Time of transition between different camera modes (seconds) - Persist - 1 - Type - F32 - Value - 0.40000000596 - - moapbeacon - - Comment - Beacon / Highlight media on a prim sources - Persist - 1 - Type - Boolean - Value - 0 - - particlesbeacon - - Comment - Beacon / Highlight particle generators - Persist - 1 - Type - Boolean - Value - 0 - - physicalbeacon - - Comment - Beacon / Highlight physical objects - Persist - 1 - Type - Boolean - Value - 1 - - renderbeacons - - Comment - Beacon / Highlight particle generators - Persist - 1 - Type - Boolean - Value - 0 - - renderhighlights - - Comment - Beacon / Highlight scripted objects with touch function - Persist - 1 - Type - Boolean - Value - 1 - - scriptsbeacon - - Comment - Beacon / Highlight scripted objects - Persist - 1 - Type - Boolean - Value - 0 - - scripttouchbeacon - - Comment - Beacon / Highlight scripted objects with touch function - Persist - 1 - Type - Boolean - Value - 1 - - ShowDeviceSettings - - Comment - Show device settings - Persist - 1 - Type - Boolean - Value - 0 - - SLURLDragNDrop - - Comment - Enable drag and drop of SLURLs onto the viewer - Persist - 1 - Type - Boolean - Value - 1 - - SLURLPassToOtherInstance - - Comment - Pass execution to prevoius viewer instances if there is a given slurl - Persist - 1 - Type - Boolean - Value - 1 - - soundsbeacon - - Comment - Beacon / Highlight sound generators - Persist - 1 - Type - Boolean - Value - 0 - - LogTextureDownloadsToViewerLog - - Comment - Send texture download details to the viewer log - Persist - 1 - Type - Boolean - Value - 0 - - LogTextureDownloadsToSimulator - - Comment - Send a digest of texture info to the sim - Persist - 1 - Type - Boolean - Value - 0 - - TextureLoggingThreshold - - Comment - Specifies the byte threshold at which texture download data should be sent to the sim. - Persist - 1 - Type - U32 - Value - 1 - - - - ShowVoiceChannelPopup - - Comment - Controls visibility of the current voice channel popup above the voice tab - Persist - 1 - Type - Boolean - Value - 0 - - ShowVolumeSettingsPopup - - Comment - Show individual volume slider for voice, sound effects, etc - Persist - 1 - Type - Boolean - Value - 0 - - max_texture_dimension_X - - Comment - Maximum texture width for user uploaded textures - Persist - 1 - Type - S32 - Value - 2048 - - max_texture_dimension_Y - - Comment - Maximum texture height for user uploaded textures - Persist - 1 - Type - S32 - Value - 2048 - - - teleport_offer_invitation_max_length - - Comment - Maximum length of teleport offer invitation line editor. 254 - max_location_url_length(76) = 178 - Persist - 1 - Type - S32 - Value - 178 - - always_showable_floaters - - Comment - Floaters that can be shown despite mouselook mode - Persist - 1 - Type - LLSD - Value - - snapshot - postcard - mini_map - - - LandmarksSortedByDate - - Comment - Reflects landmarks panel sorting order. - Persist - 1 - Type - Boolean - Value - 1 - - OutfitOperationsTimeout - - Comment - Timeout for outfit related operations. - Persist - 1 - Type - S32 - Value - 180 - - HeightUnits - - Comment - Determines which metric units are used: 1(TRUE) for meter and 0(FALSE) for foot. - Persist - 1 - Type - Boolean - Value - 1 - - TipToastMessageLineCount - - Comment - Max line count of text message on tip toast. - Persist - 1 - Type - S32 - Value - 10 - - NotMovingHintTimeout - - Comment - Number of seconds to wait for resident to move before displaying move hint. - Persist - 1 - Type - F32 - Value - 120.0 - - DestinationGuideHintTimeout - - Comment - Number of seconds to wait before telling resident about destination guide. - Persist - 1 - Type - F32 - Value - 1200.0 - - SidePanelHintTimeout - - Comment - Number of seconds to wait before telling resident about side panel. - Persist - 1 - Type - F32 - Value - 300.0 - - GroupMembersSortOrder - - Comment - The order by which group members will be sorted (name|donated|online) - Persist - 1 - Type - String - Value - name - - SessionSettingsFile - - Comment - Settings that are a applied per session (not saved). - Persist - 1 - Type - String - Value - - - UserSessionSettingsFile - - Comment - User settings that are a applied per session (not saved). - Persist - 1 - Type - String - Value - - - OpenSidePanelsInFloaters - - Comment - If true, will always open side panel contents in a floater. - Persist - 1 - Type - Boolean - Value - 0 - - AvatarInspectorTooltipDelay - - Comment - Seconds before displaying avatar inspector tooltip - Persist - 1 - Type - F32 - Value - 0.35 - - ObjectInspectorTooltipDelay - - Comment - Seconds before displaying object inspector tooltip - Persist - 1 - Type - F32 - Value - 0.35 - - SLURLTeleportDirectly - - Comment - Clicking on a slurl will teleport you directly instead of opening places panel - Persist - 1 - Type - Boolean - Value - 0 - - EnableClassifieds - - Comment - Enable creation of new classified ads from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableGroupInfo - - Comment - Enable viewing and editing of group info from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnablePlaceProfile - - Comment - Enable viewing of place profile from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnablePicks - - Comment - Enable editing of picks from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableWorldMap - - Comment - Enable opening world map from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableAvatarPay - - Comment - Enable paying other avatars from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableVoiceCall - - Comment - Enable voice calls from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableAvatarShare - - Comment - Enable sharing from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableInventory - - Comment - Enable opening inventory from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableSearch - - Comment - Enable opening search from web link - Persist - 1 - Type - Boolean - Value - 1 - - EnableAppearance - - Comment - Enable opening appearance from web link - Persist - 1 - Type - Boolean - Value - 1 - - SearchFromAddressBar - - Comment - Can enter search queries into navigation address bar - Persist - 1 - Type - Boolean - Value - 1 - - LogInventoryDecline - - Comment - Log in system chat whenever an inventory offer is declined - Persist - 1 - Type - Boolean - Value - 1 - - UseHTTPInventory - - Comment - Allow use of http inventory transfers instead of UDP - Persist - 1 - Type - Boolean - Value - 1 - - ClickToWalk - - Comment - Click in world to walk to location - Persist - 1 - Type - Boolean - Value - 0 - - ShowOfferedInventory - - Comment - Show inventory window with last inventory offer selected when receiving inventory from other users. - Persist - 1 - Type - Boolean - Value - 1 - - GenericErrorPageURL - - Comment - URL to set as a property on LLMediaControl to navigate to if the a page completes with a 400-499 HTTP status code - Persist - 1 - Type - String - Value - http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/404.html - - DestinationsAndAvatarsVisibility - - Comment - Whether destination panel or avatar picker are open (0=destination guide, 1=avatar picker, default=nothing) - Persist - 1 - Type - S32 - Value - 0 - - OpenIMOnVoice - - Comment - Open the corresponding IM window when connecting to a voice call. - Persist - 1 - Type - Boolean - Value - 0 - - AllowBottomTrayButtonReordering - - Comment - Allow user to move and hide bottom tray buttons - Persist - 1 - Type - Boolean - Value - 1 + + ShowVoiceChannelPopup + + Comment + Controls visibility of the current voice channel popup above the voice tab + Persist + 1 + Type + Boolean + Value + 0 + + ShowVolumeSettingsPopup + + Comment + Show individual volume slider for voice, sound effects, etc + Persist + 1 + Type + Boolean + Value + 0 + + max_texture_dimension_X + + Comment + Maximum texture width for user uploaded textures + Persist + 1 + Type + S32 + Value + 2048 + + max_texture_dimension_Y + + Comment + Maximum texture height for user uploaded textures + Persist + 1 + Type + S32 + Value + 2048 + + + teleport_offer_invitation_max_length + + Comment + Maximum length of teleport offer invitation line editor. 254 - max_location_url_length(76) = 178 + Persist + 1 + Type + S32 + Value + 178 + + always_showable_floaters + + Comment + Floaters that can be shown despite mouselook mode + Persist + 1 + Type + LLSD + Value + + snapshot + postcard + mini_map + + + LandmarksSortedByDate + + Comment + Reflects landmarks panel sorting order. + Persist + 1 + Type + Boolean + Value + 1 + + OutfitOperationsTimeout + + Comment + Timeout for outfit related operations. + Persist + 1 + Type + S32 + Value + 180 + + HeightUnits + + Comment + Determines which metric units are used: 1(TRUE) for meter and 0(FALSE) for foot. + Persist + 1 + Type + Boolean + Value + 1 + + TipToastMessageLineCount + + Comment + Max line count of text message on tip toast. + Persist + 1 + Type + S32 + Value + 10 + + NotMovingHintTimeout + + Comment + Number of seconds to wait for resident to move before displaying move hint. + Persist + 1 + Type + F32 + Value + 120.0 + + DestinationGuideHintTimeout + + Comment + Number of seconds to wait before telling resident about destination guide. + Persist + 1 + Type + F32 + Value + 1200.0 + + SidePanelHintTimeout + + Comment + Number of seconds to wait before telling resident about side panel. + Persist + 1 + Type + F32 + Value + 300.0 + + GroupMembersSortOrder + + Comment + The order by which group members will be sorted (name|donated|online) + Persist + 1 + Type + String + Value + name + + SessionSettingsFile + + Comment + Settings that are a applied per session (not saved). + Persist + 1 + Type + String + Value + + + UserSessionSettingsFile + + Comment + User settings that are a applied per session (not saved). + Persist + 1 + Type + String + Value + + + OpenSidePanelsInFloaters + + Comment + If true, will always open side panel contents in a floater. + Persist + 1 + Type + Boolean + Value + 0 + + AvatarInspectorTooltipDelay + + Comment + Seconds before displaying avatar inspector tooltip + Persist + 1 + Type + F32 + Value + 0.35 + + ObjectInspectorTooltipDelay + + Comment + Seconds before displaying object inspector tooltip + Persist + 1 + Type + F32 + Value + 0.35 + + SLURLTeleportDirectly + + Comment + Clicking on a slurl will teleport you directly instead of opening places panel + Persist + 1 + Type + Boolean + Value + 0 + + EnableClassifieds + + Comment + Enable creation of new classified ads from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableGroupInfo + + Comment + Enable viewing and editing of group info from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnablePlaceProfile + + Comment + Enable viewing of place profile from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnablePicks + + Comment + Enable editing of picks from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableWorldMap + + Comment + Enable opening world map from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableAvatarPay + + Comment + Enable paying other avatars from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableVoiceCall + + Comment + Enable voice calls from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableAvatarShare + + Comment + Enable sharing from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableInventory + + Comment + Enable opening inventory from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableSearch + + Comment + Enable opening search from web link + Persist + 1 + Type + Boolean + Value + 1 + + EnableAppearance + + Comment + Enable opening appearance from web link + Persist + 1 + Type + Boolean + Value + 1 + + SearchFromAddressBar + + Comment + Can enter search queries into navigation address bar + Persist + 1 + Type + Boolean + Value + 1 + + LogInventoryDecline + + Comment + Log in system chat whenever an inventory offer is declined + Persist + 1 + Type + Boolean + Value + 1 + + UseHTTPInventory + + Comment + Allow use of http inventory transfers instead of UDP + Persist + 1 + Type + Boolean + Value + 1 + + ClickToWalk + + Comment + Click in world to walk to location + Persist + 1 + Type + Boolean + Value + 0 + + ShowOfferedInventory + + Comment + Show inventory window with last inventory offer selected when receiving inventory from other users. + Persist + 1 + Type + Boolean + Value + 1 + + GenericErrorPageURL + + Comment + URL to set as a property on LLMediaControl to navigate to if the a page completes with a 400-499 HTTP status code + Persist + 1 + Type + String + Value + http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/404.html + + DestinationsAndAvatarsVisibility + + Comment + Whether destination panel or avatar picker are open (0=destination guide, 1=avatar picker, default=nothing) + Persist + 1 + Type + S32 + Value + 0 + + OpenIMOnVoice + + Comment + Open the corresponding IM window when connecting to a voice call. + Persist + 1 + Type + Boolean + Value + 0 + + AllowBottomTrayButtonReordering + + Comment + Allow user to move and hide bottom tray buttons + Persist + 1 + Type + Boolean + Value + 1 + + WebProfileRect + + Comment + Web profile dimensions + Persist + 1 + Type + Rect + Value + + 0 + 650 + 490 + 0 + + + InboxFreshnessDate + + Comment + Last time the inbox was opened + Persist + 1 + Type + String + Value + + - WebProfileRect - - Comment - Web profile dimensions - Persist - 1 - Type - Rect - Value - - 0 - 650 - 490 - 0 - - diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 50c3f9a734..d57864a420 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -402,6 +402,16 @@ static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange"); // This view grows and shinks to enclose all of its children items and folders. S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_generation ) { + if (getListener()->getUUID().notNull()) + { + if (mNeedsSort) + { + mFolders.sort(mSortFunction); + mItems.sort(mSortFunction); + mNeedsSort = false; + } + } + LLFastTimer t2(FTM_ARRANGE); filter_generation = mFilter->getMinRequiredGeneration(); diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 87bbe76320..d6f32f349d 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -286,7 +286,7 @@ void LLFolderViewItem::refreshFromListener() time_t creation_date = mListener->getCreationDate(); if (mCreationDate != creation_date) { - mCreationDate = mListener->getCreationDate(); + setCreationDate(mListener->getCreationDate()); dirtyFilter(); } if (mRoot->useLabelSuffix()) @@ -1162,7 +1162,7 @@ BOOL LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder, LLFolderView* r // Finds width and height of this object and it's children. Also // makes sure that this view and it's children are the right size. S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation) -{ +{ // sort before laying out contents if (mNeedsSort) { @@ -2426,7 +2426,7 @@ time_t LLFolderViewFolder::getCreationDate() const if (item_creation_date) { - mCreationDate = item_creation_date; + setCreationDate(item_creation_date); break; } } @@ -2442,7 +2442,7 @@ time_t LLFolderViewFolder::getCreationDate() const if (folder_creation_date) { - mCreationDate = folder_creation_date; + setCreationDate(folder_creation_date); break; } } diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index e2f94a2b63..f70e63ecdf 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -173,6 +173,8 @@ protected: static LLFontGL* getLabelFontForStyle(U8 style); + virtual void setCreationDate(time_t creation_date_utc) const { mCreationDate = creation_date_utc; } + public: BOOL postBuild(); @@ -228,7 +230,7 @@ public: void deselectItem(); // this method is used to select this element - void selectItem(); + virtual void selectItem(); // gets multiple-element selection virtual std::set getSelectionList() const; diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index af74f8f261..28025f58d4 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -33,6 +33,7 @@ #include "llinventorypanel.h" #include "llfolderview.h" #include "llsidepanelinventory.h" +#include "llviewercontrol.h" #define SUPPORTING_FRESH_ITEM_COUNT 0 @@ -54,6 +55,7 @@ LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p) LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox() { + gSavedSettings.setString("InboxFreshnessDate", LLDate::now().asString()); } // virtual diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp index b644f0e5cb..cc6bf509d3 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.cpp +++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp @@ -163,5 +163,74 @@ void LLInboxFolderViewFolder::draw() LLFolderViewFolder::draw(); } +void LLInboxFolderViewFolder::updateFlag() const +{ + LLDate saved_freshness_date = LLDate(gSavedSettings.getString("InboxFreshnessDate")); + if (getCreationDate() > saved_freshness_date.secondsSinceEpoch()) + { + mFresh = true; + } +} + +void LLInboxFolderViewFolder::selectItem() +{ + mFresh = false; + LLFolderViewFolder::selectItem(); +} + +void LLInboxFolderViewFolder::toggleOpen() +{ + mFresh = false; + LLFolderViewFolder::toggleOpen(); +} + +void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc) const +{ + mCreationDate = creation_date_utc; + updateFlag(); +} + + +time_t LLInboxFolderViewFolder::getCreationDate() const +{ + // folders have no creation date try to create one from an item somewhere in our folder hierarchy + if (!mCreationDate) + { + for (items_t::const_iterator iit = mItems.begin(); + iit != mItems.end(); ++iit) + { + LLFolderViewItem* itemp = (*iit); + + const time_t item_creation_date = itemp->getCreationDate(); + + if (item_creation_date) + { + mCreationDate = item_creation_date; + updateFlag(); + break; + } + } + + if (!mCreationDate) + { + for (folders_t::const_iterator fit = mFolders.begin(); + fit != mFolders.end(); ++fit) + { + LLFolderViewFolder* folderp = (*fit); + + const time_t folder_creation_date = folderp->getCreationDate(); + + if (folder_creation_date) + { + mCreationDate = folder_creation_date; + updateFlag(); + break; + } + } + } + } + + return llmax(mCreationDate, mSubtreeCreationDate); +} // eof diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index 8f198c41c1..1ac680e5de 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -68,9 +68,17 @@ public: ~LLInboxFolderViewFolder(); void draw(); + + time_t getCreationDate() const; + + void updateFlag() const; + void selectItem(); + void toggleOpen(); protected: - bool mFresh; + void setCreationDate(time_t creation_date_utc) const; + + mutable bool mFresh; }; diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml index 2c987b158d..c34aec1bf0 100644 --- a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml +++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml @@ -6,5 +6,5 @@ item_top_pad="4" selection_image="Rounded_Square" > - + -- cgit v1.2.3 From 5edd6b606b9bc011c64c890200a9fb54072e9fde Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Fri, 8 Jul 2011 15:37:34 -0700 Subject: removing LLInboxFolderViewFolder getCreationDate --- indra/newview/llpanelmarketplaceinboxinventory.cpp | 42 ---------------------- indra/newview/llpanelmarketplaceinboxinventory.h | 4 +-- 2 files changed, 1 insertion(+), 45 deletions(-) diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp index cc6bf509d3..5dff73ee6a 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.cpp +++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp @@ -191,46 +191,4 @@ void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc) const } -time_t LLInboxFolderViewFolder::getCreationDate() const -{ - // folders have no creation date try to create one from an item somewhere in our folder hierarchy - if (!mCreationDate) - { - for (items_t::const_iterator iit = mItems.begin(); - iit != mItems.end(); ++iit) - { - LLFolderViewItem* itemp = (*iit); - - const time_t item_creation_date = itemp->getCreationDate(); - - if (item_creation_date) - { - mCreationDate = item_creation_date; - updateFlag(); - break; - } - } - - if (!mCreationDate) - { - for (folders_t::const_iterator fit = mFolders.begin(); - fit != mFolders.end(); ++fit) - { - LLFolderViewFolder* folderp = (*fit); - - const time_t folder_creation_date = folderp->getCreationDate(); - - if (folder_creation_date) - { - mCreationDate = folder_creation_date; - updateFlag(); - break; - } - } - } - } - - return llmax(mCreationDate, mSubtreeCreationDate); -} - // eof diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index 1ac680e5de..7b124fdccc 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -68,9 +68,7 @@ public: ~LLInboxFolderViewFolder(); void draw(); - - time_t getCreationDate() const; - + void updateFlag() const; void selectItem(); void toggleOpen(); -- cgit v1.2.3 From 1b7f5c8be70aa93b218eefd175e94469f9078da0 Mon Sep 17 00:00:00 2001 From: Xiaohong Bao Date: Fri, 8 Jul 2011 21:01:41 -0600 Subject: fix for STORM-1468: [crashhunters] pre-login crash at LLViewerWindow::LLViewerWindow(std::basic_string,std::allocator > const &,std::basic_string,std::allocator > const &,int,int,int,int,int,int) [secondlife-bin llviewerwindow.cpp] --- indra/newview/llappviewer.cpp | 2 +- indra/newview/llviewerwindow.cpp | 32 +++++++++++++++----------- indra/newview/res/viewerRes.rc | 6 ++--- indra/newview/skins/default/xui/en/strings.xml | 1 + 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 92e0513464..862fc49c0e 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4504,7 +4504,7 @@ void LLAppViewer::idleShutdown() void LLAppViewer::sendLogoutRequest() { - if(!mLogoutRequestSent) + if(!mLogoutRequestSent && gMessageSystem) { LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_LogoutRequest); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index cff166b825..c31e1c3ba9 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1578,6 +1578,25 @@ LLViewerWindow::LLViewerWindow( ignore_pixel_depth, gSavedSettings.getBOOL("RenderDeferred") ? 0 : gSavedSettings.getU32("RenderFSAASamples")); //don't use window level anti-aliasing if FBOs are enabled + if (NULL == mWindow) + { + LLSplashScreen::update(LLTrans::getString("StartupRequireDriverUpdate")); + + LL_WARNS("Window") << "Failed to create window, to be shutting Down, be sure your graphics driver is updated." << llendl ; + + ms_sleep(5000) ; //wait for 5 seconds. + + LLSplashScreen::update(LLTrans::getString("ShuttingDown")); +#if LL_LINUX || LL_SOLARIS + llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information." + << llendl; +#else + LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings" + << LL_ENDL; +#endif + LLAppViewer::instance()->fastQuit(1); + } + if (!LLAppViewer::instance()->restoreErrorTrap()) { LL_WARNS("Window") << " Someone took over my signal/exception handler (post createWindow)!" << LL_ENDL; @@ -1593,19 +1612,6 @@ LLViewerWindow::LLViewerWindow( gSavedSettings.setS32("FullScreenHeight",scr.mY); } - if (NULL == mWindow) - { - LLSplashScreen::update(LLTrans::getString("ShuttingDown")); -#if LL_LINUX || LL_SOLARIS - llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information." - << llendl; -#else - LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings" - << LL_ENDL; -#endif - LLAppViewer::instance()->fastQuit(1); - } - // Get the real window rect the window was created with (since there are various OS-dependent reasons why // the size of a window or fullscreen context may have been adjusted slightly...) F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor"); diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc index 38d04b4b5c..fefeaa9d11 100644 --- a/indra/newview/res/viewerRes.rc +++ b/indra/newview/res/viewerRes.rc @@ -62,12 +62,12 @@ IDI_LCD_LL_ICON ICON "icon1.ico" // Dialog // -SPLASHSCREEN DIALOG 32, 32, 144, 34 +SPLASHSCREEN DIALOG 32, 32, 194, 34 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE FONT 8, "MS Sans Serif" BEGIN ICON IDI_LL_ICON,IDC_STATIC,7,7,20,20 - LTEXT "Loading Second Life...",666,36,13,91,8 + LTEXT "Loading Second Life...",666,36,13,141,8 END @@ -82,7 +82,7 @@ BEGIN "SPLASHSCREEN", DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 137 + RIGHTMARGIN, 187 VERTGUIDE, 36 TOPMARGIN, 7 BOTTOMMARGIN, 27 diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 022c97f341..bd1250f1fa 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -18,6 +18,7 @@ Clearing cache... Initializing Texture Cache... Initializing VFS... + Error: Please Update Your Graphics Driver! Restoring... -- cgit v1.2.3 From f1443579b32cf260e7ad35f35de3930f0f801bd2 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 9 Jul 2011 02:28:34 -0500 Subject: SH-2038 Potential fix for a myriad of performance problems concering VBO usage. --- indra/llrender/llvertexbuffer.cpp | 5 ++- indra/newview/featuretable.txt | 6 ++-- indra/newview/featuretable_linux.txt | 6 ++-- indra/newview/featuretable_mac.txt | 11 ++----- indra/newview/featuretable_xp.txt | 6 ++-- indra/newview/llface.cpp | 64 ++++++++++++++++++++++++++---------- indra/newview/llfeaturemanager.cpp | 4 +++ indra/newview/llvovolume.cpp | 38 ++++++++++----------- 8 files changed, 81 insertions(+), 59 deletions(-) diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 4a0b964e61..6c972647f8 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -1008,6 +1008,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_VERTICES); setBuffer(0, type); mVertexLocked = TRUE; + sMappedCount++; stop_glerror(); if(sDisableVBOMapping) @@ -1082,7 +1083,6 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran llerrs << "memory allocation for vertex data failed." << llendl ; } } - sMappedCount++; } } else @@ -1152,6 +1152,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) setBuffer(0, TYPE_INDEX); mIndexLocked = TRUE; + sMappedCount++; stop_glerror(); if(sDisableVBOMapping) @@ -1211,8 +1212,6 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) llerrs << "memory allocation for Index data failed. " << llendl ; } } - - sMappedCount++; } else { diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 5384660d4c..b81053c140 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -1,4 +1,4 @@ -version 30 +version 31 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -246,9 +246,9 @@ RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 // -// No GL_ARB_map_buffer_range +// GL_ARB_map_buffer_range exists // -list NoMapBufferRange +list MapBufferRange RenderVBOMappingDisable 1 0 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index dab73dc3d1..a6705e41fe 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -1,4 +1,4 @@ -version 25 +version 26 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -244,9 +244,9 @@ RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 // -// No GL_ARB_map_buffer_range +// GL_ARB_map_buffer_range exists // -list NoMapBufferRange +list MapBufferRange RenderVBOMappingDisable 1 0 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index a1e25aae08..2f9f82fd9e 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 26 +version 27 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -48,7 +48,7 @@ RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 -RenderVBOMappingDisable 1 1 +RenderVBOMappingDisable 1 0 RenderVolumeLODFactor 1 2.0 UseStartScreen 1 1 UseOcclusion 1 1 @@ -245,13 +245,6 @@ RenderDeferred 0 0 RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 -// -// No GL_ARB_map_buffer_range -// -list NoMapBufferRange -RenderVBOMappingDisable 1 0 - - // // "Default" setups for safe, low, medium, high // diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index ce2adac221..50f0f5dec1 100644 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -1,4 +1,4 @@ -version 30 +version 31 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -246,9 +246,9 @@ RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 // -// No GL_ARB_map_buffer_range +// GL_ARB_map_buffer_range exists // -list NoMapBufferRange +list MapBufferRange RenderVBOMappingDisable 1 0 diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index b6566fcbd0..d2b05d1088 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1064,6 +1064,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, S32 num_vertices = (S32)vf.mNumVertices; S32 num_indices = (S32) vf.mNumIndices; + bool map_range = gGLManager.mHasMapBufferRange; + if (mVertexBuffer.notNull()) { if (num_indices + (S32) mIndicesIndex > mVertexBuffer->getNumIndices()) @@ -1182,7 +1184,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, // INDICES if (full_rebuild) { - mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, true); + mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, map_range); __m128i* dst = (__m128i*) indicesp.get(); __m128i* src = (__m128i*) vf.mIndices; @@ -1201,7 +1203,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, indicesp[i] = vf.mIndices[i]+index_offset; } - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } LLMatrix4a mat_normal; @@ -1422,11 +1427,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, } } - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } else { //either bump mapped or in atlas, just do the whole expensive loop - mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, true); + mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, map_range); std::vector bump_tc; @@ -1566,12 +1574,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, } } - mVertexBuffer->setBuffer(0); - + if (map_range) + { + mVertexBuffer->setBuffer(0); + } if (do_bump) { - mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, true); + mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, map_range); for (S32 i = 0; i < num_vertices; i++) { @@ -1601,14 +1611,17 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, *tex_coords2++ = tc; } - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } } } if (rebuild_pos) { - mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, true); + mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, map_range); vertices = (LLVector4a*) vert.get(); LLMatrix4a mat_vert; @@ -1637,12 +1650,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, } while (index_dst < index_end); - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } if (rebuild_normal) { - mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, true); + mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, map_range); normals = (LLVector4a*) norm.get(); for (S32 i = 0; i < num_vertices; i++) @@ -1653,12 +1669,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, normals[i] = normal; } - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } if (rebuild_binormal) { - mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, true); + mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, map_range); binormals = (LLVector4a*) binorm.get(); for (S32 i = 0; i < num_vertices; i++) @@ -1669,20 +1688,26 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, binormals[i] = binormal; } - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } if (rebuild_weights && vf.mWeights) { - mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, true); + mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, map_range); weights = (LLVector4a*) wght.get(); LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices*4*sizeof(F32)); - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } if (rebuild_color) { - mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, true); + mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, map_range); LLVector4a src; @@ -1703,7 +1728,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, dst[i] = src; } - mVertexBuffer->setBuffer(0); + if (map_range) + { + mVertexBuffer->setBuffer(0); + } } if (rebuild_tcoord) diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 83844048d1..0ea0e41dfa 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -769,6 +769,10 @@ void LLFeatureManager::applyBaseMasks() { maskFeatures("TexUnit8orLess"); } + if (gGLManager.mHasMapBufferRange) + { + maskFeatures("MapBufferRange"); + } // now mask by gpu string // Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index e6da8eb89d..40afabdb65 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4361,6 +4361,8 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group) group->mBuilt = 1.f; + std::set mapped_buffers; + for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter) { LLFastTimer t(FTM_VOLUME_GEOM_PARTIAL); @@ -4375,35 +4377,31 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group) for (S32 i = 0; i < drawablep->getNumFaces(); ++i) { LLFace* face = drawablep->getFace(i); - if (face && face->getVertexBuffer()) + if (face) { - face->getGeometryVolume(*volume, face->getTEOffset(), - vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex()); + LLVertexBuffer* buff = face->getVertexBuffer(); + if (buff) + { + face->getGeometryVolume(*volume, face->getTEOffset(), + vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex()); + + if (buff->isLocked()) + { + mapped_buffers.insert(buff); + } + } } } - + drawablep->clearState(LLDrawable::REBUILD_ALL); } } - //unmap all the buffers - for (LLSpatialGroup::buffer_map_t::iterator i = group->mBufferMap.begin(); i != group->mBufferMap.end(); ++i) + for (std::set::iterator iter = mapped_buffers.begin(); iter != mapped_buffers.end(); ++iter) { - LLSpatialGroup::buffer_texture_map_t& map = i->second; - for (LLSpatialGroup::buffer_texture_map_t::iterator j = map.begin(); j != map.end(); ++j) - { - LLSpatialGroup::buffer_list_t& list = j->second; - for (LLSpatialGroup::buffer_list_t::iterator k = list.begin(); k != list.end(); ++k) - { - LLVertexBuffer* buffer = *k; - if (buffer->isLocked()) - { - buffer->setBuffer(0); - } - } - } + (*iter)->setBuffer(0); } - + // don't forget alpha if(group != NULL && !group->mVertexBuffer.isNull() && -- cgit v1.2.3 From e4d0d62e71de69d1685d00da571e9055e18fdc0c Mon Sep 17 00:00:00 2001 From: Don Kjer Date: Sat, 9 Jul 2011 22:30:30 -0700 Subject: Added support for apple flush buffer range --- indra/llrender/llgl.cpp | 2 + indra/llrender/llgl.h | 1 + indra/llrender/llvertexbuffer.cpp | 89 ++++++++++++++++++++++++++++----------- indra/newview/llface.cpp | 2 +- 4 files changed, 69 insertions(+), 25 deletions(-) diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index c224ab0e9b..02c975a17a 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -337,6 +337,7 @@ LLGLManager::LLGLManager() : mHasVertexBufferObject(FALSE), mHasMapBufferRange(FALSE), + mHasFlushBufferRange(FALSE), mHasPBuffer(FALSE), mHasShaderObjects(FALSE), mHasVertexShader(FALSE), @@ -775,6 +776,7 @@ void LLGLManager::initExtensions() mHasOcclusionQuery2 = ExtensionExists("GL_ARB_occlusion_query2", gGLHExts.mSysExts); mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts); mHasMapBufferRange = ExtensionExists("GL_ARB_map_buffer_range", gGLHExts.mSysExts); + mHasFlushBufferRange = ExtensionExists("GL_APPLE_flush_buffer_range", gGLHExts.mSysExts); mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts); // mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad #ifdef GL_ARB_framebuffer_object diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index d1bee00161..3e98c04321 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -89,6 +89,7 @@ public: // ARB Extensions BOOL mHasVertexBufferObject; BOOL mHasMapBufferRange; + BOOL mHasFlushBufferRange; BOOL mHasPBuffer; BOOL mHasShaderObjects; BOOL mHasVertexShader; diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 6c972647f8..db9c8f83f8 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -968,7 +968,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran if (useVBOs()) { - if (sDisableVBOMapping || gGLManager.mHasMapBufferRange) + if (sDisableVBOMapping || gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange) { if (count == -1) { @@ -1019,29 +1019,44 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran else { U8* src = NULL; -#ifdef GL_ARB_map_buffer_range if (gGLManager.mHasMapBufferRange) { if (map_range) { +#ifdef GL_ARB_map_buffer_range S32 offset = mOffsets[type] + sTypeSize[type]*index; S32 length = (sTypeSize[type]*count+0xF) & ~0xF; src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT); +#endif } else { +#ifdef GL_ARB_map_buffer_range src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); +#endif + } + } + else if (gGLManager.mHasFlushBufferRange) + { + if (map_range) + { + glBufferParameteriAPPLE(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_FALSE); + glBufferParameteriAPPLE(GL_ARRAY_BUFFER_ARB, GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE); + src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + } + else + { + src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); } } else -#else - llassert_always(!gGLManager.mHasMapBufferRange); -#endif { map_range = false; src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); } + llassert(src != NULL); + mMappedData = LL_NEXT_ALIGNED_ADDRESS(src); mAlignedOffset = mMappedData - src; @@ -1090,7 +1105,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran map_range = false; } - if (map_range && !sDisableVBOMapping) + if (map_range && gGLManager.mHasMapBufferRange && !sDisableVBOMapping) { return mMappedData; } @@ -1114,7 +1129,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) if (useVBOs()) { - if (sDisableVBOMapping || gGLManager.mHasMapBufferRange) + if (sDisableVBOMapping || gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange) { if (count == -1) { @@ -1163,29 +1178,45 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) else { U8* src = NULL; -#ifdef GL_ARB_map_buffer_range if (gGLManager.mHasMapBufferRange) { if (map_range) { +#ifdef GL_ARB_map_buffer_range S32 offset = sizeof(U16)*index; S32 length = sizeof(U16)*count; src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT); +#endif } else { +#ifdef GL_ARB_map_buffer_range src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); +#endif + } + } + else if (gGLManager.mHasFlushBufferRange) + { + if (map_range) + { + glBufferParameteriAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_FALSE); + glBufferParameteriAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE); + src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + } + else + { + src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); } } else -#else - llassert_always(!gGLManager.mHasMapBufferRange); -#endif { map_range = false; src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); } + llassert(src != NULL); + + mMappedIndexData = src; //LL_NEXT_ALIGNED_ADDRESS(src); mAlignedIndexOffset = mMappedIndexData - src; stop_glerror(); @@ -1218,7 +1249,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) map_range = false; } - if (map_range && !sDisableVBOMapping) + if (map_range && gGLManager.mHasMapBufferRange && !sDisableVBOMapping) { return mMappedIndexData; } @@ -1267,8 +1298,7 @@ void LLVertexBuffer::unmapBuffer(S32 type) } else { -#ifdef GL_ARB_map_buffer_range - if (gGLManager.mHasMapBufferRange) + if (gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange) { if (!mMappedVertexRegions.empty()) { @@ -1278,16 +1308,22 @@ void LLVertexBuffer::unmapBuffer(S32 type) const MappedRegion& region = mMappedVertexRegions[i]; S32 offset = region.mIndex >= 0 ? mOffsets[region.mType]+sTypeSize[region.mType]*region.mIndex : 0; S32 length = sTypeSize[region.mType]*region.mCount; - glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length); + if (gGLManager.mHasMapBufferRange) + { +#ifdef GL_ARB_map_buffer_range + glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length); +#endif + } + else if (gGLManager.mHasFlushBufferRange) + { + glFlushMappedBufferRangeAPPLE(GL_ARRAY_BUFFER_ARB, offset, length); + } stop_glerror(); } mMappedVertexRegions.clear(); } } -#else - llassert_always(!gGLManager.mHasMapBufferRange); -#endif stop_glerror(); glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); stop_glerror(); @@ -1325,8 +1361,7 @@ void LLVertexBuffer::unmapBuffer(S32 type) } else { -#ifdef GL_ARB_map_buffer_range - if (gGLManager.mHasMapBufferRange) + if (gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange) { if (!mMappedIndexRegions.empty()) { @@ -1335,16 +1370,22 @@ void LLVertexBuffer::unmapBuffer(S32 type) const MappedRegion& region = mMappedIndexRegions[i]; S32 offset = region.mIndex >= 0 ? sizeof(U16)*region.mIndex : 0; S32 length = sizeof(U16)*region.mCount; - glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length); + if (gGLManager.mHasMapBufferRange) + { +#ifdef GL_ARB_map_buffer_range + glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length); +#endif + } + else if (gGLManager.mHasFlushBufferRange) + { + glFlushMappedBufferRangeAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length); + } stop_glerror(); } mMappedIndexRegions.clear(); } } -#else - llassert_always(!gGLManager.mHasMapBufferRange); -#endif stop_glerror(); glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); stop_glerror(); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index d2b05d1088..59c6e904a1 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1064,7 +1064,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, S32 num_vertices = (S32)vf.mNumVertices; S32 num_indices = (S32) vf.mNumIndices; - bool map_range = gGLManager.mHasMapBufferRange; + bool map_range = gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange; if (mVertexBuffer.notNull()) { -- cgit v1.2.3 From 268f3dbdea27d2549e69cd81334c1c8b0a057da4 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sun, 10 Jul 2011 02:29:39 -0500 Subject: SH-2038 Fix for some compiler errors from the apple tweaks -- also add a fence API (disabled for now). --- indra/llrender/llgl.cpp | 31 +++++++++-- indra/llrender/llgl.h | 1 + indra/llrender/llglheaders.h | 39 ++++++++++++++ indra/llrender/llvertexbuffer.cpp | 109 +++++++++++++++++++++++++++++++++++--- indra/llrender/llvertexbuffer.h | 12 +++++ 5 files changed, 182 insertions(+), 10 deletions(-) diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 02c975a17a..e07ff0015c 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -128,9 +128,21 @@ PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB = NULL; PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB = NULL; // GL_ARB_map_buffer_range -PFNGLMAPBUFFERRANGEPROC glMapBufferRange; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; - +PFNGLMAPBUFFERRANGEPROC glMapBufferRange = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange = NULL; + +// GL_ARB_sync +PFNGLFENCESYNCPROC glFenceSync = NULL; +PFNGLISSYNCPROC glIsSync = NULL; +PFNGLDELETESYNCPROC glDeleteSync = NULL; +PFNGLCLIENTWAITSYNCPROC glClientWaitSync = NULL; +PFNGLWAITSYNCPROC glWaitSync = NULL; +PFNGLGETINTEGER64VPROC glGetInteger64v = NULL; +PFNGLGETSYNCIVPROC glGetSynciv = NULL; + +// GL_APPLE_flush_buffer_range +PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE = NULL; // vertex object prototypes PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI = NULL; @@ -334,7 +346,7 @@ LLGLManager::LLGLManager() : mHasFramebufferObject(FALSE), mMaxSamples(0), mHasBlendFuncSeparate(FALSE), - + mHasSync(FALSE), mHasVertexBufferObject(FALSE), mHasMapBufferRange(FALSE), mHasFlushBufferRange(FALSE), @@ -775,6 +787,7 @@ void LLGLManager::initExtensions() mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts); mHasOcclusionQuery2 = ExtensionExists("GL_ARB_occlusion_query2", gGLHExts.mSysExts); mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts); + mHasSync = ExtensionExists("GL_ARB_sync", gGLHExts.mSysExts); mHasMapBufferRange = ExtensionExists("GL_ARB_map_buffer_range", gGLHExts.mSysExts); mHasFlushBufferRange = ExtensionExists("GL_APPLE_flush_buffer_range", gGLHExts.mSysExts); mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts); @@ -971,6 +984,16 @@ void LLGLManager::initExtensions() mHasVertexBufferObject = FALSE; } } + if (mHasSync) + { + glFenceSync = (PFNGLFENCESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glFenceSync"); + glIsSync = (PFNGLISSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glIsSync"); + glDeleteSync = (PFNGLDELETESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteSync"); + glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glClientWaitSync"); + glWaitSync = (PFNGLWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glWaitSync"); + glGetInteger64v = (PFNGLGETINTEGER64VPROC) GLH_EXT_GET_PROC_ADDRESS("glGetInteger64v"); + glGetSynciv = (PFNGLGETSYNCIVPROC) GLH_EXT_GET_PROC_ADDRESS("glGetSynciv"); + } if (mHasMapBufferRange) { glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) GLH_EXT_GET_PROC_ADDRESS("glMapBufferRange"); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 3e98c04321..d736133f3f 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -88,6 +88,7 @@ public: // ARB Extensions BOOL mHasVertexBufferObject; + BOOL mHasSync; BOOL mHasMapBufferRange; BOOL mHasFlushBufferRange; BOOL mHasPBuffer; diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h index f35f329f00..851a75629e 100644 --- a/indra/llrender/llglheaders.h +++ b/indra/llrender/llglheaders.h @@ -68,6 +68,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB; extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB; extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB; +// GL_ARB_sync +extern PFNGLFENCESYNCPROC glFenceSync; +extern PFNGLISSYNCPROC glIsSync; +extern PFNGLDELETESYNCPROC glDeleteSync; +extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync; +extern PFNGLWAITSYNCPROC glWaitSync; +extern PFNGLGETINTEGER64VPROC glGetInteger64v; +extern PFNGLGETSYNCIVPROC glGetSynciv; + +// GL_APPLE_flush_buffer_range +extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE; +extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE; + // GL_ARB_map_buffer_range extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; @@ -310,6 +323,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB; extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB; extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB; +// GL_ARB_sync +extern PFNGLFENCESYNCPROC glFenceSync; +extern PFNGLISSYNCPROC glIsSync; +extern PFNGLDELETESYNCPROC glDeleteSync; +extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync; +extern PFNGLWAITSYNCPROC glWaitSync; +extern PFNGLGETINTEGER64VPROC glGetInteger64v; +extern PFNGLGETSYNCIVPROC glGetSynciv; + +// GL_APPLE_flush_buffer_range +extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE; +extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE; + // GL_ARB_map_buffer_range extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; @@ -519,6 +545,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB; extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB; extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB; +// GL_ARB_sync +extern PFNGLFENCESYNCPROC glFenceSync; +extern PFNGLISSYNCPROC glIsSync; +extern PFNGLDELETESYNCPROC glDeleteSync; +extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync; +extern PFNGLWAITSYNCPROC glWaitSync; +extern PFNGLGETINTEGER64VPROC glGetInteger64v; +extern PFNGLGETSYNCIVPROC glGetSynciv; + +// GL_APPLE_flush_buffer_range +extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE; +extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE; + // GL_ARB_map_buffer_range extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index db9c8f83f8..2a297bcc45 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -65,6 +65,50 @@ S32 LLVertexBuffer::sWeight4Loc = -1; std::vector LLVertexBuffer::sDeleteList; +const U32 FENCE_WAIT_TIME_NANOSECONDS = 10000; //1 ms + +class LLGLSyncFence : public LLGLFence +{ +public: + GLsync mSync; + + LLGLSyncFence() + { + mSync = 0; + } + + ~LLGLSyncFence() + { + if (mSync) + { + glDeleteSync(mSync); + } + } + + void placeFence() + { + if (mSync) + { + glDeleteSync(mSync); + } + mSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + } + + void wait() + { + if (mSync) + { + while (glClientWaitSync(mSync, 0, FENCE_WAIT_TIME_NANOSECONDS) == GL_TIMEOUT_EXPIRED) + { //track the number of times we've waited here + static S32 waits = 0; + waits++; + } + } + } + + +}; + S32 LLVertexBuffer::sTypeSize[LLVertexBuffer::TYPE_MAX] = { sizeof(LLVector4), // TYPE_VERTEX, @@ -309,6 +353,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT, idx); stop_glerror(); + placeFence(); } void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const @@ -340,6 +385,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const glDrawElements(sGLMode[mode], count, GL_UNSIGNED_SHORT, ((U16*) getIndicesPointer()) + indices_offset); stop_glerror(); + placeFence(); } void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const @@ -365,6 +411,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const stop_glerror(); glDrawArrays(sGLMode[mode], first, count); stop_glerror(); + placeFence(); } //static @@ -444,9 +491,11 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) : mFilthy(FALSE), mEmpty(TRUE), mResized(FALSE), - mDynamicSize(FALSE) + mDynamicSize(FALSE), + mFence(NULL) { LLMemType mt2(LLMemType::MTYPE_VERTEX_CONSTRUCTOR); + mFence = NULL; if (!sEnableVBOs) { mUsage = 0 ; @@ -527,9 +576,40 @@ LLVertexBuffer::~LLVertexBuffer() destroyGLIndices(); sCount--; + if (mFence) + { + delete mFence; + } + + mFence = NULL; + llassert_always(!mMappedData && !mMappedIndexData) ; }; +void LLVertexBuffer::placeFence() const +{ + /*if (!mFence && useVBOs()) + { + if (gGLManager.mHasSync) + { + mFence = new LLGLSyncFence(); + } + } + + if (mFence) + { + mFence->placeFence(); + }*/ +} + +void LLVertexBuffer::waitFence() const +{ + /*if (mFence) + { + mFence->wait(); + }*/ +} + //---------------------------------------------------------------------------- void LLVertexBuffer::genBuffer() @@ -967,7 +1047,6 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran if (useVBOs()) { - if (sDisableVBOMapping || gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange) { if (count == -1) @@ -1019,6 +1098,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran else { U8* src = NULL; + waitFence(); if (gGLManager.mHasMapBufferRange) { if (map_range) @@ -1026,13 +1106,20 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran #ifdef GL_ARB_map_buffer_range S32 offset = mOffsets[type] + sTypeSize[type]*index; S32 length = (sTypeSize[type]*count+0xF) & ~0xF; - src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT); + src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length, + GL_MAP_WRITE_BIT | + GL_MAP_FLUSH_EXPLICIT_BIT | + GL_MAP_INVALIDATE_RANGE_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); #endif } else { #ifdef GL_ARB_map_buffer_range - src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); + src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize, + GL_MAP_WRITE_BIT | + GL_MAP_FLUSH_EXPLICIT_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); #endif } } @@ -1178,6 +1265,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) else { U8* src = NULL; + waitFence(); if (gGLManager.mHasMapBufferRange) { if (map_range) @@ -1185,13 +1273,20 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) #ifdef GL_ARB_map_buffer_range S32 offset = sizeof(U16)*index; S32 length = sizeof(U16)*count; - src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT); + src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, + GL_MAP_WRITE_BIT | + GL_MAP_FLUSH_EXPLICIT_BIT | + GL_MAP_INVALIDATE_RANGE_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); #endif } else { #ifdef GL_ARB_map_buffer_range - src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); + src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices, + GL_MAP_WRITE_BIT | + GL_MAP_FLUSH_EXPLICIT_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); #endif } } @@ -1378,7 +1473,9 @@ void LLVertexBuffer::unmapBuffer(S32 type) } else if (gGLManager.mHasFlushBufferRange) { +#ifdef GL_APPLE_flush_buffer_range glFlushMappedBufferRangeAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length); +#endif } stop_glerror(); } diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index aa5df305a6..cc5d11e1c2 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -70,6 +70,12 @@ protected: } }; +class LLGLFence +{ +public: + virtual void placeFence() = 0; + virtual void wait() = 0; +}; //============================================================================ // base class @@ -270,6 +276,12 @@ protected: std::vector mMappedVertexRegions; std::vector mMappedIndexRegions; + mutable LLGLFence* mFence; + + void placeFence() const; + void waitFence() const; + + public: static S32 sCount; static S32 sGLCount; -- cgit v1.2.3 From b5149a63f9a3d4eeaa3c8807f9c65d04bbd113bf Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 11 Jul 2011 11:41:34 -0500 Subject: SH-2038 Compatibility fix for mac build (GL_ARB_sync symbols not defined on OSX) --- indra/llrender/llvertexbuffer.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 2a297bcc45..53ddca124b 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -79,23 +79,28 @@ public: ~LLGLSyncFence() { +#ifdef GL_ARB_sync if (mSync) { glDeleteSync(mSync); } +#endif } void placeFence() { +#ifdef GL_ARB_sync if (mSync) { glDeleteSync(mSync); } mSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); +#endif } void wait() { +#ifdef GL_ARB_sync if (mSync) { while (glClientWaitSync(mSync, 0, FENCE_WAIT_TIME_NANOSECONDS) == GL_TIMEOUT_EXPIRED) @@ -103,6 +108,7 @@ public: static S32 waits = 0; waits++; } +#endif } } -- cgit v1.2.3 From 9db49b4448abae1e171fd1b40d1a7049b6762353 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 11 Jul 2011 12:14:06 -0500 Subject: SH-2038 Disable usage of stream vbo on mac and make flexi's use stream vbo if stream vbo disabled (effectively disables usage of vertex buffers for flexible objects on mac) --- indra/llrender/llvertexbuffer.cpp | 8 +------- indra/newview/featuretable_mac.txt | 4 ++-- indra/newview/lldrawable.cpp | 5 +++++ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 53ddca124b..b96023f613 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -978,17 +978,11 @@ BOOL LLVertexBuffer::useVBOs() const { //it's generally ineffective to use VBO for things that are streaming on apple -#if LL_DARWIN - if (!mUsage || mUsage == GL_STREAM_DRAW_ARB) - { - return FALSE; - } -#else if (!mUsage) { return FALSE; } -#endif + return TRUE; } diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 2f9f82fd9e..2784302f5a 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 27 +version 28 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -64,7 +64,7 @@ RenderDeferred 1 1 RenderDeferredSSAO 1 1 RenderShadowDetail 1 2 WatchdogDisabled 1 1 -RenderUseStreamVBO 1 1 +RenderUseStreamVBO 1 0 RenderFSAASamples 1 16 // diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index ad3710843c..90fcb94088 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -1529,6 +1529,11 @@ BOOL LLDrawable::isAnimating() const return TRUE; } + if (!LLVertexBuffer::sUseStreamDraw && mVObjp->isFlexible()) + { + return TRUE; + } + return FALSE; } -- cgit v1.2.3 From 35ae78a96c46745712d9c256c7b8d1c4cc38b880 Mon Sep 17 00:00:00 2001 From: Xiaohong Bao Date: Mon, 11 Jul 2011 14:17:57 -0600 Subject: more fix for STORM-1468: [crashhunters] pre-login crash at LLViewerWindow::LLViewerWindow(std::basic_string,std::allocator > const &,std::basic_string,std::allocator > const &,int,int,int,int,int,int) [secondlife-bin llviewerwindow.cpp] --- indra/newview/res/viewerRes.rc | 6 +++--- indra/newview/skins/default/xui/en/strings.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc index fefeaa9d11..a53dece422 100644 --- a/indra/newview/res/viewerRes.rc +++ b/indra/newview/res/viewerRes.rc @@ -62,12 +62,12 @@ IDI_LCD_LL_ICON ICON "icon1.ico" // Dialog // -SPLASHSCREEN DIALOG 32, 32, 194, 34 +SPLASHSCREEN DIALOG 32, 32, 264, 34 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE FONT 8, "MS Sans Serif" BEGIN ICON IDI_LL_ICON,IDC_STATIC,7,7,20,20 - LTEXT "Loading Second Life...",666,36,13,141,8 + LTEXT "Loading Second Life...",666,36,13,211,8 END @@ -82,7 +82,7 @@ BEGIN "SPLASHSCREEN", DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 187 + RIGHTMARGIN, 257 VERTGUIDE, 36 TOPMARGIN, 7 BOTTOMMARGIN, 27 diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index bd1250f1fa..c1c1151eb9 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -18,7 +18,7 @@ Clearing cache... Initializing Texture Cache... Initializing VFS... - Error: Please Update Your Graphics Driver! + Graphics Initialization Failed. Please Update Your Graphics Driver! Restoring... -- cgit v1.2.3 From f587af0af19afb52a2b8411f071defe420f8d48d Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Mon, 11 Jul 2011 15:16:56 -0700 Subject: Build fix for Mac OS X. --- indra/llrender/llvertexbuffer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index b96023f613..82c5efe0ac 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -70,11 +70,15 @@ const U32 FENCE_WAIT_TIME_NANOSECONDS = 10000; //1 ms class LLGLSyncFence : public LLGLFence { public: +#ifdef GL_ARB_sync GLsync mSync; +#endif LLGLSyncFence() { +#ifdef GL_ARB_sync mSync = 0; +#endif } ~LLGLSyncFence() @@ -108,8 +112,8 @@ public: static S32 waits = 0; waits++; } -#endif } +#endif } -- cgit v1.2.3 From 18e8d57b210fd5a7ca1bb8fc114a3e4faf8bf537 Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Mon, 11 Jul 2011 17:45:29 -0700 Subject: EXP-995 FIX -- New icon scrolls into Received Items panel heading EXP-903 FIX -- Newness/Freshness number does not decrease as items are opened in Inbox * Brought back freshness with the freshness * New badge and label color from Gibson * Inventory Panel now allows display of badges with proper clipping Reviewed by Richard. --- indra/llui/CMakeLists.txt | 2 + indra/llui/llbadge.cpp | 24 ++++++++- indra/llui/llbadge.h | 10 +++- indra/llui/llbadgeholder.cpp | 45 +++++++++++++++++ indra/llui/llbadgeholder.h | 56 +++++++++++++++++++++ indra/llui/llbadgeowner.cpp | 25 +++++---- indra/llui/llbadgeowner.h | 2 +- indra/llui/llpanel.cpp | 6 +-- indra/llui/llpanel.h | 6 +-- indra/newview/llinventorypanel.cpp | 12 +++++ indra/newview/llinventorypanel.h | 3 ++ indra/newview/llpanelmarketplaceinbox.cpp | 9 ++-- indra/newview/llpanelmarketplaceinboxinventory.cpp | 20 ++++++-- indra/newview/llpanelmarketplaceinboxinventory.h | 4 ++ indra/newview/skins/default/colors.xml | 2 +- .../textures/widgets/Badge_Background_New.png | Bin 0 -> 1369 bytes .../newview/skins/default/xui/en/widgets/badge.xml | 3 ++ .../xui/en/widgets/inbox_folder_view_folder.xml | 11 +++- 18 files changed, 208 insertions(+), 32 deletions(-) create mode 100644 indra/llui/llbadgeholder.cpp create mode 100644 indra/llui/llbadgeholder.h create mode 100644 indra/newview/skins/default/textures/widgets/Badge_Background_New.png diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt index 0bbdcfd6ff..673494820f 100644 --- a/indra/llui/CMakeLists.txt +++ b/indra/llui/CMakeLists.txt @@ -29,6 +29,7 @@ set(llui_SOURCE_FILES llaccordionctrl.cpp llaccordionctrltab.cpp llbadge.cpp + llbadgeholder.cpp llbadgeowner.cpp llbutton.cpp llcheckboxctrl.cpp @@ -123,6 +124,7 @@ set(llui_HEADER_FILES llaccordionctrl.h llaccordionctrltab.h llbadge.h + llbadgeholder.h llbadgeowner.h llbutton.h llcallbackmap.h diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp index c28a947a7f..fde3c53a65 100644 --- a/indra/llui/llbadge.cpp +++ b/indra/llui/llbadge.cpp @@ -43,6 +43,8 @@ LLBadge::Params::Params() , image_color("image_color") , label("label") , label_color("label_color") + , label_offset_horiz("label_offset_horiz") + , label_offset_vert("label_offset_vert") , location("location", LLRelPos::TOP_LEFT) , location_percent_hcenter("location_percent_hcenter") , location_percent_vcenter("location_percent_vcenter") @@ -65,6 +67,8 @@ bool LLBadge::Params::equals(const Params& a) const comp &= (image_color() == a.image_color()); comp &= (label() == a.label()); comp &= (label_color() == a.label_color()); + comp &= (label_offset_horiz() == a.label_offset_horiz()); + comp &= (label_offset_vert() == a.label_offset_vert()); comp &= (location() == a.location()); comp &= (location_percent_hcenter() == a.location_percent_hcenter()); comp &= (location_percent_vcenter() == a.location_percent_vcenter()); @@ -84,6 +88,8 @@ LLBadge::LLBadge(const LLBadge::Params& p) , mImageColor(p.image_color) , mLabel(p.label) , mLabelColor(p.label_color) + , mLabelOffsetHoriz(p.label_offset_horiz) + , mLabelOffsetVert(p.label_offset_vert) , mLocation(p.location) , mLocationPercentHCenter(0.5f) , mLocationPercentVCenter(0.5f) @@ -131,6 +137,18 @@ LLBadge::~LLBadge() { } +bool LLBadge::addToView(LLView * view) +{ + bool child_added = view->addChild(this); + + if (child_added) + { + setShape(view->getLocalRect()); + } + + return child_added; +} + void LLBadge::setLabel(const LLStringExplicit& label) { mLabel = label; @@ -241,8 +259,10 @@ void LLBadge::draw() // Draw the label // - mGLFont->render(badge_label_wstring, badge_label_begin_offset, - badge_center_x, badge_center_y, + mGLFont->render(badge_label_wstring, + badge_label_begin_offset, + badge_center_x + mLabelOffsetHoriz, + badge_center_y + mLabelOffsetVert, mLabelColor % alpha, LLFontGL::HCENTER, LLFontGL::VCENTER, // centered around the position LLFontGL::NORMAL, // normal text (not bold, italics, etc.) diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h index 0f923ef01b..f81ccdf0cd 100644 --- a/indra/llui/llbadge.h +++ b/indra/llui/llbadge.h @@ -104,6 +104,9 @@ public: Optional< std::string > label; Optional< LLUIColor > label_color; + Optional< S32 > label_offset_horiz; + Optional< S32 > label_offset_vert; + Optional< LLRelPos::Location > location; Optional< U32 > location_percent_hcenter; Optional< U32 > location_percent_vcenter; @@ -123,7 +126,9 @@ protected: public: ~LLBadge(); - + + bool addToView(LLView * view); + virtual void draw(); const std::string getLabel() const { return wstring_to_utf8str(mLabel); } @@ -141,6 +146,9 @@ private: LLUIString mLabel; LLUIColor mLabelColor; + S32 mLabelOffsetHoriz; + S32 mLabelOffsetVert; + LLRelPos::Location mLocation; F32 mLocationPercentHCenter; F32 mLocationPercentVCenter; diff --git a/indra/llui/llbadgeholder.cpp b/indra/llui/llbadgeholder.cpp new file mode 100644 index 0000000000..1f786f36ae --- /dev/null +++ b/indra/llui/llbadgeholder.cpp @@ -0,0 +1,45 @@ +/** + * @file llbadgeholder.cpp + * @brief Source for badge holders + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llbadgeholder.h" + +#include "llbadge.h" +#include "llview.h" + + +bool LLBadgeHolder::addBadge(LLBadge * badge) +{ + bool badge_added = false; + + LLView * this_view = dynamic_cast(this); + + if (this_view && mAcceptsBadge) + { + badge_added = badge->addToView(this_view); + } + + return badge_added; +} diff --git a/indra/llui/llbadgeholder.h b/indra/llui/llbadgeholder.h new file mode 100644 index 0000000000..2538eaae91 --- /dev/null +++ b/indra/llui/llbadgeholder.h @@ -0,0 +1,56 @@ +/** + * @file llbadgeholder.h + * @brief Header for badge holders + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBADGEHOLDER_H +#define LL_LLBADGEHOLDER_H + +// +// Classes +// + +class LLBadge; + +class LLBadgeHolder +{ +public: + + LLBadgeHolder(bool acceptsBadge) + : mAcceptsBadge(acceptsBadge) + { + } + + void setAcceptsBadge(bool acceptsBadge) { mAcceptsBadge = acceptsBadge; } + bool acceptsBadge() const { return mAcceptsBadge; } + + virtual bool addBadge(LLBadge * badge); + +private: + + bool mAcceptsBadge; + +}; + +#endif // LL_LLBADGEHOLDER_H diff --git a/indra/llui/llbadgeowner.cpp b/indra/llui/llbadgeowner.cpp index 77f15567bf..1860a05edd 100644 --- a/indra/llui/llbadgeowner.cpp +++ b/indra/llui/llbadgeowner.cpp @@ -26,6 +26,7 @@ #include "linden_common.h" +#include "llbadgeholder.h" #include "llbadgeowner.h" #include "llpanel.h" @@ -81,40 +82,44 @@ void LLBadgeOwner::setBadgeVisibility(bool visible) } } -void LLBadgeOwner::addBadgeToParentPanel() +bool LLBadgeOwner::addBadgeToParentPanel() { + bool badge_added = false; + LLView * owner_view = mBadgeOwnerView.get(); if (mBadge && owner_view) { - // Badge parent is badge owner by default - LLView * badge_parent = owner_view; + LLBadgeHolder * badge_holder = NULL; - // Find the appropriate parent for the badge + // Find the appropriate holder for the badge LLView * parent = owner_view->getParent(); while (parent) { - LLPanel * parent_panel = dynamic_cast(parent); + LLBadgeHolder * badge_holder_panel = dynamic_cast(parent); - if (parent_panel && parent_panel->acceptsBadge()) + if (badge_holder_panel && badge_holder_panel->acceptsBadge()) { - badge_parent = parent; + badge_holder = badge_holder_panel; break; } parent = parent->getParent(); } - if (badge_parent) + if (badge_holder) { - badge_parent->addChild(mBadge); + badge_added = badge_holder->addBadge(mBadge); } else { - llwarns << "Unable to find parent panel for badge " << mBadge->getName() << " on " << owner_view->getName() << llendl; + // Badge parent is fallback badge owner if no valid holder exists in the hierarchy + badge_added = mBadge->addToView(owner_view); } } + + return badge_added; } LLBadge* LLBadgeOwner::createBadge(const LLBadge::Params& p) diff --git a/indra/llui/llbadgeowner.h b/indra/llui/llbadgeowner.h index a2399189a5..8d03e30645 100644 --- a/indra/llui/llbadgeowner.h +++ b/indra/llui/llbadgeowner.h @@ -41,7 +41,7 @@ public: LLBadgeOwner(LLHandle< LLView > viewHandle); void initBadgeParams(const LLBadge::Params& p); - void addBadgeToParentPanel(); + bool addBadgeToParentPanel(); bool badgeHasParent() const { return (mBadge && mBadge->getParent()); } diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 1dcdd79efa..775db6bc9d 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -99,6 +99,7 @@ LLPanel::Params::Params() LLPanel::LLPanel(const LLPanel::Params& p) : LLUICtrl(p), + LLBadgeHolder(p.accepts_badge), mBgVisible(p.background_visible), mBgOpaque(p.background_opaque), mBgOpaqueColor(p.bg_opaque_color()), @@ -114,8 +115,7 @@ LLPanel::LLPanel(const LLPanel::Params& p) mCommitCallbackRegistrar(false), mEnableCallbackRegistrar(false), mXMLFilename(p.filename), - mVisibleSignal(NULL), - mAcceptsBadge(p.accepts_badge) + mVisibleSignal(NULL) // *NOTE: Be sure to also change LLPanel::initFromParams(). We have too // many classes derived from LLPanel to retrofit them all to pass in params. { @@ -488,7 +488,7 @@ void LLPanel::initFromParams(const LLPanel::Params& p) mBgOpaqueImageOverlay = p.bg_opaque_image_overlay; mBgAlphaImageOverlay = p.bg_alpha_image_overlay; - mAcceptsBadge = p.accepts_badge; + setAcceptsBadge(p.accepts_badge); } static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup"); diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index 67674fab7e..1b777ee1cb 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -35,6 +35,7 @@ #include "lluiimage.h" #include "lluistring.h" #include "v4color.h" +#include "llbadgeholder.h" #include #include @@ -51,7 +52,7 @@ class LLUIImage; * With or without border, * Can contain LLUICtrls. */ -class LLPanel : public LLUICtrl +class LLPanel : public LLUICtrl, public LLBadgeHolder { public: struct LocalizedString : public LLInitParam::Block @@ -252,8 +253,6 @@ public: boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb ); - bool acceptsBadge() const { return mAcceptsBadge; } - protected: // Override to set not found list LLButton* getDefaultButton() { return mDefaultBtn; } @@ -268,7 +267,6 @@ protected: static factory_stack_t sFactoryStack; private: - bool mAcceptsBadge; BOOL mBgVisible; // any background at all? BOOL mBgOpaque; // use opaque color or image LLUIColor mBgOpaqueColor; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 702e8d5a1f..d5d40ca65d 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -902,6 +902,18 @@ void LLInventoryPanel::onFocusReceived() LLPanel::onFocusReceived(); } +bool LLInventoryPanel::addBadge(LLBadge * badge) +{ + bool badge_added = false; + + if (acceptsBadge()) + { + badge_added = badge->addToView(mFolderRoot); + } + + return badge_added; +} + void LLInventoryPanel::openAllFolders() { mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index a4287a438e..7676bbb6d7 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -125,6 +125,9 @@ public: /*virtual*/ void onFocusLost(); /*virtual*/ void onFocusReceived(); + // LLBadgeHolder methods + bool addBadge(LLBadge * badge); + // Call this method to set the selection. void openAllFolders(); void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus); diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index 28025f58d4..3accc43ab6 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -27,6 +27,7 @@ #include "llviewerprecompiledheaders.h" #include "llpanelmarketplaceinbox.h" +#include "llpanelmarketplaceinboxinventory.h" #include "llappviewer.h" #include "llbutton.h" @@ -36,7 +37,7 @@ #include "llviewercontrol.h" -#define SUPPORTING_FRESH_ITEM_COUNT 0 +#define SUPPORTING_FRESH_ITEM_COUNT 1 static LLRegisterPanelClassWrapper t_panel_marketplace_inbox("panel_marketplace_inbox"); @@ -159,10 +160,10 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const for (; folders_it != folders_end; ++folders_it) { - const LLFolderViewFolder * folder = *folders_it; + const LLFolderViewFolder * folder_view = *folders_it; + const LLInboxFolderViewFolder * inbox_folder_view = dynamic_cast(folder_view); - // TODO: Replace this check with new "fresh" flag - if (folder->getCreationDate() > 1500) + if (inbox_folder_view && inbox_folder_view->isFresh()) { fresh_item_count++; } diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp index 5dff73ee6a..8542ea2ae4 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.cpp +++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp @@ -141,7 +141,7 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p) : LLFolderViewFolder(p) , LLBadgeOwner(getHandle()) - , mFresh(false) + , mFresh(true) { initBadgeParams(p.new_badge()); } @@ -150,6 +150,19 @@ LLInboxFolderViewFolder::~LLInboxFolderViewFolder() { } +// virtual +time_t LLInboxFolderViewFolder::getCreationDate() const +{ + time_t ret_val = LLFolderViewFolder::getCreationDate(); + + if (!mCreationDate) + { + updateFlag(); + } + + return ret_val; +} + // virtual void LLInboxFolderViewFolder::draw() { @@ -166,10 +179,7 @@ void LLInboxFolderViewFolder::draw() void LLInboxFolderViewFolder::updateFlag() const { LLDate saved_freshness_date = LLDate(gSavedSettings.getString("InboxFreshnessDate")); - if (getCreationDate() > saved_freshness_date.secondsSinceEpoch()) - { - mFresh = true; - } + mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch()); } void LLInboxFolderViewFolder::selectItem() diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index 7b124fdccc..899e459896 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -66,12 +66,16 @@ public: LLInboxFolderViewFolder(const Params& p); ~LLInboxFolderViewFolder(); + + time_t getCreationDate() const; void draw(); void updateFlag() const; void selectItem(); void toggleOpen(); + + bool isFresh() const { return mFresh; } protected: void setCreationDate(time_t creation_date_utc) const; diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 76965ad14b..31b6fc77f5 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -134,7 +134,7 @@ reference="AvatarListItemIconOfflineColor" /> + value="1.0 0.40 0.0 1.0" /> diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png new file mode 100644 index 0000000000..9f114f2e4a Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png differ diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml index f77c4b7178..2d4c02b092 100644 --- a/indra/newview/skins/default/xui/en/widgets/badge.xml +++ b/indra/newview/skins/default/xui/en/widgets/badge.xml @@ -7,11 +7,14 @@ image="Badge_Background" image_color="BadgeImageColor" label_color="BadgeLabelColor" + label_offset_horiz="0" + label_offset_vert="0" location="top_left" location_percent_hcenter="85" location_percent_vcenter="85" padding_horiz="7" padding_vert="4" requests_front="true" + mouse_opaque="false" > diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml index c34aec1bf0..95f5cf2ecd 100644 --- a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml +++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml @@ -6,5 +6,14 @@ item_top_pad="4" selection_image="Rounded_Square" > - + -- cgit v1.2.3 From babeae140225c6ce39a42bae09e38285b63744bf Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Tue, 12 Jul 2011 15:12:54 -0700 Subject: EXP-941 FIX Text and URL change to the Age Verification dialog --- indra/newview/skins/default/xui/en/notifications.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 4ef64269e8..3ff2d1e657 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4991,19 +4991,19 @@ Would you like to automatically wear the clothing you are about to create? name="NotAgeVerified" type="alertmodal"> fail -You must be age-verified to visit this area. Do you want to go to the [SECOND_LIFE] website and verify your age? + To access adult content and areas in Second Life you must be at least 18 years old. Please visit our age verification page to confirm you are over 18. +Note this will launch your web browser. -[_URL] + [_URL] confirm - https://secondlife.com/account/verification.php + notext="Cancel" + yestext="Go to Age Verification"/> Date: Tue, 12 Jul 2011 15:23:46 -0700 Subject: EXP-941 FIX Text and URL change to the Age Verification dialog fixed some formatting --- indra/newview/skins/default/xui/en/notifications.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 3ff2d1e657..d790908659 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4991,10 +4991,10 @@ Would you like to automatically wear the clothing you are about to create? name="NotAgeVerified" type="alertmodal"> fail - To access adult content and areas in Second Life you must be at least 18 years old. Please visit our age verification page to confirm you are over 18. +To access adult content and areas in Second Life you must be at least 18 years old. Please visit our age verification page to confirm you are over 18. Note this will launch your web browser. - [_URL] +[_URL] confirm https://secondlife.com/account/verification.php -- cgit v1.2.3 From fa3f4d11665af44234f8e0ae3e8d8c0ce31d356d Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Tue, 12 Jul 2011 20:58:30 -0700 Subject: EXP-880 FIX Enable navigation chrome for Search floater search floater derives from floater_web_content all web content now uses floater_web_content instead of media_browser --- indra/llui/llfloater.h | 2 +- indra/llui/llsdparam.h | 8 ++ indra/newview/llavataractions.cpp | 6 +- indra/newview/llfloatersearch.cpp | 60 +++++------ indra/newview/llfloatersearch.h | 19 ++-- indra/newview/llfloaterwebcontent.cpp | 110 ++++++++++++--------- indra/newview/llfloaterwebcontent.h | 23 ++++- indra/newview/llnavigationbar.cpp | 2 +- indra/newview/llviewerfloaterreg.cpp | 2 +- indra/newview/llweb.cpp | 31 +++--- indra/newview/llworldmapview.cpp | 4 +- .../skins/default/xui/en/floater_search.xml | 71 ------------- 12 files changed, 154 insertions(+), 184 deletions(-) delete mode 100644 indra/newview/skins/default/xui/en/floater_search.xml diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 5b7b020881..9aae1afc62 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -253,7 +253,7 @@ public: LLHandle getHandle() const { return mHandle; } const LLSD& getKey() { return mKey; } - BOOL matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); } + virtual bool matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); } const std::string& getInstanceName() { return mInstanceName; } diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h index 69dab2b411..827b8c8584 100644 --- a/indra/llui/llsdparam.h +++ b/indra/llui/llsdparam.h @@ -93,6 +93,14 @@ class LLSDParamAdapter : public T LLParamSDParser parser; parser.readSD(sd, *this); } + + operator LLSD() const + { + LLParamSDParser parser; + LLSD sd; + parser.writeSD(sd, *this); + return sd; + } LLSDParamAdapter(const T& val) { diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 8344b08bfb..48827676cd 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -316,7 +316,11 @@ static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarNa // PROFILES: open in webkit window const bool show_chrome = false; static LLCachedControl profile_rect(gSavedSettings, "WebProfileRect"); - LLFloaterWebContent::create(url, "", agent_id.asString(), show_chrome, profile_rect); + LLFloaterWebContent::create(LLFloaterWebContent::Params(). + url(url). + id(agent_id). + show_chrome(show_chrome). + preferred_media_size(profile_rect)); } // static diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index d5806e375c..e9710c41a1 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -70,21 +70,25 @@ public: } // create the LLSD arguments for the search floater - LLSD args; - args["category"] = category; - args["id"] = LLURI::unescape(search_text); + LLFloaterSearch::Params p; + p.category = category; + p.query = LLURI::unescape(search_text); // open the search floater and perform the requested search - LLFloaterReg::showInstance("search", args); + LLFloaterReg::showInstance("search", p); return true; } }; LLSearchHandler gSearchHandler; +LLFloaterSearch::_Params::_Params() +: category("category", ""), + query("query") +{} + + LLFloaterSearch::LLFloaterSearch(const LLSD& key) : - LLFloater(key), - LLViewerMediaObserver(), - mBrowser(NULL), + LLFloaterWebContent(key), mSearchGodLevel(0) { // declare a map that transforms a category name into @@ -102,53 +106,43 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) : BOOL LLFloaterSearch::postBuild() { - mBrowser = getChild("browser"); - mBrowser->addObserver(this); + LLFloaterWebContent::postBuild(); + mWebBrowser->addObserver(this); return TRUE; } void LLFloaterSearch::onOpen(const LLSD& key) { + LLFloaterWebContent::onOpen(key); search(key); } void LLFloaterSearch::onClose(bool app_quitting) { + LLFloaterWebContent::onClose(app_quitting); // tear down the web view so we don't show the previous search // result when the floater is opened next time destroy(); } -void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event) -{ - switch (event) - { - case MEDIA_EVENT_NAVIGATE_BEGIN: - getChild("status_text")->setValue(getString("loading_text")); - break; - - case MEDIA_EVENT_NAVIGATE_COMPLETE: - getChild("status_text")->setValue(getString("done_text")); - break; - - default: - break; - } -} - void LLFloaterSearch::godLevelChanged(U8 godlevel) { // search results can change based upon god level - if the user // changes god level, then give them a warning (we don't refresh // the search as this might undo any page navigation or // AJAX-driven changes since the last search). - getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel)); + + //FIXME: set status bar text + + //getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel)); } void LLFloaterSearch::search(const LLSD &key) { - if (! mBrowser) + Params p(key); + + if (! mWebBrowser || !p.validateBlock()) { return; } @@ -159,10 +153,9 @@ void LLFloaterSearch::search(const LLSD &key) // work out the subdir to use based on the requested category LLSD subs; - std::string category = key.has("category") ? key["category"].asString() : ""; - if (mCategoryPaths.has(category)) + if (mCategoryPaths.has(p.category)) { - subs["CATEGORY"] = mCategoryPaths[category].asString(); + subs["CATEGORY"] = mCategoryPaths[p.category].asString(); } else { @@ -170,8 +163,7 @@ void LLFloaterSearch::search(const LLSD &key) } // add the search query string - std::string search_text = key.has("id") ? key["id"].asString() : ""; - subs["QUERY"] = LLURI::escape(search_text); + subs["QUERY"] = LLURI::escape(p.query); // add the permissions token that login.cgi gave us // We use "search_token", and fallback to "auth_token" if not present. @@ -207,5 +199,5 @@ void LLFloaterSearch::search(const LLSD &key) url = LLWeb::expandURLSubstitutions(url, subs); // and load the URL in the web view - mBrowser->navigateTo(url, "text/html"); + mWebBrowser->navigateTo(url, "text/html"); } diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h index ba4dc4c0fa..2c59fa6d5d 100644 --- a/indra/newview/llfloatersearch.h +++ b/indra/newview/llfloatersearch.h @@ -28,7 +28,7 @@ #ifndef LL_LLFLOATERSEARCH_H #define LL_LLFLOATERSEARCH_H -#include "llfloater.h" +#include "llfloaterwebcontent.h" #include "llviewermediaobserver.h" #include @@ -43,10 +43,19 @@ class LLMediaCtrl; /// so that the user can click on teleport links in search results. /// class LLFloaterSearch : - public LLFloater, - public LLViewerMediaObserver + public LLFloaterWebContent { public: + struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::_Params> + { + Optional category; + Optional query; + + _Params(); + }; + + typedef LLSDParamAdapter<_Params> Params; + LLFloaterSearch(const LLSD& key); /// show the search floater with a new search @@ -70,10 +79,6 @@ public: private: /*virtual*/ BOOL postBuild(); - // inherited from LLViewerMediaObserver - /*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event); - - LLMediaCtrl *mBrowser; LLSD mCategoryPaths; U8 mSearchGodLevel; }; diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 43eecbf048..4cc29267da 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -40,8 +40,16 @@ #include "llfloaterwebcontent.h" +LLFloaterWebContent::_Params::_Params() +: url("url"), + target("target"), + id("id"), + show_chrome("show_chrome", true), + preferred_media_size("preferred_media_size") +{} + LLFloaterWebContent::LLFloaterWebContent( const LLSD& key ) - : LLFloater( key ) +: LLFloater( key ) { mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this )); mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this )); @@ -75,6 +83,12 @@ BOOL LLFloaterWebContent::postBuild() return TRUE; } +bool LLFloaterWebContent::matchesKey(const LLSD& key) +{ + return key["target"].asString() == mKey["target"].asString(); +} + + void LLFloaterWebContent::initializeURLHistory() { // start with an empty list @@ -99,30 +113,23 @@ void LLFloaterWebContent::initializeURLHistory() } //static -void LLFloaterWebContent::create( const std::string &url, const std::string& target, const std::string& uuid, bool show_chrome, const LLRect& preferred_media_size) +void LLFloaterWebContent::create( Params p) { - lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl; + lldebugs << "url = " << p.url() << ", target = " << p.target() << ", uuid = " << p.id().asString() << llendl; - std::string tag = target; + if (!p.id.isProvided()) + { + p.id = LLUUID::generateNewID(); + } - if(target.empty() || target == "_blank") + if(!p.target.isProvided() || p.target() == "_blank") { - if(!uuid.empty()) - { - tag = uuid; - } - else - { - // create a unique tag for this instance - LLUUID id; - id.generate(); - tag = id.asString(); - } + p.target = p.id().asString(); } S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit"); - if(LLFloaterReg::findInstance("web_content", tag) != NULL) + if(LLFloaterReg::findInstance("web_content", p.target()) != NULL) { // There's already a web browser for this tag, so we won't be opening a new window. } @@ -136,7 +143,7 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++) { - lldebugs << " " << (*iter)->getKey() << llendl; + lldebugs << " " << (*iter)->getKey()["target"] << llendl; } if(instances.size() >= (size_t)browser_window_limit) @@ -146,30 +153,7 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar } } - LLFloaterWebContent *browser = dynamic_cast (LLFloaterReg::showInstance("web_content", tag)); - llassert(browser); - if(browser) - { - browser->mUUID = uuid; - - // tell the browser instance to load the specified URL - browser->open_media(url, target); - LLViewerMedia::proxyWindowOpened(target, uuid); - - browser->getChild("status_bar")->setVisible(show_chrome); - browser->getChild("nav_controls")->setVisible(show_chrome); - - if (!show_chrome) - { - browser->setResizeLimits(100, 100); - } - - if (!preferred_media_size.isEmpty()) - { - //ignore x, y for now - browser->geometryChanged(browser->getRect().mLeft, browser->getRect().mBottom, preferred_media_size.getWidth(), preferred_media_size.getHeight()); - } - } + LLFloaterReg::showInstance("web_content", p); } //static @@ -227,13 +211,45 @@ void LLFloaterWebContent::geometryChanged(S32 x, S32 y, S32 width, S32 height) setShape(geom); } -void LLFloaterWebContent::open_media(const std::string& web_url, const std::string& target) +void LLFloaterWebContent::open_media(const Params& p) { // Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin. - mWebBrowser->setHomePageUrl(web_url, "text/html"); - mWebBrowser->setTarget(target); - mWebBrowser->navigateTo(web_url, "text/html"); - set_current_url(web_url); + LLViewerMedia::proxyWindowOpened(p.target(), p.id().asString()); + mWebBrowser->setHomePageUrl(p.url, "text/html"); + mWebBrowser->setTarget(p.target); + mWebBrowser->navigateTo(p.url, "text/html"); + set_current_url(p.url); + + getChild("status_bar")->setVisible(p.show_chrome); + getChild("nav_controls")->setVisible(p.show_chrome); + + if (!p.show_chrome) + { + setResizeLimits(100, 100); + } + + if (!p.preferred_media_size().isEmpty()) + { + //ignore x, y for now + geometryChanged(getRect().mLeft, getRect().mBottom, p.preferred_media_size().getWidth(), p.preferred_media_size().getHeight()); + } + +} + +void LLFloaterWebContent::onOpen(const LLSD& key) +{ + Params params(key); + + if (!params.validateBlock()) + { + closeFloater(); + return; + } + + mUUID = params.id().asString(); + + // tell the browser instance to load the specified URL + open_media(params); } //virtual diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index 56b6ef12c8..2cb6bd0831 100644 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -29,6 +29,7 @@ #include "llfloater.h" #include "llmediactrl.h" +#include "llsdparam.h" class LLMediaCtrl; class LLComboBox; @@ -42,20 +43,37 @@ class LLFloaterWebContent : { public: LOG_CLASS(LLFloaterWebContent); + + struct _Params : public LLInitParam::Block<_Params> + { + Optional url, + target; + Optional id; + Optional show_chrome; + Optional preferred_media_size; + + _Params(); + }; + + typedef LLSDParamAdapter<_Params> Params; + LLFloaterWebContent(const LLSD& key); void initializeURLHistory(); - static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null, bool show_chrome = true, const LLRect& preferred_media_size = LLRect() ); + static void create(Params); static void closeRequest(const std::string &uuid); static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height); void geometryChanged(S32 x, S32 y, S32 width, S32 height); /* virtual */ BOOL postBuild(); + /* virtual */ void onOpen(const LLSD& key); + /* virtual */ bool matchesKey(const LLSD& key); /* virtual */ void onClose(bool app_quitting); /* virtual */ void draw(); +protected: // inherited from LLViewerMediaObserver /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); @@ -66,8 +84,7 @@ public: void onEnterAddress(); void onPopExternal(); -private: - void open_media(const std::string& media_url, const std::string& target); + void open_media(const Params& ); void set_current_url(const std::string& url); LLMediaCtrl* mWebBrowser; diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index b8832dfd8e..9d54ad7463 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -716,7 +716,7 @@ void LLNavigationBar::handleLoginComplete() void LLNavigationBar::invokeSearch(std::string search_text) { - LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("id", LLSD(search_text))); + LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("query", LLSD(search_text))); } void LLNavigationBar::clearHistoryCache() diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 6ae8e79be4..0e58f54f8b 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -274,7 +274,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("start_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); - LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("search", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterUIPreviewUtil::registerFloater(); LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index b73017a51a..e4cdfaaaaf 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -81,19 +81,20 @@ void LLWeb::initClass() // static void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid) { - if(target == "_internal") - { - // Force load in the internal browser, as if with a blank target. - loadURLInternal(url, "", uuid); - } - else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external")) - { - loadURLExternal(url); - } - else - { - loadURLInternal(url, target, uuid); - } + loadWebURL(url, target, uuid); + //if(target == "_internal") + //{ + // // Force load in the internal browser, as if with a blank target. + // loadURLInternal(url, "", uuid); + //} + //else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external")) + //{ + // loadURLExternal(url); + //} + //else + //{ + // loadURLInternal(url, target, uuid); + //} } // static @@ -124,17 +125,15 @@ void LLWeb::loadURLInternal(const std::string &url, const std::string& target, c // Explicitly open a Web URL using the Web content floater void LLWeb::loadWebURLInternal(const std::string &url, const std::string& target, const std::string& uuid) { - LLFloaterWebContent::create(url, target, uuid); + LLFloaterWebContent::create(LLFloaterWebContent::Params().url(url).target(target).id(LLUUID(uuid))); } - // static void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid) { loadURLExternal(url, true, uuid); } - // static void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid) { diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 8cdb615686..265d5dc801 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -1752,13 +1752,13 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask ) case MAP_ITEM_LAND_FOR_SALE_ADULT: { LLFloaterReg::hideInstance("world_map"); - LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("id", id)); + LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("query", id)); break; } case MAP_ITEM_CLASSIFIED: { LLFloaterReg::hideInstance("world_map"); - LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("id", id)); + LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("query", id)); break; } default: diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml deleted file mode 100644 index 8770ede7e9..0000000000 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - Loading... - - - Done - - - - - - - Redo search to reflect current God level - - - - -- cgit v1.2.3 From b1473d4b6bbcbfd67af80f8f1d2f7a7584677c5c Mon Sep 17 00:00:00 2001 From: Vadim ProductEngine Date: Wed, 13 Jul 2011 12:02:03 +0300 Subject: STORM-1502 FIXED Disable "Delete Water/Sky/Day Preset" dialogs if no user presets exist. --- indra/newview/llviewermenu.cpp | 37 ++++++++++++++++++++++ indra/newview/skins/default/xui/en/menu_viewer.xml | 9 ++++++ 2 files changed, 46 insertions(+) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index a37f8ad0d8..f74bcafc5c 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -44,6 +44,7 @@ #include "llbottomtray.h" #include "llcompilequeue.h" #include "llconsole.h" +#include "lldaycyclemanager.h" #include "lldebugview.h" #include "llenvmanager.h" #include "llfilepicker.h" @@ -100,6 +101,7 @@ #include "llworldmap.h" #include "pipeline.h" #include "llviewerjoystick.h" +#include "llwaterparammanager.h" #include "llwlanimator.h" #include "llwlparammanager.h" #include "llfloatercamera.h" @@ -7667,6 +7669,40 @@ class LLWorldEnvPreset : public view_listener_t } }; +class LLWorldEnableEnvPreset : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + std::string item = userdata.asString(); + + if (item == "delete_water") + { + LLWaterParamManager::preset_name_list_t user_waters; + LLWaterParamManager::instance().getUserPresetNames(user_waters); + return !user_waters.empty(); + } + else if (item == "delete_sky") + { + LLWLParamManager::preset_name_list_t user_skies; + LLWLParamManager::instance().getUserPresetNames(user_skies); + return !user_skies.empty(); + } + else if (item == "delete_day_cycle") + { + LLDayCycleManager::preset_name_list_t user_days; + LLDayCycleManager::instance().getUserPresetNames(user_days); + return !user_days.empty(); + } + else + { + llwarns << "Unknown item" << llendl; + } + + return false; + } +}; + + /// Post-Process callbacks class LLWorldPostProcess : public view_listener_t { @@ -7906,6 +7942,7 @@ void initialize_menus() view_listener_t::addMenu(new LLWorldEnvSettings(), "World.EnvSettings"); view_listener_t::addMenu(new LLWorldEnvPreset(), "World.EnvPreset"); + view_listener_t::addMenu(new LLWorldEnableEnvPreset(), "World.EnableEnvPreset"); view_listener_t::addMenu(new LLWorldPostProcess(), "World.PostProcess"); view_listener_t::addMenu(new LLWorldToggleMovementControls(), "World.Toggle.MovementControls"); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index e00586811b..6d3bca10d9 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -557,6 +557,9 @@ + @@ -583,6 +586,9 @@ + @@ -609,6 +615,9 @@ + -- cgit v1.2.3 From f783c335f050b1fe87412c061e1b5134d8c00306 Mon Sep 17 00:00:00 2001 From: Paul ProductEngine Date: Wed, 13 Jul 2011 18:55:08 +0300 Subject: STORM-1503 FIXED Find floater doesn't set focus to its browser. Added tab stop for browser to get focus when find floater is focused. --- indra/newview/skins/default/xui/en/floater_search.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 8770ede7e9..c7b26c59c7 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -38,6 +38,7 @@ user_resize="false" width="630"> Date: Wed, 13 Jul 2011 11:48:09 -0700 Subject: Disabled the fresh item count. The badge on the suitcase button now once again reflects the total item count in the Received Items folder and the New badge is no longer initialized and will not be displayed. Reviewed by Richard. --- indra/newview/llpanelmarketplaceinbox.cpp | 3 --- indra/newview/llpanelmarketplaceinboxinventory.cpp | 4 ++++ indra/newview/llpanelmarketplaceinboxinventory.h | 5 +++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index 3accc43ab6..dd3daf5fbb 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -37,9 +37,6 @@ #include "llviewercontrol.h" -#define SUPPORTING_FRESH_ITEM_COUNT 1 - - static LLRegisterPanelClassWrapper t_panel_marketplace_inbox("panel_marketplace_inbox"); const LLPanelMarketplaceInbox::Params& LLPanelMarketplaceInbox::getDefaultParams() diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp index 8542ea2ae4..4ea6e98070 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.cpp +++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp @@ -143,7 +143,9 @@ LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p) , LLBadgeOwner(getHandle()) , mFresh(true) { +#if SUPPORTING_FRESH_ITEM_COUNT initBadgeParams(p.new_badge()); +#endif } LLInboxFolderViewFolder::~LLInboxFolderViewFolder() @@ -166,12 +168,14 @@ time_t LLInboxFolderViewFolder::getCreationDate() const // virtual void LLInboxFolderViewFolder::draw() { +#if SUPPORTING_FRESH_ITEM_COUNT if (!badgeHasParent()) { addBadgeToParentPanel(); } setBadgeVisibility(mFresh); +#endif LLFolderViewFolder::draw(); } diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index 899e459896..e12508cff4 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -32,6 +32,11 @@ #include "llinventorypanel.h" #include "llfolderviewitem.h" + +#define SUPPORTING_FRESH_ITEM_COUNT 0 + + + class LLInboxInventoryPanel : public LLInventoryPanel { public: -- cgit v1.2.3 From 0f665666201146069647d1686e2ff565d469097b Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 13 Jul 2011 17:36:59 -0400 Subject: Introduce support for C++ integration tests running Python scripts. This is in its infancy; tested on Mac; needs to be ironed out on Windows and Linux. Goal is to test at least some cross-language LLSD serialization. --- indra/llcommon/CMakeLists.txt | 3 +- indra/llcommon/tests/llsdserialize_test.cpp | 97 ++++++++++++++++++++++++----- indra/llcommon/tests/setpython.py | 19 ++++++ 3 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 indra/llcommon/tests/setpython.py diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 9910281b64..c755020a64 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -317,7 +317,8 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(lllazy "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llprocessor "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}" + "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/setpython.py") LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}") diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 7b4c7d6a48..75b79467b7 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -25,33 +25,26 @@ * $/LicenseInfo$ */ -#if !LL_WINDOWS -#include -#endif - #include "linden_common.h" #include "../llsd.h" #include "../llsdserialize.h" #include "../llformat.h" #include "../test/lltut.h" - +#include "llprocesslauncher.h" +#include "stringize.h" #if LL_WINDOWS #include typedef U32 uint32_t; +#else +#include +#include #endif -std::vector string_to_vector(std::string str) +std::vector string_to_vector(const std::string& str) { - // bc LLSD can't... - size_t len = (size_t)str.length(); - std::vector v(len); - for (size_t i = 0; i < len ; i++) - { - v[i] = str[i]; - } - return v; + return std::vector(str.begin(), str.end()); } namespace tut @@ -1494,5 +1487,79 @@ namespace tut ensureBinaryAndNotation("map", test); ensureBinaryAndXML("map", test); } -} + struct TestPythonCompatible + { + TestPythonCompatible() {} + ~TestPythonCompatible() {} + + void python(const std::string& desc, const std::string& script, F32 timeout=5) + { + const char* PYTHON(getenv("PYTHON")); + ensure("Set $PYTHON to the Python interpreter", PYTHON); + LLProcessLauncher py; + py.setExecutable(PYTHON); + py.addArgument("-c"); + py.addArgument(script); + ensure_equals(STRINGIZE("Couldn't launch " << desc << " script"), py.launch(), 0); + +#if LL_WINDOWS + ensure_equals(STRINGIZE(desc << " script ran beyond " + << std::fixed << std::setprecision(1) + << timeout << " seconds"), + WaitForSingleObject(py.getProcessHandle(), DWORD(timeout * 1000)), + WAIT_OBJECT_0); + DWORD rc(0); + GetExitCodeProcess(py.getProcessHandle(), &rc); + ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, 0); +#else + // Implementing timeout would mean messing with alarm() and + // catching SIGALRM... later maybe... + int status(0); + if (waitpid(py.getProcessID(), &status, 0) == -1) + { + int waitpid_errno(errno); + ensure_equals(STRINGIZE("Couldn't retrieve rc from " << desc << " script: " + "waitpid() errno " << waitpid_errno), + waitpid_errno, ECHILD); + } + else + { + if (WIFEXITED(status)) + { + int rc(WEXITSTATUS(status)); + ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, 0); + } + else if (WIFSIGNALED(status)) + { + ensure(STRINGIZE(desc << " script terminated by signal " << WTERMSIG(status)), + false); + } + else + { + ensure(STRINGIZE(desc << " script produced impossible status " << status), + false); + } + } +#endif + } + }; + + typedef tut::test_group TestPythonCompatibleGroup; + typedef TestPythonCompatibleGroup::object TestPythonCompatibleObject; + TestPythonCompatibleGroup pycompat("LLSD serialize Python compatibility"); + + template<> template<> + void TestPythonCompatibleObject::test<1>() + { + python("hello", "print 'Hello, world!'"); + } + + template<> template<> + void TestPythonCompatibleObject::test<2>() + { + python("platform", +"import sys\n" +"print 'Running on', sys.platform"); + } +} diff --git a/indra/llcommon/tests/setpython.py b/indra/llcommon/tests/setpython.py new file mode 100644 index 0000000000..df7b90428e --- /dev/null +++ b/indra/llcommon/tests/setpython.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +"""\ +@file setpython.py +@author Nat Goodspeed +@date 2011-07-13 +@brief Set PYTHON environment variable for tests that care. + +$LicenseInfo:firstyear=2011&license=viewerlgpl$ +Copyright (c) 2011, Linden Research, Inc. +$/LicenseInfo$ +""" + +import os +import sys +import subprocess + +if __name__ == "__main__": + os.environ["PYTHON"] = sys.executable + sys.exit(subprocess.call(sys.argv[1:])) -- cgit v1.2.3 From beea7cdc2d003d815ef2ac32978f841b81288494 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 13 Jul 2011 19:03:28 -0400 Subject: Attempt to fix confusing header-file-order problems on Windows. --- indra/llcommon/tests/llsdserialize_test.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 75b79467b7..6b96c0e234 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -25,6 +25,12 @@ * $/LicenseInfo$ */ +#if !LL_WINDOWS +#include +#include +#include +#endif + #include "linden_common.h" #include "../llsd.h" #include "../llsdserialize.h" @@ -37,9 +43,6 @@ #if LL_WINDOWS #include typedef U32 uint32_t; -#else -#include -#include #endif std::vector string_to_vector(const std::string& str) -- cgit v1.2.3 From 42c6949e304b1a0ba19251ba889132796adb1295 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Wed, 13 Jul 2011 16:06:31 -0700 Subject: EXP-941 FIX text and url change to the age verification dialog tweaked url --- indra/newview/skins/default/xui/en/notifications.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index d790908659..2ba9393eec 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4997,7 +4997,7 @@ Note this will launch your web browser. [_URL] confirm - https://secondlife.com/account/verification.php + https://secondlife.com/my/account/verification.php Date: Wed, 13 Jul 2011 19:41:23 -0400 Subject: Still trying to fix Windows header-file-order problem. --- indra/llcommon/tests/llsdserialize_test.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 6b96c0e234..ff0d8d5f46 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -25,13 +25,18 @@ * $/LicenseInfo$ */ -#if !LL_WINDOWS + +#include "linden_common.h" + +#if LL_WINDOWS +#include +typedef U32 uint32_t; +#else #include #include #include #endif -#include "linden_common.h" #include "../llsd.h" #include "../llsdserialize.h" #include "../llformat.h" @@ -40,11 +45,6 @@ #include "llprocesslauncher.h" #include "stringize.h" -#if LL_WINDOWS -#include -typedef U32 uint32_t; -#endif - std::vector string_to_vector(const std::string& str) { return std::vector(str.begin(), str.end()); -- cgit v1.2.3 From 38ba526cc57799211c4d926a6b4009cef32d21cd Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Wed, 13 Jul 2011 17:59:53 -0700 Subject: EXP-1009 WIP Teleport links from Search floater and destination guide in viewer fail with intrusted browser error in viewer --- indra/llui/llfloaterreg.cpp | 7 +++++-- indra/llui/llsdparam.h | 1 + indra/newview/llfloatersearch.cpp | 7 +++++-- indra/newview/llfloatersearch.h | 4 ++-- indra/newview/llfloaterwebcontent.cpp | 9 +++++++-- indra/newview/llfloaterwebcontent.h | 6 ++++-- indra/newview/llmediactrl.cpp | 9 +++++++++ indra/newview/llmediactrl.h | 4 +++- indra/newview/skins/default/xui/en/floater_web_content.xml | 5 +++++ 9 files changed, 41 insertions(+), 11 deletions(-) diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp index 4677d535db..f5e6444287 100644 --- a/indra/llui/llfloaterreg.cpp +++ b/indra/llui/llfloaterreg.cpp @@ -129,7 +129,10 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key) } // Note: key should eventually be a non optional LLFloater arg; for now, set mKey to be safe - res->mKey = key; + if (res->mKey.isUndefined()) + { + res->mKey = key; + } res->setInstanceName(name); res->applySavedVariables(); // Can't apply rect and dock state until setting instance name if (res->mAutoTile && !res->getHost() && index > 0) @@ -221,7 +224,7 @@ LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key, LLFloater* instance = getInstance(name, key); if (instance) { - instance->openFloater(key); + instance->openFloater(instance->mKey); if (focus) instance->setFocus(TRUE); } diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h index 827b8c8584..f776c781b3 100644 --- a/indra/llui/llsdparam.h +++ b/indra/llui/llsdparam.h @@ -103,6 +103,7 @@ class LLSDParamAdapter : public T } LLSDParamAdapter(const T& val) + : T(val) { T::operator=(val); } diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index e9710c41a1..ce0bba802d 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -84,10 +84,13 @@ LLSearchHandler gSearchHandler; LLFloaterSearch::_Params::_Params() : category("category", ""), query("query") -{} +{ + trusted_content = true; + allow_address_entry = false; +} -LLFloaterSearch::LLFloaterSearch(const LLSD& key) : +LLFloaterSearch::LLFloaterSearch(const Params& key) : LLFloaterWebContent(key), mSearchGodLevel(0) { diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h index 2c59fa6d5d..a4043b2353 100644 --- a/indra/newview/llfloatersearch.h +++ b/indra/newview/llfloatersearch.h @@ -46,7 +46,7 @@ class LLFloaterSearch : public LLFloaterWebContent { public: - struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::_Params> + struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::Params> { Optional category; Optional query; @@ -56,7 +56,7 @@ public: typedef LLSDParamAdapter<_Params> Params; - LLFloaterSearch(const LLSD& key); + LLFloaterSearch(const Params& key); /// show the search floater with a new search /// see search() for details on the key parameter. diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 4cc29267da..c7c6857a47 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -45,10 +45,12 @@ LLFloaterWebContent::_Params::_Params() target("target"), id("id"), show_chrome("show_chrome", true), - preferred_media_size("preferred_media_size") + allow_address_entry("allow_address_entry", true), + preferred_media_size("preferred_media_size"), + trusted_content("trusted_content", false) {} -LLFloaterWebContent::LLFloaterWebContent( const LLSD& key ) +LLFloaterWebContent::LLFloaterWebContent( const Params& key ) : LLFloater( key ) { mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this )); @@ -218,10 +220,12 @@ void LLFloaterWebContent::open_media(const Params& p) mWebBrowser->setHomePageUrl(p.url, "text/html"); mWebBrowser->setTarget(p.target); mWebBrowser->navigateTo(p.url, "text/html"); + set_current_url(p.url); getChild("status_bar")->setVisible(p.show_chrome); getChild("nav_controls")->setVisible(p.show_chrome); + getChild("address")->setEnabled(p.allow_address_entry && !p.trusted_content); if (!p.show_chrome) { @@ -247,6 +251,7 @@ void LLFloaterWebContent::onOpen(const LLSD& key) } mUUID = params.id().asString(); + mWebBrowser->setTrustedContent(params.trusted_content); // tell the browser instance to load the specified URL open_media(params); diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index 2cb6bd0831..3a99d49b5a 100644 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -49,7 +49,9 @@ public: Optional url, target; Optional id; - Optional show_chrome; + Optional show_chrome, + allow_address_entry, + trusted_content; Optional preferred_media_size; _Params(); @@ -57,7 +59,7 @@ public: typedef LLSDParamAdapter<_Params> Params; - LLFloaterWebContent(const LLSD& key); + LLFloaterWebContent(const Params& key); void initializeURLHistory(); diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 03ccabc994..1eb786f433 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -1164,3 +1164,12 @@ void LLMediaCtrl::hideNotification() mWindowShade->hide(); } } + +void LLMediaCtrl::setTrustedContent(bool trusted) +{ + mTrusted = trusted; + if (mMediaSource) + { + mMediaSource->setTrustedBrowser(trusted); + } +} diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index 28666e620f..6833453616 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -149,6 +149,8 @@ public: void showNotification(boost::shared_ptr notify); void hideNotification(); + void setTrustedContent(bool trusted); + // over-rides virtual BOOL handleKeyHere( KEY key, MASK mask); virtual void handleVisibilityChange ( BOOL new_visibility ); @@ -176,7 +178,7 @@ public: LLViewBorder* mBorder; bool mFrequentUpdates; bool mForceUpdate; - const bool mTrusted; + bool mTrusted; std::string mHomePageUrl; std::string mHomePageMimeType; std::string mCurrentNavUrl; diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml index 69e6057556..0eda9ae62a 100644 --- a/indra/newview/skins/default/xui/en/floater_web_content.xml +++ b/indra/newview/skins/default/xui/en/floater_web_content.xml @@ -40,6 +40,7 @@ image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" + chrome="true" hover_glow_amount="0.15" tool_tip="Navigate back" follows="left|top" @@ -58,6 +59,7 @@ image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" + chrome="true" tool_tip="Navigate forward" follows="left|top" height="22" @@ -75,6 +77,7 @@ image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" + chrome="true" tool_tip="Stop navigation" enabled="true" follows="left|top" @@ -93,6 +96,7 @@ image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" + chrome="true" tool_tip="Reload page" follows="left|top" height="22" @@ -137,6 +141,7 @@ image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" + chrome="true" tool_tip="Open current URL in your desktop browser" follows="right|top" enabled="true" -- cgit v1.2.3 From d668270c13fcad8ae6e0fdfdf063a16be6083243 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Wed, 13 Jul 2011 18:24:48 -0700 Subject: EXP-880 FIX Enable navigation chrome in search floater fixed regression where preferred content size was no longer being respected --- indra/llxuixml/llinitparam.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index 35c889b69f..7c4d4c8a43 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -1775,8 +1775,8 @@ namespace LLInitParam void serializeBlock(Parser& parser, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const { - const self_t& typed_param = static_cast(*this); - const self_t* diff_param = static_cast(diff_block); + const derived_t& typed_param = static_cast(*this); + const derived_t* diff_param = static_cast(diff_block); std::string key = typed_param.getValueName(); @@ -1801,6 +1801,8 @@ namespace LLInitParam // be exported as , since it was probably the intent of the user to // be specific about the RGB color values. This also fixes an issue where we distinguish // between rect.left not being provided and rect.left being explicitly set to 0 (same as default) + const_cast(typed_param).updateBlockFromValue(); + block_t::serializeBlock(parser, name_stack, NULL); } } @@ -1863,7 +1865,7 @@ namespace LLInitParam mValueAge = VALUE_AUTHORITATIVE; mValue = val; typed_param.clearValueName(); - static_cast(const_cast(this))->updateBlockFromValue(); + static_cast(this)->updateBlockFromValue(); } value_assignment_t getValue() const -- cgit v1.2.3 From aa9564953b43596be376448c374104e24134794e Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Thu, 14 Jul 2011 10:57:23 -0700 Subject: EXP-998 Logging in with different user can remove newness for incorrect user --- indra/newview/app_settings/settings.xml | 22 ---------------------- .../newview/app_settings/settings_per_account.xml | 11 +++++++++++ indra/newview/llpanelmarketplaceinbox.cpp | 2 +- indra/newview/llpanelmarketplaceinboxinventory.cpp | 2 +- indra/newview/llsidepanelinventory.cpp | 2 +- 5 files changed, 14 insertions(+), 25 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 0bba25f5e4..142bf94395 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4446,17 +4446,6 @@ Value 2.0 - LastInventoryInboxExpand - - Comment - The last time the received items inbox was expanded. - Persist - 1 - Type - String - Value - - LCDDestination Comment @@ -13422,17 +13411,6 @@ 0 - InboxFreshnessDate - - Comment - Last time the inbox was opened - Persist - 1 - Type - String - Value - - HelpFloaterOpen Comment diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index ff24efaf2c..1142f01232 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -33,6 +33,17 @@ Value + LastInventoryInboxExpand + + Comment + The last time the received items inbox was expanded. + Persist + 1 + Type + String + Value + + LastLogoff Comment diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index 28025f58d4..6db52e8f25 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -55,7 +55,7 @@ LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p) LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox() { - gSavedSettings.setString("InboxFreshnessDate", LLDate::now().asString()); + gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString()); } // virtual diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp index 5dff73ee6a..b88a697e0c 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.cpp +++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp @@ -165,7 +165,7 @@ void LLInboxFolderViewFolder::draw() void LLInboxFolderViewFolder::updateFlag() const { - LLDate saved_freshness_date = LLDate(gSavedSettings.getString("InboxFreshnessDate")); + LLDate saved_freshness_date = LLDate(gSavedPerAccountSettings.getString("LastInventoryInboxExpand")); if (getCreationDate() > saved_freshness_date.secondsSinceEpoch()) { mFresh = true; diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 65655f82cd..bc70afa5d9 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -463,7 +463,7 @@ void LLSidepanelInventory::onToggleInboxBtn() if (inboxExpanded) { // Save current time as a setting for future new-ness tests - gSavedSettings.setString(INBOX_EXPAND_TIME_SETTING, LLDate::now().asString()); + gSavedPerAccountSettings.setString(INBOX_EXPAND_TIME_SETTING, LLDate::now().asString()); } } -- cgit v1.2.3 From e17c7e6d24d5a25e4c0544ca2bc25fbc0c29d161 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Thu, 14 Jul 2011 10:58:11 -0700 Subject: EXP-899 No user feedback given when a user attempts to delete a system folder from their inventory --- indra/newview/llinventorybridge.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 75d4c4e80d..4ed39da5cb 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2483,8 +2483,6 @@ void LLFolderBridge::staticFolderOptionsMenu() void LLFolderBridge::folderOptionsMenu() { - menuentry_vec_t disabled_items; - LLInventoryModel* model = getInventoryModel(); if(!model) return; @@ -2552,18 +2550,18 @@ void LLFolderBridge::folderOptionsMenu() mItems.push_back(std::string("Remove From Outfit")); if (!LLAppearanceMgr::getCanRemoveFromCOF(mUUID)) { - disabled_items.push_back(std::string("Remove From Outfit")); + mDisabledItems.push_back(std::string("Remove From Outfit")); } if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID)) { - disabled_items.push_back(std::string("Replace Outfit")); + mDisabledItems.push_back(std::string("Replace Outfit")); } mItems.push_back(std::string("Outfit Separator")); } LLMenuGL* menup = dynamic_cast(mMenu.get()); if (menup) { - hide_context_entries(*menup, mItems, disabled_items, TRUE); + hide_context_entries(*menup, mItems, mDisabledItems, TRUE); // Reposition the menu, in case we're adding items to an existing menu. menup->needsArrange(); -- cgit v1.2.3 From 0ab0efc3270f44da3d8b3a9db2845eeddde44dc6 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 14:00:12 -0400 Subject: Work around broken Windows command-line processing. It's wonderful that the Python interpreter will accept a whole multi-line script as a composite -c argument... but because Windows command-line processing is fundamentally flawed, we simply can't count on it for Windows. Instead, accept script text, write a temporary script file in a system- dependent temp directory, ask Python to run that script and delete the file. Also, on Windows, use _spawnl(), much simpler than adding bizarre Windows wait logic to LLProcessLauncher. Use LLProcessLauncher only on Mac & Linux, with waitpid() to capture rc. --- indra/llcommon/tests/llsdserialize_test.cpp | 93 ++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 15 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index ff0d8d5f46..4e09a4fe3c 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -31,18 +31,28 @@ #if LL_WINDOWS #include typedef U32 uint32_t; +#include #else #include #include #include +#include "llprocesslauncher.h" #endif +// As we're not trying to preserve compatibility with old Boost.Filesystem +// code, but rather writing brand-new code, use the newest available +// Filesystem API. +#define BOOST_FILESYSTEM_VERSION 3 +#include "boost/filesystem.hpp" +#include "boost/filesystem/v3/fstream.hpp" +#include "boost/range.hpp" +#include "boost/foreach.hpp" + #include "../llsd.h" #include "../llsdserialize.h" #include "../llformat.h" #include "../test/lltut.h" -#include "llprocesslauncher.h" #include "stringize.h" std::vector string_to_vector(const std::string& str) @@ -50,6 +60,51 @@ std::vector string_to_vector(const std::string& str) return std::vector(str.begin(), str.end()); } +// boost::filesystem::temp_directory_path() isn't yet in Boost 1.45! :-( +// Switch to that one as soon as we update to a Boost that contains it. +boost::filesystem::path temp_directory_path() +{ +#if LL_WINDOWS + char buffer[PATH_MAX]; + GetTempPath(sizeof(buffer), buffer); + return boost::filesystem::path(buffer); + +#else // LL_DARWIN, LL_LINUX + static const char* vars[] = { "TMPDIR", "TMP", "TEMP", "TEMPDIR" }; + BOOST_FOREACH(const char* var, vars) + { + const char* found = getenv(var); + if (found) + return boost::filesystem::path(found); + } + return boost::filesystem::path("/tmp"); +#endif // LL_DARWIN, LL_LINUX +} + +// Create a Python script file with specified content "somewhere in the +// filesystem," cleaning up when it goes out of scope. +class NamedTempScript +{ +public: + NamedTempScript(const std::string& content): + mPath(/*boost::filesystem*/::temp_directory_path() / + boost::filesystem::unique_path("%%%%-%%%%-%%%%-%%%%.py")) + { + boost::filesystem::ofstream file(mPath); + file << content << '\n'; + } + + ~NamedTempScript() + { + boost::filesystem::remove(mPath); + } + + std::string getName() const { return mPath.native(); } + +private: + boost::filesystem::path mPath; +}; + namespace tut { struct sd_xml_data @@ -1496,26 +1551,34 @@ namespace tut TestPythonCompatible() {} ~TestPythonCompatible() {} - void python(const std::string& desc, const std::string& script, F32 timeout=5) + void python(const std::string& desc, const std::string& script /*, F32 timeout=5 */) { const char* PYTHON(getenv("PYTHON")); ensure("Set $PYTHON to the Python interpreter", PYTHON); + + NamedTempScript scriptfile(script); + +#if LL_WINDOWS + std::string q("\""); + std::string qPYTHON(q + PYTHON + q); + std::string qscript(q + scriptfile.getName() + q); + int rc(_spawnl(_P_WAIT, PYTHON, qPYTHON.c_str(), qscript.c_str(), NULL)); + if (rc == -1) + { + char buffer[256]; + strerror_s(buffer, errno); // C++ can infer the buffer size! :-O + ensure(STRINGIZE("Couldn't run Python " << desc << "script: " << buffer), false); + } + else + { + ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, 0); + } + +#else // LL_DARWIN, LL_LINUX LLProcessLauncher py; py.setExecutable(PYTHON); - py.addArgument("-c"); - py.addArgument(script); + py.addArgument(scriptfile.getName()); ensure_equals(STRINGIZE("Couldn't launch " << desc << " script"), py.launch(), 0); - -#if LL_WINDOWS - ensure_equals(STRINGIZE(desc << " script ran beyond " - << std::fixed << std::setprecision(1) - << timeout << " seconds"), - WaitForSingleObject(py.getProcessHandle(), DWORD(timeout * 1000)), - WAIT_OBJECT_0); - DWORD rc(0); - GetExitCodeProcess(py.getProcessHandle(), &rc); - ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, 0); -#else // Implementing timeout would mean messing with alarm() and // catching SIGALRM... later maybe... int status(0); -- cgit v1.2.3 From 3ddaf95c5c0dc35f0efa91860f9642d4cdf26559 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 14:01:45 -0400 Subject: New llsdserialize_test logic needs Boost.Filesystem library. That, in turn, needs Boost.System library. --- indra/llcommon/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index c755020a64..09a05689f4 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -317,7 +317,8 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(lllazy "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llprocessor "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}" + LL_ADD_INTEGRATION_TEST(llsdserialize "" + "${test_libs};${BOOST_FILESYSTEM_LIBRARY};${BOOST_SYSTEM_LIBRARY}" "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/setpython.py") LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}") -- cgit v1.2.3 From 4c465f496f602860f5044bded01fde8883083e70 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 15:08:25 -0400 Subject: Eliminate use of PATH_MAX, which is bogus anyway. --- indra/llcommon/tests/llsdserialize_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 4e09a4fe3c..687c64dfeb 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -65,7 +65,7 @@ std::vector string_to_vector(const std::string& str) boost::filesystem::path temp_directory_path() { #if LL_WINDOWS - char buffer[PATH_MAX]; + char buffer[4096]; GetTempPath(sizeof(buffer), buffer); return boost::filesystem::path(buffer); -- cgit v1.2.3 From 24508cc924938d2a8752496b9752b7c4d934dd77 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 15:27:36 -0400 Subject: Attempt to fix minor build errors on Windows. --- indra/llcommon/tests/llsdserialize_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 687c64dfeb..e0a7835550 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -66,7 +66,7 @@ boost::filesystem::path temp_directory_path() { #if LL_WINDOWS char buffer[4096]; - GetTempPath(sizeof(buffer), buffer); + GetTempPathA(sizeof(buffer), buffer); return boost::filesystem::path(buffer); #else // LL_DARWIN, LL_LINUX @@ -99,7 +99,7 @@ public: boost::filesystem::remove(mPath); } - std::string getName() const { return mPath.native(); } + std::string getName() const { return mPath.string(); } private: boost::filesystem::path mPath; -- cgit v1.2.3 From c4c0a057c24c184235a2dffa3e469bbe6e14d5f6 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Thu, 14 Jul 2011 12:27:55 -0700 Subject: turning on newness --- indra/newview/llpanelmarketplaceinboxinventory.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index 8946b9dc98..d2d42e11f4 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -33,7 +33,7 @@ #include "llfolderviewitem.h" -#define SUPPORTING_FRESH_ITEM_COUNT 0 +#define SUPPORTING_FRESH_ITEM_COUNT 1 -- cgit v1.2.3 From 624c3f1a8e503a3a577b81e06b0ae3344e8ede17 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 16:24:31 -0400 Subject: Use Linden wstring-to-string conversion, not boost::filesystem's. On Windows, calling boost::filesystem::path::string() implicitly requests code conversion between std::wstring (the boost::filesystem::path::string_type selected on Windows) and std::string. At least for integration-test program, that produces link errors. Use Linden's wstring_to_utf8str() instead. --- indra/llcommon/tests/llsdserialize_test.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index e0a7835550..93261fa306 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -54,6 +54,7 @@ typedef U32 uint32_t; #include "../test/lltut.h" #include "stringize.h" +#include "llstring.h" std::vector string_to_vector(const std::string& str) { @@ -81,6 +82,28 @@ boost::filesystem::path temp_directory_path() #endif // LL_DARWIN, LL_LINUX } +// We want a std::string from a boost::filesystem::path::native() call. While +// there is a boost::filesystem::path::string() call as well, invoking that +// (at least in this test-program context) produces unresolved externals for +// boost::filesystem::path conversion machinery even though we can resolve +// other boost::filesystem symbols. Possibly those conversion routines aren't +// being built for Linden's Boost package. But that's okay, llstring.h +// provides conversion machinery we can use instead. +// On Posix platforms, boost::filesystem::path::native() returns std::string. +inline +std::string native_to_string(const std::string& in) +{ + return in; +} + +// On Windows, though, boost::filesystem::path::native() returns std::wstring. +// Make sure the right conversion happens. +inline +std::string native_to_string(const std::wstring& in) +{ + return wstring_to_utf8str(in); +} + // Create a Python script file with specified content "somewhere in the // filesystem," cleaning up when it goes out of scope. class NamedTempScript @@ -99,7 +122,7 @@ public: boost::filesystem::remove(mPath); } - std::string getName() const { return mPath.string(); } + std::string getName() const { return native_to_string(mPath.native()); } private: boost::filesystem::path mPath; -- cgit v1.2.3 From aad5943ab05cd5689b2898174c085fe9d5f69345 Mon Sep 17 00:00:00 2001 From: Seth ProductEngine Date: Thu, 14 Jul 2011 23:46:27 +0300 Subject: STORM-1234 FIXED text editor selection which was skipping the last character in line. Added handling of the wrapped lines case when calculating the starting position for selection. The bug is a regression caused by the fix of STORM-320 which was dealing with calculating the position of the input cursor while navigating through the lines of text with word wrapping enabled. --- indra/llui/lltextbase.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 349dbc3405..919364be63 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2024,8 +2024,17 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round, } else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd) { - // segment wraps to next line, so just set doc pos to the end of the line - pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength()); + if (getLineNumFromDocIndex(line_iter->mDocIndexEnd - 1) == line_iter->mLineNum) + { + // if segment wraps to the next line we should step one char back + // to compensate for the space char between words + // which is removed due to wrapping + pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength()); + } + else + { + pos = llclamp(line_iter->mDocIndexEnd, 0, getLength()); + } break; } start_x += text_width; -- cgit v1.2.3 From 8ca0f872f2f3cd026788c3ea28c3a00f5d407033 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 17:12:02 -0400 Subject: wstring_to_utf8str() accepts LLWString rather than std::wstring. --- indra/llcommon/tests/llsdserialize_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 93261fa306..e61e6b9460 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -101,7 +101,8 @@ std::string native_to_string(const std::string& in) inline std::string native_to_string(const std::wstring& in) { - return wstring_to_utf8str(in); + // So actually, wstring_to_utf8str() accepts LLWString rather than std::wstring... + return wstring_to_utf8str(LLWString(in.begin(), in.end())); } // Create a Python script file with specified content "somewhere in the -- cgit v1.2.3 From 892ca49503884daf26cff671047409ced4386547 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Thu, 14 Jul 2011 15:05:07 -0700 Subject: EXP-1001 Newness is removed on next login if you log out or crash before opening inventory panel EXP-1002 Single order purchase does not open Received Items panel by default if Inventory panel open when delivered --- indra/newview/llpanelmarketplaceinbox.cpp | 5 ++++- indra/newview/llsidepanelinventory.cpp | 12 +++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index 771b9c2f8f..c505ad85a3 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -53,7 +53,10 @@ LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p) LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox() { - gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString()); + if (getChild("inbox_btn")->getToggleState()) + { + gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString()); + } } // virtual diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index bc70afa5d9..a0d1247b34 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -61,8 +61,6 @@ static LLRegisterPanelClassWrapper t_inventory("sidepanel_ // Constants // -static const char * const INBOX_EXPAND_TIME_SETTING = "LastInventoryInboxExpand"; - static const char * const INBOX_BUTTON_NAME = "inbox_btn"; static const char * const OUTBOX_BUTTON_NAME = "outbox_btn"; @@ -404,7 +402,7 @@ void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id) // Expand the inbox since we have fresh items LLPanelMarketplaceInbox * inbox = findChild(MARKETPLACE_INBOX_PANEL); - if (inbox && (inbox->getFreshItemCount() > 0)) + if (inbox) { getChild(INBOX_BUTTON_NAME)->setToggleState(true); onToggleInboxBtn(); @@ -459,12 +457,8 @@ void LLSidepanelInventory::onToggleInboxBtn() LLLayoutPanel* otherPanel = getChild(OUTBOX_LAYOUT_PANEL_NAME); bool inboxExpanded = manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel); - - if (inboxExpanded) - { - // Save current time as a setting for future new-ness tests - gSavedPerAccountSettings.setString(INBOX_EXPAND_TIME_SETTING, LLDate::now().asString()); - } + + gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString()); } void LLSidepanelInventory::onToggleOutboxBtn() -- cgit v1.2.3 From 5f37ec3c712221765bbb42e3428975e9b1402c9c Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 19:07:13 -0400 Subject: Avoid Boost.Filesystem: Boost package improperly built on Windows? Seems Linden's Boost package and the viewer build might use different settings of the /Zc:wchar_t switch. Anyway, this implementation using open(O_CREAT | O_EXCL) should be more robust. I'm surprised Boost.Filesystem doesn't seem to offer "create a unique file"; all I found was "generate a random filename fairly likely to be unique." --- indra/llcommon/tests/llsdserialize_test.cpp | 112 +++++++++++++++++++--------- 1 file changed, 77 insertions(+), 35 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index e61e6b9460..ec0cacfe90 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -33,18 +33,34 @@ typedef U32 uint32_t; #include #else +#include #include #include +#include #include +#include #include "llprocesslauncher.h" #endif +/*==========================================================================*| +// Whoops, seems Linden's Boost package and the viewer are built with +// different settings of VC's /Zc:wchar_t switch! Using Boost.Filesystem +// pathname operations produces Windows link errors: +// unresolved external symbol "private: static class std::codecvt const * & __cdecl boost::filesystem3::path::wchar_t_codecvt_facet()" +// unresolved external symbol "void __cdecl boost::filesystem3::path_traits::convert()" +// See: +// http://boost.2283326.n4.nabble.com/filesystem-v3-unicode-and-std-codecvt-linker-error-td3455549.html +// which points to: +// http://msdn.microsoft.com/en-us/library/dh8che7s%28v=VS.100%29.aspx + // As we're not trying to preserve compatibility with old Boost.Filesystem // code, but rather writing brand-new code, use the newest available // Filesystem API. #define BOOST_FILESYSTEM_VERSION 3 #include "boost/filesystem.hpp" #include "boost/filesystem/v3/fstream.hpp" +|*==========================================================================*/ #include "boost/range.hpp" #include "boost/foreach.hpp" @@ -54,7 +70,6 @@ typedef U32 uint32_t; #include "../test/lltut.h" #include "stringize.h" -#include "llstring.h" std::vector string_to_vector(const std::string& str) { @@ -62,13 +77,12 @@ std::vector string_to_vector(const std::string& str) } // boost::filesystem::temp_directory_path() isn't yet in Boost 1.45! :-( -// Switch to that one as soon as we update to a Boost that contains it. -boost::filesystem::path temp_directory_path() +std::string temp_directory_path() { #if LL_WINDOWS char buffer[4096]; GetTempPathA(sizeof(buffer), buffer); - return boost::filesystem::path(buffer); + return buffer; #else // LL_DARWIN, LL_LINUX static const char* vars[] = { "TMPDIR", "TMP", "TEMP", "TEMPDIR" }; @@ -76,34 +90,28 @@ boost::filesystem::path temp_directory_path() { const char* found = getenv(var); if (found) - return boost::filesystem::path(found); + return found; } - return boost::filesystem::path("/tmp"); + return "/tmp"; #endif // LL_DARWIN, LL_LINUX } -// We want a std::string from a boost::filesystem::path::native() call. While -// there is a boost::filesystem::path::string() call as well, invoking that -// (at least in this test-program context) produces unresolved externals for -// boost::filesystem::path conversion machinery even though we can resolve -// other boost::filesystem symbols. Possibly those conversion routines aren't -// being built for Linden's Boost package. But that's okay, llstring.h -// provides conversion machinery we can use instead. -// On Posix platforms, boost::filesystem::path::native() returns std::string. -inline -std::string native_to_string(const std::string& in) -{ - return in; -} - -// On Windows, though, boost::filesystem::path::native() returns std::wstring. -// Make sure the right conversion happens. -inline -std::string native_to_string(const std::wstring& in) -{ - // So actually, wstring_to_utf8str() accepts LLWString rather than std::wstring... - return wstring_to_utf8str(LLWString(in.begin(), in.end())); -} +// Windows presents a kinda sorta compatibility layer. Code to the yucky +// Windows names because they're less likely than the Posix names to collide +// with any other names in this source. +#if LL_WINDOWS +#define _remove DeleteFile +#else // ! LL_WINDOWS +#define _open open +#define _write write +#define _close close +#define _remove remove +#define _O_WRONLY O_WRONLY +#define _O_CREAT O_CREAT +#define _O_EXCL O_EXCL +#define _S_IWRITE S_IWUSR +#define _S_IREAD S_IRUSR +#endif // ! LL_WINDOWS // Create a Python script file with specified content "somewhere in the // filesystem," cleaning up when it goes out of scope. @@ -111,22 +119,56 @@ class NamedTempScript { public: NamedTempScript(const std::string& content): - mPath(/*boost::filesystem*/::temp_directory_path() / - boost::filesystem::unique_path("%%%%-%%%%-%%%%-%%%%.py")) + mPath(temp_directory_path()) { - boost::filesystem::ofstream file(mPath); - file << content << '\n'; + // Make sure mPath ends with a directory separator, if it doesn't already. + if (mPath.empty() || + ! (mPath[mPath.length() - 1] == '\\' || mPath[mPath.length() - 1] == '/')) + { + mPath.append("/"); + } + + // Open a file with a unique name in the mPath directory. + int fd(-1); + for (int i(0);; ++i) + { + // Append an integer name to mPath. It need not be zero-filled, + // but I think it's neater that way. + std::string testname(STRINGIZE(mPath + << std::setw(8) << std::setfill('0') << i + << ".py")); + // The key to this whole loop is the _O_CREAT | _O_EXCL bitmask, + // which requests an error if the file already exists. A proper + // implementation will check atomically, ensuring that racing + // processes will end up with two different filenames. + fd = _open(testname.c_str(), + _O_WRONLY | _O_CREAT | _O_EXCL, + _S_IREAD | _S_IWRITE); + if (fd != -1) // managed to open the file + { + mPath = testname; // remember its actual name + break; + } + // it's a problem if the open() failed for any other reason but + // the existence of a file by the same name + assert(errno == EEXIST); + // loop back to try another filename + } + // File is open, its name is in mPath: write it and close it. + _write(fd, content.c_str(), content.length()); + _write(fd, "\n", 1); + _close(fd); } ~NamedTempScript() { - boost::filesystem::remove(mPath); + _remove(mPath.c_str()); } - std::string getName() const { return native_to_string(mPath.native()); } + std::string getName() const { return mPath; } private: - boost::filesystem::path mPath; + std::string mPath; }; namespace tut -- cgit v1.2.3 From 9f66409b88481ca4ded5b9bb9d81e5977a43a5af Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 19:39:32 -0400 Subject: #include correct headers for Windows _open() et al. Also mollify Linux build, which gets alarmed when you implicitly ignore write()'s return value. Ignore it explicitly. --- indra/llcommon/tests/llsdserialize_test.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index ec0cacfe90..025870c915 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -32,16 +32,18 @@ #include typedef U32 uint32_t; #include +#include #else #include #include #include -#include #include -#include #include "llprocesslauncher.h" #endif +#include +#include + /*==========================================================================*| // Whoops, seems Linden's Boost package and the viewer are built with // different settings of VC's /Zc:wchar_t switch! Using Boost.Filesystem @@ -100,7 +102,7 @@ std::string temp_directory_path() // Windows names because they're less likely than the Posix names to collide // with any other names in this source. #if LL_WINDOWS -#define _remove DeleteFile +#define _remove DeleteFileA #else // ! LL_WINDOWS #define _open open #define _write write @@ -155,8 +157,8 @@ public: // loop back to try another filename } // File is open, its name is in mPath: write it and close it. - _write(fd, content.c_str(), content.length()); - _write(fd, "\n", 1); + (void)_write(fd, content.c_str(), content.length()); + (void)_write(fd, "\n", 1); _close(fd); } -- cgit v1.2.3 From 1f58cd688f44fed6da91af5cac0d48166c2647d0 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 14 Jul 2011 20:20:35 -0400 Subject: Pacify Linux gcc more thoroughly. --- indra/llcommon/tests/llsdserialize_test.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 025870c915..41d2fcc696 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -157,8 +157,12 @@ public: // loop back to try another filename } // File is open, its name is in mPath: write it and close it. - (void)_write(fd, content.c_str(), content.length()); - (void)_write(fd, "\n", 1); + // Truthfully, we'd just as soon ignore the return value from + // _write(), but Linux gcc generates fatal warnings if we do. + bool ok(true); + ok = ok && (content.length() == _write(fd, content.c_str(), content.length())); + ok = ok && (1 == _write(fd, "\n", 1)); + assert(ok); _close(fd); } -- cgit v1.2.3 From 7dd8dc8be61ec40e33c40b9b37b8f45335df25c4 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 14 Jul 2011 20:57:32 -0700 Subject: EXP-880 FIX Enable navigation chrome in search floater fixed regression where profile window wasn't using requested size --- indra/llui/llui.cpp | 54 ++++++++++++++++++------------------ indra/llui/llui.h | 8 +++--- indra/llui/lluiimage.cpp | 6 ++-- indra/llui/lluiimage.h | 4 +-- indra/llui/tests/llurlentry_stub.cpp | 6 ++-- indra/llui/tests/llurlmatch_test.cpp | 6 ++-- indra/llxuixml/llinitparam.h | 39 ++++++++++++++------------ 7 files changed, 64 insertions(+), 59 deletions(-) diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 8020ca802b..bc2432f6f7 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -2082,7 +2082,7 @@ namespace LLInitParam alpha("alpha"), control("") { - updateBlockFromValue(); + updateBlockFromValue(false); } void ParamValue >::updateValueFromBlock() @@ -2097,14 +2097,14 @@ namespace LLInitParam } } - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool make_block_authoritative) { LLColor4 color = getValue(); - red.set(color.mV[VRED], false); - green.set(color.mV[VGREEN], false); - blue.set(color.mV[VBLUE], false); - alpha.set(color.mV[VALPHA], false); - control.set("", false); + red.set(color.mV[VRED], make_block_authoritative); + green.set(color.mV[VGREEN], make_block_authoritative); + blue.set(color.mV[VBLUE], make_block_authoritative); + alpha.set(color.mV[VALPHA], make_block_authoritative); + control.set("", make_block_authoritative); } bool ParamCompare::equals(const LLFontGL* a, const LLFontGL* b) @@ -2124,7 +2124,7 @@ namespace LLInitParam updateValue(LLFontGL::getFontDefault()); } addSynonym(name, ""); - updateBlockFromValue(); + updateBlockFromValue(false); } void ParamValue >::updateValueFromBlock() @@ -2150,13 +2150,13 @@ namespace LLInitParam } } - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool make_block_authoritative) { if (getValue()) { - name.set(LLFontGL::nameFromFont(getValue()), false); - size.set(LLFontGL::sizeFromFont(getValue()), false); - style.set(LLFontGL::getStringFromStyle(getValue()->getFontDesc().getStyle()), false); + name.set(LLFontGL::nameFromFont(getValue()), make_block_authoritative); + size.set(LLFontGL::sizeFromFont(getValue()), make_block_authoritative); + style.set(LLFontGL::getStringFromStyle(getValue()->getFontDesc().getStyle()), make_block_authoritative); } } @@ -2169,7 +2169,7 @@ namespace LLInitParam width("width"), height("height") { - updateBlockFromValue(); + updateBlockFromValue(false); } void ParamValue >::updateValueFromBlock() @@ -2236,19 +2236,19 @@ namespace LLInitParam updateValue(rect); } - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool make_block_authoritative) { // because of the ambiguity in specifying a rect by position and/or dimensions - // we clear the "provided" flag so that values from xui/etc have priority - // over those calculated from the rect object - + // we use the lowest priority pairing so that any valid pairing in xui + // will override those calculated from the rect object + // in this case, that is left+width and bottom+height LLRect& value = getValue(); - left.set(value.mLeft, false); - right.set(value.mRight, false); - bottom.set(value.mBottom, false); - top.set(value.mTop, false); - width.set(value.getWidth(), false); - height.set(value.getHeight(), false); + + left.set(value.mLeft, make_block_authoritative); + width.set(value.getWidth(), make_block_authoritative); + + bottom.set(value.mBottom, make_block_authoritative); + height.set(value.getHeight(), make_block_authoritative); } ParamValue >::ParamValue(const LLCoordGL& coord) @@ -2256,7 +2256,7 @@ namespace LLInitParam x("x"), y("y") { - updateBlockFromValue(); + updateBlockFromValue(false); } void ParamValue >::updateValueFromBlock() @@ -2264,10 +2264,10 @@ namespace LLInitParam updateValue(LLCoordGL(x, y)); } - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool make_block_authoritative) { - x.set(getValue().mX, false); - y.set(getValue().mY, false); + x.set(getValue().mX, make_block_authoritative); + y.set(getValue().mY, make_block_authoritative); } diff --git a/indra/llui/llui.h b/indra/llui/llui.h index c583d58d5a..4e622033b3 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -408,7 +408,7 @@ namespace LLInitParam ParamValue(const LLRect& value); void updateValueFromBlock(); - void updateBlockFromValue(); + void updateBlockFromValue(bool make_block_authoritative); }; template<> @@ -426,7 +426,7 @@ namespace LLInitParam ParamValue(const LLUIColor& color); void updateValueFromBlock(); - void updateBlockFromValue(); + void updateBlockFromValue(bool make_block_authoritative); }; template<> @@ -441,7 +441,7 @@ namespace LLInitParam ParamValue(const LLFontGL* value); void updateValueFromBlock(); - void updateBlockFromValue(); + void updateBlockFromValue(bool make_block_authoritative); }; template<> @@ -480,7 +480,7 @@ namespace LLInitParam ParamValue(const LLCoordGL& val); void updateValueFromBlock(); - void updateBlockFromValue(); + void updateBlockFromValue(bool make_block_authoritative); }; } diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp index f37947a50b..1d9ce29ba9 100644 --- a/indra/llui/lluiimage.cpp +++ b/indra/llui/lluiimage.cpp @@ -172,15 +172,15 @@ namespace LLInitParam } } - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool make_block_authoritative) { if (getValue() == NULL) { - name.set("none", false); + name.set("none", make_block_authoritative); } else { - name.set(getValue()->getName(), false); + name.set(getValue()->getName(), make_block_authoritative); } } diff --git a/indra/llui/lluiimage.h b/indra/llui/lluiimage.h index 139d88e0ac..f07e8fa746 100644 --- a/indra/llui/lluiimage.h +++ b/indra/llui/lluiimage.h @@ -103,12 +103,12 @@ namespace LLInitParam ParamValue(LLUIImage* const& image) : super_t(image) { - updateBlockFromValue(); + updateBlockFromValue(false); addSynonym(name, "name"); } void updateValueFromBlock(); - void updateBlockFromValue(); + void updateBlockFromValue(bool make_block_authoritative); }; // Need custom comparison function for our test app, which only loads diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp index 26b3b17577..d522123260 100644 --- a/indra/llui/tests/llurlentry_stub.cpp +++ b/indra/llui/tests/llurlentry_stub.cpp @@ -137,7 +137,7 @@ namespace LLInitParam void ParamValue >::updateValueFromBlock() {} - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool) {} bool ParamCompare::equals(const LLFontGL* a, const LLFontGL* b) @@ -152,7 +152,7 @@ namespace LLInitParam void ParamValue >::updateValueFromBlock() {} - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool) {} void TypeValues::declareValues() @@ -167,7 +167,7 @@ namespace LLInitParam void ParamValue >::updateValueFromBlock() {} - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool) {} diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp index 3cd61e574e..fb6a2eabf1 100644 --- a/indra/llui/tests/llurlmatch_test.cpp +++ b/indra/llui/tests/llurlmatch_test.cpp @@ -111,7 +111,7 @@ namespace LLInitParam void ParamValue >::updateValueFromBlock() {} - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool) {} bool ParamCompare::equals(const LLFontGL* a, const LLFontGL* b) @@ -127,7 +127,7 @@ namespace LLInitParam void ParamValue >::updateValueFromBlock() {} - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool) {} void TypeValues::declareValues() @@ -142,7 +142,7 @@ namespace LLInitParam void ParamValue >::updateValueFromBlock() {} - void ParamValue >::updateBlockFromValue() + void ParamValue >::updateBlockFromValue(bool) {} bool ParamCompare::equals( diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index 7c4d4c8a43..194ef8af6a 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -740,7 +740,6 @@ namespace LLInitParam if (src_typed_param.isProvided() && (overwrite || !dst_typed_param.isProvided())) { - dst_typed_param.clearValueName(); dst_typed_param.set(src_typed_param.getValue()); return true; } @@ -1744,33 +1743,29 @@ namespace LLInitParam : mValue(value), mValueAge(VALUE_AUTHORITATIVE), mKeyVersion(0), - mValidatedVersion(-1) + mValidatedVersion(-1), + mValidated(false) {} bool deserializeBlock(Parser& parser, Parser::name_stack_range_t name_stack, S32 generation) { derived_t& typed_param = static_cast(*this); - // type to apply parse direct value T + // try to parse direct value T if (name_stack.first == name_stack.second) { if(parser.readValue(typed_param.mValue)) { - typed_param.clearValueName(); typed_param.mValueAge = VALUE_AUTHORITATIVE; - typed_param.updateBlockFromValue(); + typed_param.updateBlockFromValue(false); + + typed_param.clearValueName(); return true; } } // fall back on parsing block components for T - // if we deserialized at least one component... - if (typed_param.BaseBlock::deserializeBlock(parser, name_stack, generation)) - { - return true; - } - - return false; + return typed_param.BaseBlock::deserializeBlock(parser, name_stack, generation); } void serializeBlock(Parser& parser, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const @@ -1801,9 +1796,20 @@ namespace LLInitParam // be exported as , since it was probably the intent of the user to // be specific about the RGB color values. This also fixes an issue where we distinguish // between rect.left not being provided and rect.left being explicitly set to 0 (same as default) - const_cast(typed_param).updateBlockFromValue(); - block_t::serializeBlock(parser, name_stack, NULL); + if (typed_param.mValueAge == VALUE_AUTHORITATIVE) + { + // if the value is authoritative but the parser doesn't accept the value type + // go ahead and make a copy, and splat the value out to its component params + // and serialize those params + derived_t copy(typed_param); + copy.updateBlockFromValue(true); + copy.block_t::serializeBlock(parser, name_stack, NULL); + } + else + { + block_t::serializeBlock(parser, name_stack, NULL); + } } } } @@ -1852,7 +1858,7 @@ namespace LLInitParam { BaseBlock::paramChanged(changed_param, user_provided); if (user_provided) - { + { // a parameter changed, so our value is out of date mValueAge = VALUE_NEEDS_UPDATE; } @@ -1865,7 +1871,7 @@ namespace LLInitParam mValueAge = VALUE_AUTHORITATIVE; mValue = val; typed_param.clearValueName(); - static_cast(this)->updateBlockFromValue(); + static_cast(this)->updateBlockFromValue(false); } value_assignment_t getValue() const @@ -1920,7 +1926,6 @@ namespace LLInitParam mutable bool mValidated; // lazy validation flag private: - mutable T mValue; mutable EValueAge mValueAge; }; -- cgit v1.2.3 From e3b5d9fc5c638beff4eed25a366dc5cc1c0478b1 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 10:48:46 -0400 Subject: Change NamedTempScript to NamedTempFile; allow streaming to it. The only thing about NamedTempScript that was specific to script files was the hardcoded ".py" extension. Renaming it to NamedTempFile with an explicit extension argument addresses that. Allow constructing NamedTempFile with either a std::string, as before, or an expression of the form (lambda::_1 << some << stuff). If Linden's Boost package included the Boost.Iostreams lib, we could even stream such an expression directly to an ostream constructed around the fd. But oh well. --- indra/llcommon/tests/llsdserialize_test.cpp | 102 ++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 41d2fcc696..8b59e99b24 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -43,6 +43,7 @@ typedef U32 uint32_t; #include #include +#include /*==========================================================================*| // Whoops, seems Linden's Boost package and the viewer are built with @@ -65,6 +66,14 @@ typedef U32 uint32_t; |*==========================================================================*/ #include "boost/range.hpp" #include "boost/foreach.hpp" +#include "boost/function.hpp" +#include "boost/lambda/lambda.hpp" +namespace lambda = boost::lambda; +/*==========================================================================*| +// Aaaarrgh, Linden's Boost package doesn't even include Boost.Iostreams! +#include "boost/iostreams/stream.hpp" +#include "boost/iostreams/device/file_descriptor.hpp" +|*==========================================================================*/ #include "../llsd.h" #include "../llsdserialize.h" @@ -115,13 +124,37 @@ std::string temp_directory_path() #define _S_IREAD S_IRUSR #endif // ! LL_WINDOWS -// Create a Python script file with specified content "somewhere in the +// Create a text file with specified content "somewhere in the // filesystem," cleaning up when it goes out of scope. -class NamedTempScript +class NamedTempFile { public: - NamedTempScript(const std::string& content): + // Function that accepts an ostream ref and (presumably) writes stuff to + // it, e.g.: + // (lambda::_1 << "the value is " << 17 << '\n') + typedef boost::function Streamer; + + NamedTempFile(const std::string& ext, const std::string& content): + mPath(temp_directory_path()) + { + createFile(ext, lambda::_1 << content); + } + + NamedTempFile(const std::string& ext, const Streamer& func): mPath(temp_directory_path()) + { + createFile(ext, func); + } + + ~NamedTempFile() + { + _remove(mPath.c_str()); + } + + std::string getName() const { return mPath; } + +private: + void createFile(const std::string& ext, const Streamer& func) { // Make sure mPath ends with a directory separator, if it doesn't already. if (mPath.empty() || @@ -138,11 +171,11 @@ public: // but I think it's neater that way. std::string testname(STRINGIZE(mPath << std::setw(8) << std::setfill('0') << i - << ".py")); + << ext)); // The key to this whole loop is the _O_CREAT | _O_EXCL bitmask, - // which requests an error if the file already exists. A proper - // implementation will check atomically, ensuring that racing - // processes will end up with two different filenames. + // which requests error EEXIST if the file already exists. A + // proper implementation will check atomically, ensuring that + // racing processes will end up with two different filenames. fd = _open(testname.c_str(), _O_WRONLY | _O_CREAT | _O_EXCL, _S_IREAD | _S_IWRITE); @@ -151,29 +184,40 @@ public: mPath = testname; // remember its actual name break; } - // it's a problem if the open() failed for any other reason but - // the existence of a file by the same name - assert(errno == EEXIST); + // This loop is specifically coded to handle EEXIST. Any other + // error is a problem. + llassert_always(errno == EEXIST); // loop back to try another filename } - // File is open, its name is in mPath: write it and close it. - // Truthfully, we'd just as soon ignore the return value from - // _write(), but Linux gcc generates fatal warnings if we do. - bool ok(true); - ok = ok && (content.length() == _write(fd, content.c_str(), content.length())); - ok = ok && (1 == _write(fd, "\n", 1)); - assert(ok); - _close(fd); + // fd is open, its name is in mPath: write it and close it. + +/*==========================================================================*| + // Define an ostream on the open fd. Tell it to close fd on destruction. + boost::iostreams::stream + out(fd, boost::iostreams::close_handle); +|*==========================================================================*/ + std::ostringstream out; + // Stream stuff to it. + func(out); + // toss in a final newline for good measure + out << '\n'; + + std::string data(out.str()); + int written(_write(fd, data.c_str(), data.length())); + int closed(_close(fd)); + llassert_always(written == data.length() && closed == 0); } - ~NamedTempScript() + void peep() { - _remove(mPath.c_str()); + std::cout << "File '" << mPath << "' contains:\n"; + std::ifstream reader(mPath.c_str()); + std::string line; + while (std::getline(reader, line)) + std::cout << line << '\n'; + std::cout << "---\n"; } - std::string getName() const { return mPath; } - -private: std::string mPath; }; @@ -1628,7 +1672,7 @@ namespace tut const char* PYTHON(getenv("PYTHON")); ensure("Set $PYTHON to the Python interpreter", PYTHON); - NamedTempScript scriptfile(script); + NamedTempFile scriptfile(".py", script); #if LL_WINDOWS std::string q("\""); @@ -1690,14 +1734,18 @@ namespace tut template<> template<> void TestPythonCompatibleObject::test<1>() { - python("hello", "print 'Hello, world!'"); + set_test_name("verify python()"); + python("hello", + "import sys\n" + "sys.exit(0)"); } template<> template<> void TestPythonCompatibleObject::test<2>() { + set_test_name("verify NamedTempFile"); python("platform", -"import sys\n" -"print 'Running on', sys.platform"); + "import sys\n" + "print 'Running on', sys.platform"); } } -- cgit v1.2.3 From c33cf379f25e9a1a3780a73805749616fa07de66 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 11:53:05 -0400 Subject: Add test to verify C++-to-Python LLSD notation sequence. Write a sequence of LLSDSerialize::toNotation() calls separated by newlines to a data file, then read lines and parse using llbase.llsd.parse(). Verify that this produces expected data even when one item is a string containing newlines. Generalize python() helper function to allow using any of the NamedTempFile constructor forms. Allow specifying expected Python rc (default 0) and use this to verify an intentional sys.exit(17). This is better than previous sys.exit(0) test because when, at one point, NamedTempFile failed to write file data, running Python on an empty script file still terminates with rc 0. A nonzero rc verifies that we've written the file, that Python is running it and that we're retrieving its rc. --- indra/llcommon/tests/llsdserialize_test.cpp | 65 +++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 8b59e99b24..aaf3740b07 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -68,6 +68,7 @@ typedef U32 uint32_t; #include "boost/foreach.hpp" #include "boost/function.hpp" #include "boost/lambda/lambda.hpp" +#include "boost/lambda/bind.hpp" namespace lambda = boost::lambda; /*==========================================================================*| // Aaaarrgh, Linden's Boost package doesn't even include Boost.Iostreams! @@ -77,6 +78,7 @@ namespace lambda = boost::lambda; #include "../llsd.h" #include "../llsdserialize.h" +#include "llsdutil.h" #include "../llformat.h" #include "../test/lltut.h" @@ -140,6 +142,13 @@ public: createFile(ext, lambda::_1 << content); } + // Disambiguate when passing string literal + NamedTempFile(const std::string& ext, const char* content): + mPath(temp_directory_path()) + { + createFile(ext, lambda::_1 << content); + } + NamedTempFile(const std::string& ext, const Streamer& func): mPath(temp_directory_path()) { @@ -1667,7 +1676,8 @@ namespace tut TestPythonCompatible() {} ~TestPythonCompatible() {} - void python(const std::string& desc, const std::string& script /*, F32 timeout=5 */) + template + void python(const std::string& desc, const CONTENT& script, int expect=0) { const char* PYTHON(getenv("PYTHON")); ensure("Set $PYTHON to the Python interpreter", PYTHON); @@ -1687,7 +1697,7 @@ namespace tut } else { - ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, 0); + ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, expect); } #else // LL_DARWIN, LL_LINUX @@ -1710,7 +1720,8 @@ namespace tut if (WIFEXITED(status)) { int rc(WEXITSTATUS(status)); - ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, 0); + ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), + rc, expect); } else if (WIFSIGNALED(status)) { @@ -1737,7 +1748,8 @@ namespace tut set_test_name("verify python()"); python("hello", "import sys\n" - "sys.exit(0)"); + "sys.exit(17)", + 17); // expect nonzero rc } template<> template<> @@ -1748,4 +1760,49 @@ namespace tut "import sys\n" "print 'Running on', sys.platform"); } + + template<> template<> + void TestPythonCompatibleObject::test<3>() + { + set_test_name("verify sequence to Python"); + + LLSD cdata(LLSDArray(17)(3.14) + ("This string\n" + "has several\n" + "lines.")); + + const char pydata[] = + "def verify(iterable):\n" + " it = iter(iterable)\n" + " assert it.next() == 17\n" + " assert abs(it.next() - 3.14) < 0.01\n" + " assert it.next() == '''\\\n" + "This string\n" + "has several\n" + "lines.'''\n" + " try:\n" + " it.next()\n" + " except StopIteration:\n" + " pass\n" + " else:\n" + " assert False, 'Too many data items'\n"; + + // Create a something.llsd file containing 'data' serialized to notation. + // Avoid final newline because NamedTempFile implicitly adds one. + NamedTempFile file(".llsd", + (lambda::bind(LLSDSerialize::toNotation, cdata[0], lambda::_1), + lambda::_1 << '\n', + lambda::bind(LLSDSerialize::toNotation, cdata[1], lambda::_1), + lambda::_1 << '\n', + lambda::bind(LLSDSerialize::toNotation, cdata[2], lambda::_1))); + + python("read C++ notation", + lambda::_1 << + "from llbase import llsd\n" + "def parse_each(iterable):\n" + " for item in iterable:\n" + " yield llsd.parse(item)\n" << + pydata << + "verify(parse_each(open('" << file.getName() << "')))\n"); + } } -- cgit v1.2.3 From 7341e01ce2c833a190e6361bd97cf64bc1947efc Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 12:42:49 -0400 Subject: Add test to verify Python-to-C++ LLSD notation sequence. Verify that an LLSD::String containing newlines works; verify that newlines between items are accepted. --- indra/llcommon/tests/llsdserialize_test.cpp | 60 ++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index aaf3740b07..0b9f1b53d2 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1787,8 +1787,12 @@ namespace tut " else:\n" " assert False, 'Too many data items'\n"; - // Create a something.llsd file containing 'data' serialized to notation. - // Avoid final newline because NamedTempFile implicitly adds one. + // Create a something.llsd file containing 'data' serialized to + // notation. It's important to separate with newlines because Python's + // llsd module doesn't support parsing from a file stream, only from a + // string, so we have to know how much of the file to read into a + // string. Avoid final newline because NamedTempFile implicitly adds + // one. NamedTempFile file(".llsd", (lambda::bind(LLSDSerialize::toNotation, cdata[0], lambda::_1), lambda::_1 << '\n', @@ -1805,4 +1809,56 @@ namespace tut pydata << "verify(parse_each(open('" << file.getName() << "')))\n"); } + + template<> template<> + void TestPythonCompatibleObject::test<4>() + { + set_test_name("verify sequence from Python"); + + // Create an empty data file. This is just a placeholder for our + // script to write into. Create it to establish a unique name that + // we know. + NamedTempFile file(".llsd", ""); + + python("write Python notation", + lambda::_1 << + "from __future__ import with_statement\n" + "from llbase import llsd\n" + "DATA = [\n" + " 17,\n" + " 3.14,\n" + " '''\\\n" + "This string\n" + "has several\n" + "lines.''',\n" + "]\n" + // N.B. Using 'print' implicitly adds newlines. + "with open('" << file.getName() << "', 'w') as f:\n" + " for item in DATA:\n" + " print >>f, llsd.format_notation(item)\n"); + + std::ifstream inf(file.getName().c_str()); + LLSD item; + // Notice that we're not doing anything special to parse out the + // newlines: LLSDSerialize::fromNotation ignores them. While it would + // seem they're not strictly necessary, going in this direction, we + // want to ensure that notation-separated-by-newlines works in both + // directions -- since in practice, a given file might be read by + // either language. + ensure_equals("Failed to read LLSD::Integer from Python", + LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), + 1); + ensure_equals(item.asInteger(), 17); + ensure_equals("Failed to read LLSD::Real from Python", + LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), + 1); + ensure_approximately_equals(item.asReal(), 3.14, 7); // 7 bits ~= 0.01 + ensure_equals("Failed to read LLSD::String from Python", + LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), + 1); + ensure_equals(item.asString(), + "This string\n" + "has several\n" + "lines."); + } } -- cgit v1.2.3 From 4b21954729163069e9d8f78c22624a2ecbc17b38 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 14:02:45 -0400 Subject: Muzzle VS warning --- indra/llcommon/tests/llsdserialize_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 0b9f1b53d2..e6a0deaa8b 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1852,7 +1852,7 @@ namespace tut ensure_equals("Failed to read LLSD::Real from Python", LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), 1); - ensure_approximately_equals(item.asReal(), 3.14, 7); // 7 bits ~= 0.01 + ensure_approximately_equals(F32(item.asReal()), 3.14, 7); // 7 bits ~= 0.01 ensure_equals("Failed to read LLSD::String from Python", LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), 1); -- cgit v1.2.3 From fee07bb597a64489b8e4bca8513ebd2afd9e7b6e Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 14:24:37 -0400 Subject: Try again to pacify VS fatal warning. --- indra/llcommon/tests/llsdserialize_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index e6a0deaa8b..b0c0df192c 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1852,7 +1852,8 @@ namespace tut ensure_equals("Failed to read LLSD::Real from Python", LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), 1); - ensure_approximately_equals(F32(item.asReal()), 3.14, 7); // 7 bits ~= 0.01 + ensure_approximately_equals("Bad LLSD::Real value from Python", + item.asReal(), 3.14, 7); // 7 bits ~= 0.01 ensure_equals("Failed to read LLSD::String from Python", LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), 1); -- cgit v1.2.3 From b88c7166f4323d9035bc78f517ff51396e80c123 Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Fri, 15 Jul 2011 12:53:09 -0700 Subject: STORM-1355 Memory issues from UI for very large groups This change is not guaranteed to fix this issue as the issue is difficult to repro, but there was a sketchy case group member responses come back from the simulator in message packets. For very large numbers of members, there may be a large number of packets received. The member data is placed in a structure of type LLGroupMgrGroupData, based on the group id. The problem is, if the user refreshes the group before the entire contents of the previous request comes back, response packets from the previous request will be intermingled with the responses from the refresh. Both the request call and the response handler would create the group data structure, if the structure wasn't already there. There may be a case where a response from the previous request causes creation of the group data, populating it with the contents of the response, and the responses from the second request would use that group data structure. Also, cleaned up some comments and variable names to be consistent --- indra/newview/llgroupmgr.cpp | 81 +++++++++++++++++++++----------------------- indra/newview/llwatchdog.cpp | 2 +- 2 files changed, 40 insertions(+), 43 deletions(-) diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index ce936a9924..efffd0f98e 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -857,7 +857,7 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data) msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id ); if (gAgent.getID() != agent_id) { - llwarns << "Got group properties reply for another agent!" << llendl; + llwarns << "Got group members reply for another agent!" << llendl; return; } @@ -867,10 +867,10 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data) LLUUID request_id; msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id); - LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id); - if (group_datap->mMemberRequestID != request_id) + LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id); + if (!group_datap || (group_datap->mMemberRequestID != request_id)) { - llwarns << "processGroupMembersReply: Received incorrect (stale?) request id" << llendl; + llwarns << "processGroupMembersReply: Received incorrect (stale?) group or request id" << llendl; return; } @@ -1028,7 +1028,7 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data) msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id ); if (gAgent.getID() != agent_id) { - llwarns << "Got group properties reply for another agent!" << llendl; + llwarns << "Got group role data reply for another agent!" << llendl; return; } @@ -1038,14 +1038,14 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data) LLUUID request_id; msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id); - LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id); - if (group_data->mRoleDataRequestID != request_id) + LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id); + if (!group_datap || (group_datap->mRoleDataRequestID != request_id)) { - llwarns << "processGroupRoleDataReply: Received incorrect (stale?) request id" << llendl; + llwarns << "processGroupPropertiesReply: Received incorrect (stale?) group or request id" << llendl; return; } - msg->getS32(_PREHASH_GroupData, "RoleCount", group_data->mRoleCount ); + msg->getS32(_PREHASH_GroupData, "RoleCount", group_datap->mRoleCount ); std::string name; std::string title; @@ -1086,22 +1086,22 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data) lldebugs << "Adding role data: " << name << " {" << role_id << "}" << llendl; LLGroupRoleData* rd = new LLGroupRoleData(role_id,name,title,desc,powers,member_count); - group_data->mRoles[role_id] = rd; + group_datap->mRoles[role_id] = rd; } - if (group_data->mRoles.size() == (U32)group_data->mRoleCount) + if (group_datap->mRoles.size() == (U32)group_datap->mRoleCount) { - group_data->mRoleDataComplete = TRUE; - group_data->mRoleDataRequestID.setNull(); + group_datap->mRoleDataComplete = TRUE; + group_datap->mRoleDataRequestID.setNull(); // We don't want to make role-member data requests until we have all the role data - if (group_data->mPendingRoleMemberRequest) + if (group_datap->mPendingRoleMemberRequest) { - group_data->mPendingRoleMemberRequest = FALSE; - LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_data->mID); + group_datap->mPendingRoleMemberRequest = FALSE; + LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_datap->mID); } } - group_data->mChanged = TRUE; + group_datap->mChanged = TRUE; LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_DATA); } @@ -1113,7 +1113,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data) msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id ); if (gAgent.getID() != agent_id) { - llwarns << "Got group properties reply for another agent!" << llendl; + llwarns << "Got group role members reply for another agent!" << llendl; return; } @@ -1126,11 +1126,10 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data) U32 total_pairs; msg->getU32(_PREHASH_AgentData, "TotalPairs", total_pairs); - LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id); - - if (group_data->mRoleMembersRequestID != request_id) + LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id); + if (!group_datap || (group_datap->mRoleMembersRequestID != request_id)) { - llwarns << "processGroupRoleMembersReply: Received incorrect (stale?) role member request id" << llendl; + llwarns << "processGroupRoleMembersReply: Received incorrect (stale?) group or request id" << llendl; return; } @@ -1155,15 +1154,15 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data) if (role_id.notNull() && member_id.notNull() ) { rd = NULL; - ri = group_data->mRoles.find(role_id); - if (ri != group_data->mRoles.end()) + ri = group_datap->mRoles.find(role_id); + if (ri != group_datap->mRoles.end()) { rd = ri->second; } md = NULL; - mi = group_data->mMembers.find(member_id); - if (mi != group_data->mMembers.end()) + mi = group_datap->mMembers.find(member_id); + if (mi != group_datap->mMembers.end()) { md = mi->second; } @@ -1182,21 +1181,21 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data) } } - group_data->mReceivedRoleMemberPairs += num_blocks; + group_datap->mReceivedRoleMemberPairs += num_blocks; } - if (group_data->mReceivedRoleMemberPairs == total_pairs) + if (group_datap->mReceivedRoleMemberPairs == total_pairs) { // Add role data for the 'everyone' role to all members - LLGroupRoleData* everyone = group_data->mRoles[LLUUID::null]; + LLGroupRoleData* everyone = group_datap->mRoles[LLUUID::null]; if (!everyone) { llwarns << "Everyone role not found!" << llendl; } else { - for (LLGroupMgrGroupData::member_list_t::iterator mi = group_data->mMembers.begin(); - mi != group_data->mMembers.end(); ++mi) + for (LLGroupMgrGroupData::member_list_t::iterator mi = group_datap->mMembers.begin(); + mi != group_datap->mMembers.end(); ++mi) { LLGroupMemberData* data = mi->second; if (data) @@ -1206,11 +1205,11 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data) } } - group_data->mRoleMemberDataComplete = TRUE; - group_data->mRoleMembersRequestID.setNull(); + group_datap->mRoleMemberDataComplete = TRUE; + group_datap->mRoleMembersRequestID.setNull(); } - group_data->mChanged = TRUE; + group_datap->mChanged = TRUE; LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_MEMBER_DATA); } @@ -1228,15 +1227,13 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data) LLUUID group_id; msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_GroupID, group_id ); - - LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id); - LLUUID request_id; msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_RequestID, request_id); - - if (group_data->mTitlesRequestID != request_id) + + LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id); + if (!group_datap || (group_datap->mTitlesRequestID != request_id)) { - llwarns << "processGroupTitlesReply: Received incorrect (stale?) title request id" << llendl; + llwarns << "processGroupTitlesReply: Received incorrect (stale?) group" << llendl; return; } @@ -1253,11 +1250,11 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data) if (!title.mTitle.empty()) { lldebugs << "LLGroupMgr adding title: " << title.mTitle << ", " << title.mRoleID << ", " << (title.mSelected ? 'Y' : 'N') << llendl; - group_data->mTitles.push_back(title); + group_datap->mTitles.push_back(title); } } - group_data->mChanged = TRUE; + group_datap->mChanged = TRUE; LLGroupMgr::getInstance()->notifyObservers(GC_TITLES); } diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp index 1694126802..4f582fc2db 100644 --- a/indra/newview/llwatchdog.cpp +++ b/indra/newview/llwatchdog.cpp @@ -126,8 +126,8 @@ void LLWatchdogTimeout::start(const std::string& state) // Order of operation is very impmortant here. // After LLWatchdogEntry::start() is called // LLWatchdogTimeout::isAlive() will be called asynchronously. - mTimer.start(); ping(state); + mTimer.start(); LLWatchdogEntry::start(); } -- cgit v1.2.3 From e41c4c90f0d8c935fa8e4de6a8439d00283c3206 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 16:01:43 -0400 Subject: Not all TC agents have llbase.llsd, fall back to indra.base.llsd --- indra/llcommon/tests/llsdserialize_test.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index b0c0df192c..30cc2bbc8a 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1802,7 +1802,10 @@ namespace tut python("read C++ notation", lambda::_1 << - "from llbase import llsd\n" + "try:\n" + " from llbase import llsd\n" + "except ImportError:\n" + " from indra.base import llsd\n" "def parse_each(iterable):\n" " for item in iterable:\n" " yield llsd.parse(item)\n" << @@ -1823,7 +1826,10 @@ namespace tut python("write Python notation", lambda::_1 << "from __future__ import with_statement\n" - "from llbase import llsd\n" + "try:\n" + " from llbase import llsd\n" + "except ImportError:\n" + " from indra.base import llsd\n" "DATA = [\n" " 17,\n" " 3.14,\n" -- cgit v1.2.3 From 15c36ee9b39624a29303b6e0cf434c9758657ded Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 17:20:27 -0400 Subject: If we're going to need indra.base.llsd, have to munge sys.path. And at that point, the Python logic needed to bring in the llsd module is big enough to warrant capturing it in a separate string variable common to multiple tests. --- indra/llcommon/tests/llsdserialize_test.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 30cc2bbc8a..a54d861680 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1673,9 +1673,21 @@ namespace tut struct TestPythonCompatible { - TestPythonCompatible() {} + TestPythonCompatible(): + import_llsd("import os.path\n" + "import sys\n" + "sys.path.insert(0,\n" + " os.path.join(os.path.dirname(__file__),\n" + " os.pardir, os.pardir, 'lib', 'python'))\n" + "try:\n" + " from llbase import llsd\n" + "except ImportError:\n" + " from indra.base import llsd\n") + {} ~TestPythonCompatible() {} + std::string import_llsd; + template void python(const std::string& desc, const CONTENT& script, int expect=0) { @@ -1802,10 +1814,7 @@ namespace tut python("read C++ notation", lambda::_1 << - "try:\n" - " from llbase import llsd\n" - "except ImportError:\n" - " from indra.base import llsd\n" + import_llsd << "def parse_each(iterable):\n" " for item in iterable:\n" " yield llsd.parse(item)\n" << @@ -1825,11 +1834,8 @@ namespace tut python("write Python notation", lambda::_1 << - "from __future__ import with_statement\n" - "try:\n" - " from llbase import llsd\n" - "except ImportError:\n" - " from indra.base import llsd\n" + "from __future__ import with_statement\n" << + import_llsd << "DATA = [\n" " 17,\n" " 3.14,\n" -- cgit v1.2.3 From 2b509383ccb22a1a4258e1d56710cbb998d6c6af Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 15 Jul 2011 22:32:06 -0400 Subject: Use C++ __FILE__ rather than Python __file__ to find indra work area. In this case, the Python code in question is being written from a C++ string literal to a temp script file in a platform-dependent temp directory -- so the Python __file__ value tells you nothing about the location of the repository checkout. Embedding __FILE__ from the containing C++ source file works better. --- indra/llcommon/tests/llsdserialize_test.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index a54d861680..c65a1d3ca0 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1674,10 +1674,16 @@ namespace tut struct TestPythonCompatible { TestPythonCompatible(): + // Note the peculiar insertion of __FILE__ into this string. + // Normally I like to make a Python script navigate relative to + // its own placement in the repo directory tree (__file__) -- but + // in this case, the script is being written into a platform- + // dependent temp directory! So locate indra/lib/python relative + // to this C++ source file rather than the Python module. import_llsd("import os.path\n" "import sys\n" "sys.path.insert(0,\n" - " os.path.join(os.path.dirname(__file__),\n" + " os.path.join(os.path.dirname('" __FILE__ "'),\n" " os.pardir, os.pardir, 'lib', 'python'))\n" "try:\n" " from llbase import llsd\n" -- cgit v1.2.3 From 81dc4401288f0a3cb95ce53d4ede79daa0f0f3d0 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Sat, 16 Jul 2011 10:20:41 -0400 Subject: Use raw-string syntax for Python string containing Windows pathname. Consider this pathname for llsdserialize_test.cpp: C:\nats\indra\llcommon\tests\llsdserialize_test.cpp Embed that in a Python string literal: 'C:\nats\indra\llcommon\tests\llsdserialize_test.cpp' and you get a string containing: C: ats\indra\llcommon ests\llsdserialize_test.cpp where the \n became a newline and the \t became a tab character. Hopefully Python raw-string syntax r'C:\etc\etc' works better. --- indra/llcommon/tests/llsdserialize_test.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index c65a1d3ca0..81de64930f 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1680,10 +1680,12 @@ namespace tut // in this case, the script is being written into a platform- // dependent temp directory! So locate indra/lib/python relative // to this C++ source file rather than the Python module. + // Use Python raw-string syntax so Windows pathname backslashes + // won't mislead Python's string scanner. import_llsd("import os.path\n" "import sys\n" "sys.path.insert(0,\n" - " os.path.join(os.path.dirname('" __FILE__ "'),\n" + " os.path.join(os.path.dirname(r'" __FILE__ "'),\n" " os.pardir, os.pardir, 'lib', 'python'))\n" "try:\n" " from llbase import llsd\n" -- cgit v1.2.3 From 790032d2316989eb5b36af2569408ce1e1296015 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Sat, 16 Jul 2011 22:24:31 -0400 Subject: Use raw-string syntax for other Windows pathnames inserted to Python. --- indra/llcommon/tests/llsdserialize_test.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 81de64930f..7ce7ada29e 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1827,7 +1827,8 @@ namespace tut " for item in iterable:\n" " yield llsd.parse(item)\n" << pydata << - "verify(parse_each(open('" << file.getName() << "')))\n"); + // Don't forget raw-string syntax for Windows pathnames. + "verify(parse_each(open(r'" << file.getName() << "')))\n"); } template<> template<> @@ -1852,8 +1853,9 @@ namespace tut "has several\n" "lines.''',\n" "]\n" + // Don't forget raw-string syntax for Windows pathnames. // N.B. Using 'print' implicitly adds newlines. - "with open('" << file.getName() << "', 'w') as f:\n" + "with open(r'" << file.getName() << "', 'w') as f:\n" " for item in DATA:\n" " print >>f, llsd.format_notation(item)\n"); -- cgit v1.2.3 From 6469f1c2f21ecd3b15a18957d882ef6a16b17ecf Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sun, 17 Jul 2011 00:24:08 -0500 Subject: SH-2031 High risk changeset, but potentially high reward. Addresses frame stalls in renderer by never using the fixed function pipeline if shaders are available. --- indra/llrender/llcubemap.cpp | 12 +- indra/llrender/llgl.cpp | 23 ++-- indra/llrender/llglslshader.cpp | 3 + indra/llrender/llglslshader.h | 1 + indra/llrender/llimagegl.cpp | 12 ++ indra/llrender/llrender.cpp | 29 ++++- indra/llrender/llrender.h | 2 + indra/llrender/llvertexbuffer.cpp | 14 +-- indra/llui/llui.cpp | 21 +++- indra/llui/llui.h | 5 + indra/newview/app_settings/logcontrol.xml | 1 - .../shaders/class1/interface/customalphaF.glsl | 17 +++ .../shaders/class1/interface/customalphaV.glsl | 16 +++ .../shaders/class1/interface/glowcombineF.glsl | 17 +++ .../shaders/class1/interface/glowcombineV.glsl | 15 +++ .../shaders/class1/interface/occlusionF.glsl | 11 ++ .../shaders/class1/interface/occlusionV.glsl | 12 ++ .../shaders/class1/interface/solidcolorF.glsl | 15 +++ .../shaders/class1/interface/solidcolorV.glsl | 15 +++ .../shaders/class1/interface/twotextureaddF.glsl | 14 +++ .../shaders/class1/interface/twotextureaddV.glsl | 16 +++ .../app_settings/shaders/class1/interface/uiF.glsl | 13 +++ .../app_settings/shaders/class1/interface/uiV.glsl | 16 +++ .../app_settings/shaders/class1/objects/bumpF.glsl | 17 +++ .../app_settings/shaders/class1/objects/bumpV.glsl | 16 +++ indra/newview/lldrawpool.cpp | 5 +- indra/newview/lldrawpoolalpha.cpp | 4 +- indra/newview/lldrawpoolbump.cpp | 103 +++++++++++------ indra/newview/lldrawpoolsimple.cpp | 16 ++- indra/newview/lldrawpoolsky.cpp | 5 + indra/newview/lldrawpooltree.cpp | 2 +- indra/newview/lldrawpoolwlsky.cpp | 36 +++++- indra/newview/llhudnametag.cpp | 2 +- indra/newview/llspatialpartition.cpp | 5 +- indra/newview/lltexlayer.cpp | 7 ++ indra/newview/llviewerdisplay.cpp | 27 ++++- indra/newview/llviewershadermgr.cpp | 126 +++++++++++++++++++++ indra/newview/llviewershadermgr.h | 13 +++ indra/newview/llviewertexture.cpp | 2 +- indra/newview/llviewertexturelist.cpp | 2 +- indra/newview/llviewerwindow.cpp | 10 ++ indra/newview/llvoicevivox.cpp | 3 + indra/newview/llvotree.cpp | 1 + indra/newview/pipeline.cpp | 116 +++++++++++++------ shining-fixes_rev18977.patch | 41 +++++++ 45 files changed, 742 insertions(+), 117 deletions(-) create mode 100644 indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/uiF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/uiV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/objects/bumpF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/objects/bumpV.glsl create mode 100644 shining-fixes_rev18977.patch diff --git a/indra/llrender/llcubemap.cpp b/indra/llrender/llcubemap.cpp index fb22d7f1f5..1b10354c22 100644 --- a/indra/llrender/llcubemap.cpp +++ b/indra/llrender/llcubemap.cpp @@ -259,7 +259,7 @@ void LLCubeMap::setMatrix(S32 stage) if (mMatrixStage < 0) return; - if (stage > 0) + //if (stage > 0) { gGL.getTexUnit(stage)->activate(); } @@ -278,17 +278,17 @@ void LLCubeMap::setMatrix(S32 stage) glLoadMatrixf((F32 *)trans.mMatrix); glMatrixMode(GL_MODELVIEW); - if (stage > 0) + /*if (stage > 0) { gGL.getTexUnit(0)->activate(); - } + }*/ } void LLCubeMap::restoreMatrix() { if (mMatrixStage < 0) return; - if (mMatrixStage > 0) + //if (mMatrixStage > 0) { gGL.getTexUnit(mMatrixStage)->activate(); } @@ -296,10 +296,10 @@ void LLCubeMap::restoreMatrix() glPopMatrix(); glMatrixMode(GL_MODELVIEW); - if (mMatrixStage > 0) + /*if (mMatrixStage > 0) { gGL.getTexUnit(0)->activate(); - } + }*/ } void LLCubeMap::setReflection (void) diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index e07ff0015c..8937726209 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -986,12 +986,12 @@ void LLGLManager::initExtensions() } if (mHasSync) { - glFenceSync = (PFNGLFENCESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glFenceSync"); - glIsSync = (PFNGLISSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glIsSync"); - glDeleteSync = (PFNGLDELETESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteSync"); - glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glClientWaitSync"); - glWaitSync = (PFNGLWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glWaitSync"); - glGetInteger64v = (PFNGLGETINTEGER64VPROC) GLH_EXT_GET_PROC_ADDRESS("glGetInteger64v"); + glFenceSync = (PFNGLFENCESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glFenceSync"); + glIsSync = (PFNGLISSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glIsSync"); + glDeleteSync = (PFNGLDELETESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteSync"); + glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glClientWaitSync"); + glWaitSync = (PFNGLWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glWaitSync"); + glGetInteger64v = (PFNGLGETINTEGER64VPROC) GLH_EXT_GET_PROC_ADDRESS("glGetInteger64v"); glGetSynciv = (PFNGLGETSYNCIVPROC) GLH_EXT_GET_PROC_ADDRESS("glGetSynciv"); } if (mHasMapBufferRange) @@ -1379,6 +1379,8 @@ void LLGLState::checkStates(const std::string& msg) glGetIntegerv(GL_BLEND_SRC, &src); glGetIntegerv(GL_BLEND_DST, &dst); + stop_glerror(); + BOOL error = FALSE; if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA) @@ -1399,7 +1401,9 @@ void LLGLState::checkStates(const std::string& msg) { LLGLenum state = iter->first; LLGLboolean cur_state = iter->second; + stop_glerror(); LLGLboolean gl_state = glIsEnabled(state); + stop_glerror(); if(cur_state != gl_state) { dumpStates(); @@ -1424,11 +1428,11 @@ void LLGLState::checkStates(const std::string& msg) void LLGLState::checkTextureChannels(const std::string& msg) { +#if 0 if (!gDebugGL) { return; } - stop_glerror(); GLint activeTexture; @@ -1594,6 +1598,7 @@ void LLGLState::checkTextureChannels(const std::string& msg) LL_GL_ERRS << "GL texture state corruption detected. " << msg << LL_ENDL; } } +#endif } void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask) @@ -1710,7 +1715,7 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask) } } - if (glIsEnabled(GL_TEXTURE_2D)) + /*if (glIsEnabled(GL_TEXTURE_2D)) { if (!(data_mask & 0x0008)) { @@ -1733,7 +1738,7 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask) gFailLog << "GL does not have GL_TEXTURE_2D enabled on channel 1." << std::endl; } } - } + }*/ glClientActiveTextureARB(GL_TEXTURE0_ARB); gGL.getTexUnit(0)->activate(); diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index ad2c662dfc..c582858413 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -49,6 +49,7 @@ using std::make_pair; using std::string; GLhandleARB LLGLSLShader::sCurBoundShader = 0; +bool LLGLSLShader::sNoFixedFunction = false; BOOL shouldChange(const LLVector4& v1, const LLVector4& v2) { @@ -376,6 +377,7 @@ BOOL LLGLSLShader::link(BOOL suppress_errors) void LLGLSLShader::bind() { + gGL.flush(); if (gGLManager.mHasShaderObjects) { glUseProgramObjectARB(mProgramObject); @@ -390,6 +392,7 @@ void LLGLSLShader::bind() void LLGLSLShader::unbind() { + gGL.flush(); if (gGLManager.mHasShaderObjects) { stop_glerror(); diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 4922eb6d67..24562c3c42 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -67,6 +67,7 @@ public: LLGLSLShader(); static GLhandleARB sCurBoundShader; + static bool sNoFixedFunction; void unload(); BOOL createShader(std::vector * attributes, diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 60a5962234..9ca3a23d52 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1414,6 +1414,8 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre void LLImageGL::deleteDeadTextures() { + bool reset = false; + while (!sDeadTextureList.empty()) { GLuint tex = sDeadTextureList.front(); @@ -1426,12 +1428,22 @@ void LLImageGL::deleteDeadTextures() { tex_unit->unbind(tex_unit->getCurrType()); stop_glerror(); + + if (i > 0) + { + reset = true; + } } } glDeleteTextures(1, &tex); stop_glerror(); } + + if (reset) + { + gGL.getTexUnit(0)->activate(); + } } void LLImageGL::destroyGLTexture() diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 1d82dda30f..70df1dd1d1 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -46,6 +46,7 @@ S32 gGLViewport[4]; U32 LLRender::sUICalls = 0; U32 LLRender::sUIVerts = 0; +U32 LLTexUnit::sWhiteTexture = 0; static const U32 LL_NUM_TEXTURE_LAYERS = 32; static const U32 LL_NUM_LIGHT_UNITS = 8; @@ -126,7 +127,8 @@ void LLTexUnit::refreshState(void) // Per apple spec, don't call glEnable/glDisable when index exceeds max texture units // http://www.mailinglistarchive.com/html/mac-opengl@lists.apple.com/2008-07/msg00653.html // - bool enableDisable = (mIndex < gGLManager.mNumTextureUnits) && mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE; + bool enableDisable = !LLGLSLShader::sNoFixedFunction && + (mIndex < gGLManager.mNumTextureUnits) && mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE; if (mCurrTexType != TT_NONE) { @@ -184,7 +186,8 @@ void LLTexUnit::enable(eTextureType type) mCurrTexType = type; gGL.flush(); - if (type != LLTexUnit::TT_MULTISAMPLE_TEXTURE && + if (!LLGLSLShader::sNoFixedFunction && + type != LLTexUnit::TT_MULTISAMPLE_TEXTURE && mIndex < gGLManager.mNumTextureUnits) { glEnable(sGLTextureType[type]); @@ -201,7 +204,8 @@ void LLTexUnit::disable(void) activate(); unbind(mCurrTexType); gGL.flush(); - if (mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE && + if (!LLGLSLShader::sNoFixedFunction && + mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE && mIndex < gGLManager.mNumTextureUnits) { glDisable(sGLTextureType[mCurrTexType]); @@ -403,7 +407,14 @@ void LLTexUnit::unbind(eTextureType type) activate(); mCurrTexture = 0; - glBindTexture(sGLTextureType[type], 0); + if (LLGLSLShader::sNoFixedFunction && type == LLTexUnit::TT_TEXTURE) + { + glBindTexture(sGLTextureType[type], sWhiteTexture); + } + else + { + glBindTexture(sGLTextureType[type], 0); + } stop_glerror(); } } @@ -474,6 +485,11 @@ void LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions optio void LLTexUnit::setTextureBlendType(eTextureBlendType type) { + if (LLGLSLShader::sNoFixedFunction) + { //texture blend type means nothing when using shaders + return; + } + if (mIndex < 0) return; // Do nothing if it's already correctly set. @@ -594,6 +610,11 @@ GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha) void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha) { + if (LLGLSLShader::sNoFixedFunction) + { //register combiners do nothing when not using fixed function + return; + } + if (mIndex < 0) return; activate(); diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 41e7b35341..9eedebe2ce 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -52,6 +52,8 @@ class LLTexUnit { friend class LLRender; public: + static U32 sWhiteTexture; + typedef enum { TT_TEXTURE = 0, // Standard 2D Texture diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 82c5efe0ac..1180afa631 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -35,6 +35,8 @@ #include "llmemtype.h" #include "llrender.h" #include "llvector4a.h" +#include "llglslshader.h" + //============================================================================ @@ -1113,8 +1115,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | - GL_MAP_INVALIDATE_RANGE_BIT | - GL_MAP_UNSYNCHRONIZED_BIT); + GL_MAP_INVALIDATE_RANGE_BIT); #endif } else @@ -1122,8 +1123,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran #ifdef GL_ARB_map_buffer_range src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize, GL_MAP_WRITE_BIT | - GL_MAP_FLUSH_EXPLICIT_BIT | - GL_MAP_UNSYNCHRONIZED_BIT); + GL_MAP_FLUSH_EXPLICIT_BIT); #endif } } @@ -1280,8 +1280,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | - GL_MAP_INVALIDATE_RANGE_BIT | - GL_MAP_UNSYNCHRONIZED_BIT); + GL_MAP_INVALIDATE_RANGE_BIT); #endif } else @@ -1289,8 +1288,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) #ifdef GL_ARB_map_buffer_range src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices, GL_MAP_WRITE_BIT | - GL_MAP_FLUSH_EXPLICIT_BIT | - GL_MAP_UNSYNCHRONIZED_BIT); + GL_MAP_FLUSH_EXPLICIT_BIT); #endif } } diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 8020ca802b..28d7e0a5ba 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -95,7 +95,6 @@ static LLDefaultChildRegistry::Register register_search_editor(" // register other widgets which otherwise may not be linked in static LLDefaultChildRegistry::Register register_loading_indicator("loading_indicator"); - // // Functions // @@ -524,8 +523,15 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex if (solid_color) { - gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); - gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); + if (LLGLSLShader::sNoFixedFunction) + { + gSolidColorProgram.bind(); + } + else + { + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); + } } gGL.getTexUnit(0)->bind(image); @@ -699,7 +705,14 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex if (solid_color) { - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + if (LLGLSLShader::sNoFixedFunction) + { + gUIProgram.bind(); + } + else + { + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + } } } diff --git a/indra/llui/llui.h b/indra/llui/llui.h index c583d58d5a..a04b232a28 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -33,6 +33,7 @@ #include "llrect.h" #include "llcontrol.h" #include "llcoord.h" +#include "llglslshader.h" #include "llinitparam.h" #include "llregistry.h" #include "lluicolor.h" @@ -47,6 +48,7 @@ // for initparam specialization #include "llfontgl.h" + class LLColor4; class LLVector3; class LLVector2; @@ -484,4 +486,7 @@ namespace LLInitParam }; } +extern LLGLSLShader gSolidColorProgram; +extern LLGLSLShader gUIProgram; + #endif diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index 9f4e89691f..ae72dee900 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -44,7 +44,6 @@ - Capabilities diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl new file mode 100644 index 0000000000..3827c72f4c --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl @@ -0,0 +1,17 @@ +/** + * @file customalphaF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +uniform sampler2D diffuseMap; + +uniform float custom_alpha; + +void main() +{ + vec4 color = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy); + color.a *= custom_alpha; + gl_FragColor = color; +} diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl new file mode 100644 index 0000000000..04bfff22c1 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl @@ -0,0 +1,16 @@ +/** + * @file customalphaV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_FrontColor = gl_Color; +} + diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl new file mode 100644 index 0000000000..a60fb1eaa7 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl @@ -0,0 +1,17 @@ +/** + * @file glowcombineF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2D glowMap; +uniform sampler2DRect screenMap; + +void main() +{ + gl_FragColor = texture2D(glowMap, gl_TexCoord[0].xy) + + texture2DRect(screenMap, gl_TexCoord[1].xy); +} diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl new file mode 100644 index 0000000000..ce183ec154 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl @@ -0,0 +1,15 @@ +/** + * @file glowcombineV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[1] = gl_MultiTexCoord1; +} + diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl new file mode 100644 index 0000000000..b140712f18 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl @@ -0,0 +1,11 @@ +/** + * @file occlusionF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +void main() +{ + gl_FragColor = vec4(1,1,1,1); +} diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl new file mode 100644 index 0000000000..5a5d0ec506 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl @@ -0,0 +1,12 @@ +/** + * @file uiV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl new file mode 100644 index 0000000000..ae943cc438 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl @@ -0,0 +1,15 @@ +/** + * @file twotextureaddF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +uniform sampler2D tex0; + +void main() +{ + float alpha = texture2D(tex0, gl_TexCoord[0].xy).a; + + gl_FragColor = vec4(gl_Color.rgb, alpha); +} diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl new file mode 100644 index 0000000000..5a854b4e02 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl @@ -0,0 +1,15 @@ +/** + * @file solidcolorV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_MultiTexCoord0; +} + diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl new file mode 100644 index 0000000000..d81b56fdb9 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl @@ -0,0 +1,14 @@ +/** + * @file twotextureaddF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +uniform sampler2D tex0; +uniform sampler2D tex1; + +void main() +{ + gl_FragColor = texture2D(tex0, gl_TexCoord[0].xy)+texture2D(tex1, gl_TexCoord[1].xy); +} diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl new file mode 100644 index 0000000000..f685b112b4 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl @@ -0,0 +1,16 @@ +/** + * @file twotextureaddV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[1] = gl_MultiTexCoord1; +} + diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl new file mode 100644 index 0000000000..9dec7a56ba --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl @@ -0,0 +1,13 @@ +/** + * @file uiF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +uniform sampler2D diffuseMap; + +void main() +{ + gl_FragColor = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy); +} diff --git a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl new file mode 100644 index 0000000000..9ca6cae5c5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl @@ -0,0 +1,16 @@ +/** + * @file uiV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_FrontColor = gl_Color; +} + diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl new file mode 100644 index 0000000000..587ab93a80 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl @@ -0,0 +1,17 @@ +/** + * @file bumpF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +uniform sampler2D texture0; +uniform sampler2D texture1; + +void main() +{ + float tex0 = texture2D(texture0, gl_TexCoord[0].xy).a; + float tex1 = texture2D(texture1, gl_TexCoord[1].xy).a; + + gl_FragColor = vec4(tex0+(1.0-tex1)-0.5); +} diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl new file mode 100644 index 0000000000..056d1a9582 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl @@ -0,0 +1,16 @@ +/** + * @file bumpV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + +void main() +{ + //transform vertex + gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex; + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord1; + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index fa7d6e2a40..286284f828 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -190,15 +190,16 @@ void LLDrawPool::renderPostDeferred(S32 pass) //virtual void LLDrawPool::endRenderPass( S32 pass ) { - for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++) + /*for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++) { //dummy cleanup of any currently bound textures if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE) { gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType()); gGL.getTexUnit(i)->disable(); } - } + }*/ + //make sure channel 0 is active channel gGL.getTexUnit(0)->activate(); } diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index ad7e3ad593..ddcf42e523 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -138,6 +138,7 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass) gPipeline.mDeferredDepth.bindTarget(); simple_shader = NULL; fullbright_shader = NULL; + gObjectFullbrightProgram.bind(); } deferred_render = TRUE; @@ -156,6 +157,7 @@ void LLDrawPoolAlpha::endPostDeferredPass(S32 pass) { gPipeline.mDeferredDepth.flush(); gPipeline.mScreen.bindTarget(); + gObjectFullbrightProgram.unbind(); } deferred_render = FALSE; @@ -238,7 +240,7 @@ void LLDrawPoolAlpha::render(S32 pass) fullbright_shader->bind(); } pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); - LLGLSLShader::bindNoShader(); + //LLGLSLShader::bindNoShader(); } else { diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 813b3820ee..d801f6df18 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -464,11 +464,15 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32& } } } - gGL.getTexUnit(diffuse_channel)->disable(); - gGL.getTexUnit(cube_channel)->disable(); - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + if (!LLGLSLShader::sNoFixedFunction) + { + gGL.getTexUnit(diffuse_channel)->disable(); + gGL.getTexUnit(cube_channel)->disable(); + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + } } void LLDrawPoolBump::endShiny(bool invisible) @@ -583,19 +587,19 @@ void LLDrawPoolBump::endFullbrightShiny() cube_map->disable(); cube_map->restoreMatrix(); - if (diffuse_channel != 0) + /*if (diffuse_channel != 0) { shader->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP); } gGL.getTexUnit(0)->activate(); - gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); + gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);*/ shader->unbind(); - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + //gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); diffuse_channel = -1; cube_channel = 0; @@ -706,36 +710,44 @@ void LLDrawPoolBump::beginBump(U32 pass) // Optional second pass: emboss bump map stop_glerror(); - // TEXTURE UNIT 0 - // Output.rgb = texture at texture coord 0 - gGL.getTexUnit(0)->activate(); + if (LLGLSLShader::sNoFixedFunction) + { + gObjectBumpProgram.bind(); + } + else + { + // TEXTURE UNIT 0 + // Output.rgb = texture at texture coord 0 + gGL.getTexUnit(0)->activate(); - gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); - gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); - // TEXTURE UNIT 1 - gGL.getTexUnit(1)->activate(); + // TEXTURE UNIT 1 + gGL.getTexUnit(1)->activate(); - gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE); + gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE); + + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); - gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA); - gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); + // src = tex0 + (1 - tex1) - 0.5 + // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5 + // = (1 + bump0 - bump1) / 2 - // src = tex0 + (1 - tex1) - 0.5 - // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5 - // = (1 + bump0 - bump1) / 2 + // Blend: src * dst + dst * src + // = 2 * src * dst + // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst] + // = (1 + bump0 - bump1) * dst.rgb + // = dst.rgb + dst.rgb * (bump0 - bump1) + + gGL.getTexUnit(0)->activate(); + gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE); + } - // Blend: src * dst + dst * src - // = 2 * src * dst - // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst] - // = (1 + bump0 - bump1) * dst.rgb - // = dst.rgb + dst.rgb * (bump0 - bump1) gGL.setSceneBlendType(LLRender::BT_MULT_X2); - gGL.getTexUnit(0)->activate(); stop_glerror(); - - gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE); } //static @@ -765,14 +777,21 @@ void LLDrawPoolBump::endBump(U32 pass) return; } - // Disable texture unit 1 - gGL.getTexUnit(1)->activate(); - gGL.getTexUnit(1)->disable(); - gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT); + if (LLGLSLShader::sNoFixedFunction) + { + gObjectBumpProgram.unbind(); + } + else + { + // Disable texture blending on unit 1 + gGL.getTexUnit(1)->activate(); + //gGL.getTexUnit(1)->disable(); + gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT); - // Disable texture unit 0 - gGL.getTexUnit(0)->activate(); - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + // Disable texture blending on unit 0 + gGL.getTexUnit(0)->activate(); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + } gGL.setSceneBlendType(LLRender::BT_ALPHA); } @@ -1407,6 +1426,11 @@ void LLDrawPoolInvisible::render(S32 pass) { //render invisiprims LLFastTimer t(FTM_RENDER_INVISIBLE); + if (gPipeline.canUseVertexShaders()) + { + gOcclusionProgram.bind(); + } + U32 invisi_mask = LLVertexBuffer::MAP_VERTEX; glStencilMask(0); gGL.setColorMask(false, false); @@ -1414,6 +1438,11 @@ void LLDrawPoolInvisible::render(S32 pass) gGL.setColorMask(true, false); glStencilMask(0xFFFFFFFF); + if (gPipeline.canUseVertexShaders()) + { + gOcclusionProgram.unbind(); + } + if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) { beginShiny(true); diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp index 5dbb27cabb..224f149c6b 100644 --- a/indra/newview/lldrawpoolsimple.cpp +++ b/indra/newview/lldrawpoolsimple.cpp @@ -49,6 +49,8 @@ void LLDrawPoolGlow::beginPostDeferredPass(S32 pass) gDeferredFullbrightProgram.bind(); } +static LLFastTimer::DeclareTimer FTM_RENDER_GLOW_PUSH("Glow Push"); + void LLDrawPoolGlow::renderPostDeferred(S32 pass) { LLFastTimer t(FTM_RENDER_GLOW); @@ -62,7 +64,11 @@ void LLDrawPoolGlow::renderPostDeferred(S32 pass) LLGLDepthTest depth(GL_TRUE, GL_FALSE); gGL.setColorMask(false, true); - pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); + + { + LLFastTimer t(FTM_RENDER_GLOW_PUSH); + pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); + } gGL.setColorMask(true, false); gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -374,10 +380,14 @@ void LLDrawPoolFullbright::endRenderPass(S32 pass) LLFastTimer t(FTM_RENDER_FULLBRIGHT); LLRenderPass::endRenderPass(pass); + stop_glerror(); + if (mVertexShaderLevel > 0) { fullbright_shader->unbind(); } + + stop_glerror(); } void LLDrawPoolFullbright::render(S32 pass) @@ -385,6 +395,8 @@ void LLDrawPoolFullbright::render(S32 pass) LLFastTimer t(FTM_RENDER_FULLBRIGHT); gGL.setSceneBlendType(LLRender::BT_ALPHA); + stop_glerror(); + if (mVertexShaderLevel > 0) { fullbright_shader->bind(); @@ -398,6 +410,8 @@ void LLDrawPoolFullbright::render(S32 pass) U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR; renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask); } + + stop_glerror(); } S32 LLDrawPoolFullbright::getNumPasses() diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp index 030d6e1110..efffb2df9e 100644 --- a/indra/newview/lldrawpoolsky.cpp +++ b/indra/newview/lldrawpoolsky.cpp @@ -82,6 +82,10 @@ void LLDrawPoolSky::render(S32 pass) mShader = &gObjectFullbrightWaterProgram; mShader->bind(); } + else if (LLGLSLShader::sNoFixedFunction) + { //just use the UI shader (generic single texture no lighting) + gUIProgram.bind(); + } else { // don't use shaders! @@ -139,6 +143,7 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side) if (LLSkyTex::doInterpolate()) { + LLGLEnable blend(GL_BLEND); mSkyTex[side].bindTexture(FALSE); glColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index 81c796b146..429e06b227 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -73,7 +73,7 @@ void LLDrawPoolTree::beginRenderPass(S32 pass) shader = &gObjectSimpleNonIndexedProgram; } - if (gPipeline.canUseWindLightShadersOnObjects()) + if (gPipeline.canUseVertexShaders()) { shader->bind(); } diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index bf79c2100c..f9fd501072 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -189,16 +189,31 @@ void LLDrawPoolWLSky::renderStars(void) const glRotatef(gFrameTimeSeconds*0.01f, 0.f, 0.f, 1.f); // gl_FragColor.rgb = gl_Color.rgb; // gl_FragColor.a = gl_Color.a * star_alpha.a; - gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); - gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_CONST_ALPHA, LLTexUnit::TBS_TEX_ALPHA); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV); + if (LLGLSLShader::sNoFixedFunction) + { + gCustomAlphaProgram.bind(); + gCustomAlphaProgram.uniform1f("custom_alpha", star_alpha.mV[3]); + } + else + { + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_CONST_ALPHA, LLTexUnit::TBS_TEX_ALPHA); + glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV); + } gSky.mVOWLSkyp->drawStars(); gGL.popMatrix(); - - // and disable the combiner states - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + + if (LLGLSLShader::sNoFixedFunction) + { + gCustomAlphaProgram.unbind(); + } + else + { + // and disable the combiner states + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + } } void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const @@ -242,6 +257,10 @@ void LLDrawPoolWLSky::renderHeavenlyBodies() if (gSky.mVOSkyp->getMoon().getDraw() && face->getGeomCount()) { + if (gPipeline.canUseVertexShaders()) + { + gUIProgram.bind(); + } // *NOTE: even though we already bound this texture above for the // stars register combiners, we bind again here for defensive reasons, // since LLImageGL::bind detects that it's a noop, and optimizes it out. @@ -257,6 +276,11 @@ void LLDrawPoolWLSky::renderHeavenlyBodies() LLFacePool::LLOverrideFaceColor color_override(this, color); face->renderIndexed(); + + if (gPipeline.canUseVertexShaders()) + { + gUIProgram.unbind(); + } } } diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp index 82e1f2dfb5..482294c8a6 100644 --- a/indra/newview/llhudnametag.cpp +++ b/indra/newview/llhudnametag.cpp @@ -477,7 +477,7 @@ void LLHUDNameTag::renderText(BOOL for_select) // Render label { - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); for(std::vector::iterator segment_iter = mLabelSegments.begin(); segment_iter != mLabelSegments.end(); ++segment_iter ) diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index f99afa923b..e23b431457 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -47,6 +47,7 @@ #include "llvoavatar.h" #include "llvolumemgr.h" #include "lltextureatlas.h" +#include "llglslshader.h" static LLFastTimer::DeclareTimer FTM_FRUSTUM_CULL("Frustum Culling"); static LLFastTimer::DeclareTimer FTM_CULL_REBOUND("Cull Rebound"); @@ -3176,6 +3177,8 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume) glColor4fv(line_color.mV); LLVertexBuffer::unbind(); + llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0); + glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints); glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices); @@ -3257,7 +3260,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume) if (phys_volume->mHullPoints && phys_volume->mHullIndices) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - + llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0); LLVertexBuffer::unbind(); glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints); glColor4fv(line_color.mV); diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index bd41aa64f0..e8abee2fb7 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -45,6 +45,7 @@ #include "llagentwearables.h" #include "llwearable.h" #include "llviewercontrol.h" +#include "llviewershadermgr.h" #include "llviewervisualparam.h" //#include "../tools/imdebug/imdebug.h" @@ -294,11 +295,17 @@ BOOL LLTexLayerSetBuffer::render() BOOL success = TRUE; + //hack to use fixed function when updating tex layer sets + bool no_ff = LLGLSLShader::sNoFixedFunction; + LLGLSLShader::sNoFixedFunction = false; + // Composite the color data LLGLSUIDefault gls_ui; success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight ); gGL.flush(); + LLGLSLShader::sNoFixedFunction = no_ff; + if(upload_now) { if (!success) diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 911fc8e1ed..39053fe9e4 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -616,6 +616,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion") && gSavedSettings.getBOOL("UseOcclusion") && gGLManager.mHasOcclusionQuery) ? 2 : 0; + LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName(); /*if (LLPipeline::sUseOcclusion && LLPipeline::sRenderDeferred) { //force occlusion on for all render types if doing deferred render (tighter shadow frustum) @@ -709,6 +710,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } + LLGLState::checkStates(); + LLGLState::checkClientArrays(); + //if (!for_snapshot) { LLMemType mt_gw(LLMemType::MTYPE_DISPLAY_GEN_REFLECTION); @@ -717,6 +721,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gPipeline.generateHighlight(*LLViewerCamera::getInstance()); } + LLGLState::checkStates(); + LLGLState::checkClientArrays(); + ////////////////////////////////////// // // Update images, using the image stats generated during object update/culling @@ -743,6 +750,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) LLImageGL::deleteDeadTextures(); stop_glerror(); } + + LLGLState::checkStates(); + LLGLState::checkClientArrays(); + /////////////////////////////////// // // StateSort @@ -770,6 +781,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) } } + LLGLState::checkStates(); + LLGLState::checkClientArrays(); + LLPipeline::sUseOcclusion = occlusion; { @@ -828,6 +842,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE; LLPipeline::refreshRenderDeferred(); + LLGLState::checkStates(); + LLGLState::checkClientArrays(); + stop_glerror(); if (to_texture) @@ -878,6 +895,14 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) stop_glerror(); } + for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++) + { //dummy cleanup of any currently bound textures + if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE) + { + gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType()); + gGL.getTexUnit(i)->disable(); + } + } LLAppViewer::instance()->pingMainloopTimeout("Display:RenderFlush"); if (to_texture) @@ -1339,7 +1364,7 @@ void render_ui_2d() } stop_glerror(); - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); // render outline for HUD if (isAgentAvatarValid() && gAgentCamera.mHUDCurZoom < 0.98f) diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index e473901609..812b03a2e6 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -61,6 +61,14 @@ BOOL LLViewerShaderMgr::sInitialized = FALSE; LLVector4 gShinyOrigin; +//utility shaders +LLGLSLShader gOcclusionProgram; +LLGLSLShader gUIProgram; +LLGLSLShader gCustomAlphaProgram; +LLGLSLShader gGlowCombineProgram; +LLGLSLShader gTwoTextureAddProgram; +LLGLSLShader gSolidColorProgram; + //object shaders LLGLSLShader gObjectSimpleProgram; LLGLSLShader gObjectSimpleWaterProgram; @@ -70,6 +78,7 @@ LLGLSLShader gObjectFullbrightShinyProgram; LLGLSLShader gObjectFullbrightShinyWaterProgram; LLGLSLShader gObjectShinyProgram; LLGLSLShader gObjectShinyWaterProgram; +LLGLSLShader gObjectBumpProgram; LLGLSLShader gObjectSimpleNonIndexedProgram; LLGLSLShader gObjectSimpleNonIndexedWaterProgram; @@ -169,6 +178,13 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gWaterProgram); mShaderList.push_back(&gAvatarEyeballProgram); mShaderList.push_back(&gObjectSimpleProgram); + mShaderList.push_back(&gObjectBumpProgram); + mShaderList.push_back(&gUIProgram); + mShaderList.push_back(&gCustomAlphaProgram); + mShaderList.push_back(&gGlowCombineProgram); + mShaderList.push_back(&gTwoTextureAddProgram); + mShaderList.push_back(&gSolidColorProgram); + mShaderList.push_back(&gOcclusionProgram); mShaderList.push_back(&gObjectFullbrightProgram); mShaderList.push_back(&gObjectFullbrightShinyProgram); mShaderList.push_back(&gObjectFullbrightShinyWaterProgram); @@ -410,9 +426,13 @@ void LLViewerShaderMgr::setShaders() } mMaxAvatarShaderLevel = 0; + LLGLSLShader::sNoFixedFunction = false; if (LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable") && gSavedSettings.getBOOL("VertexShaderEnable")) { + //using shaders, disable fixed function + LLGLSLShader::sNoFixedFunction = true; + S32 light_class = 2; S32 env_class = 2; S32 obj_class = 2; @@ -554,6 +574,7 @@ void LLViewerShaderMgr::setShaders() } else { + LLGLSLShader::sNoFixedFunction = false; gPipeline.mVertexShadersEnabled = FALSE; gPipeline.mVertexShadersLoaded = 0; mVertexShaderLevel[SHADER_LIGHTING] = 0; @@ -568,6 +589,7 @@ void LLViewerShaderMgr::setShaders() } else { + LLGLSLShader::sNoFixedFunction = false; gPipeline.mVertexShadersEnabled = FALSE; gPipeline.mVertexShadersLoaded = 0; mVertexShaderLevel[SHADER_LIGHTING] = 0; @@ -591,7 +613,15 @@ void LLViewerShaderMgr::setShaders() void LLViewerShaderMgr::unloadShaders() { + gOcclusionProgram.unload(); + gUIProgram.unload(); + gCustomAlphaProgram.unload(); + gGlowCombineProgram.unload(); + gTwoTextureAddProgram.unload(); + gSolidColorProgram.unload(); + gObjectSimpleProgram.unload(); + gObjectBumpProgram.unload(); gObjectSimpleWaterProgram.unload(); gObjectFullbrightProgram.unload(); gObjectFullbrightWaterProgram.unload(); @@ -1581,6 +1611,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectFullbrightShinyWaterProgram.unload(); gObjectShinyWaterProgram.unload(); gObjectSimpleProgram.unload(); + gObjectBumpProgram.unload(); gObjectSimpleWaterProgram.unload(); gObjectFullbrightProgram.unload(); gObjectFullbrightWaterProgram.unload(); @@ -1751,6 +1782,22 @@ BOOL LLViewerShaderMgr::loadShadersObject() success = gObjectSimpleProgram.createShader(NULL, NULL); } + if (success) + { + gObjectBumpProgram.mName = "Bump Shader"; + /*gObjectBumpProgram.mFeatures.calculatesLighting = true; + gObjectBumpProgram.mFeatures.calculatesAtmospherics = true; + gObjectBumpProgram.mFeatures.hasGamma = true; + gObjectBumpProgram.mFeatures.hasAtmospherics = true; + gObjectBumpProgram.mFeatures.hasLighting = true; + gObjectBumpProgram.mFeatures.mIndexedTextureChannels = 0;*/ + gObjectBumpProgram.mShaderFiles.clear(); + gObjectBumpProgram.mShaderFiles.push_back(make_pair("objects/bumpV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectBumpProgram.mShaderFiles.push_back(make_pair("objects/bumpF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectBumpProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + success = gObjectBumpProgram.createShader(NULL, NULL); + } + if (success) { gObjectSimpleWaterProgram.mName = "Simple Water Shader"; @@ -2135,6 +2182,85 @@ BOOL LLViewerShaderMgr::loadShadersInterface() success = gHighlightProgram.createShader(NULL, NULL); } + if (success) + { + gUIProgram.mName = "UI Shader"; + gUIProgram.mShaderFiles.clear(); + gUIProgram.mShaderFiles.push_back(make_pair("interface/uiV.glsl", GL_VERTEX_SHADER_ARB)); + gUIProgram.mShaderFiles.push_back(make_pair("interface/uiF.glsl", GL_FRAGMENT_SHADER_ARB)); + gUIProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gUIProgram.createShader(NULL, NULL); + } + + if (success) + { + gCustomAlphaProgram.mName = "Custom Alpha Shader"; + gCustomAlphaProgram.mShaderFiles.clear(); + gCustomAlphaProgram.mShaderFiles.push_back(make_pair("interface/customalphaV.glsl", GL_VERTEX_SHADER_ARB)); + gCustomAlphaProgram.mShaderFiles.push_back(make_pair("interface/customalphaF.glsl", GL_FRAGMENT_SHADER_ARB)); + gCustomAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gCustomAlphaProgram.createShader(NULL, NULL); + } + + if (success) + { + gGlowCombineProgram.mName = "Glow Combine Shader"; + gGlowCombineProgram.mShaderFiles.clear(); + gGlowCombineProgram.mShaderFiles.push_back(make_pair("interface/glowcombineV.glsl", GL_VERTEX_SHADER_ARB)); + gGlowCombineProgram.mShaderFiles.push_back(make_pair("interface/glowcombineF.glsl", GL_FRAGMENT_SHADER_ARB)); + gGlowCombineProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gGlowCombineProgram.createShader(NULL, NULL); + if (success) + { + gGlowCombineProgram.bind(); + gGlowCombineProgram.uniform1i("glowMap", 0); + gGlowCombineProgram.uniform1i("screenMap", 1); + gGlowCombineProgram.unbind(); + } + } + + if (success) + { + gTwoTextureAddProgram.mName = "Two Texture Add Shader"; + gTwoTextureAddProgram.mShaderFiles.clear(); + gTwoTextureAddProgram.mShaderFiles.push_back(make_pair("interface/twotextureaddV.glsl", GL_VERTEX_SHADER_ARB)); + gTwoTextureAddProgram.mShaderFiles.push_back(make_pair("interface/twotextureaddF.glsl", GL_FRAGMENT_SHADER_ARB)); + gTwoTextureAddProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gTwoTextureAddProgram.createShader(NULL, NULL); + if (success) + { + gTwoTextureAddProgram.bind(); + gTwoTextureAddProgram.uniform1i("tex0", 0); + gTwoTextureAddProgram.uniform1i("tex1", 1); + } + } + + if (success) + { + gSolidColorProgram.mName = "Solid Color Shader"; + gSolidColorProgram.mShaderFiles.clear(); + gSolidColorProgram.mShaderFiles.push_back(make_pair("interface/solidcolorV.glsl", GL_VERTEX_SHADER_ARB)); + gSolidColorProgram.mShaderFiles.push_back(make_pair("interface/solidcolorF.glsl", GL_FRAGMENT_SHADER_ARB)); + gSolidColorProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gSolidColorProgram.createShader(NULL, NULL); + if (success) + { + gSolidColorProgram.bind(); + gSolidColorProgram.uniform1i("tex0", 0); + gSolidColorProgram.unbind(); + } + } + + if (success) + { + gOcclusionProgram.mName = "Occlusion Shader"; + gOcclusionProgram.mShaderFiles.clear(); + gOcclusionProgram.mShaderFiles.push_back(make_pair("interface/occlusionV.glsl", GL_VERTEX_SHADER_ARB)); + gOcclusionProgram.mShaderFiles.push_back(make_pair("interface/occlusionF.glsl", GL_FRAGMENT_SHADER_ARB)); + gOcclusionProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gOcclusionProgram.createShader(NULL, NULL); + } + if( !success ) { mVertexShaderLevel[SHADER_INTERFACE] = 0; diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index efef9ec5b2..6b22e83a9f 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -287,6 +287,18 @@ inline bool operator != (LLViewerShaderMgr::shader_iter const & a, LLViewerShade extern LLVector4 gShinyOrigin; +//utility shaders +extern LLGLSLShader gOcclusionProgram; +extern LLGLSLShader gUIProgram; +extern LLGLSLShader gCustomAlphaProgram; +extern LLGLSLShader gGlowCombineProgram; + +//output tex0[tc0] + tex1[tc1] +extern LLGLSLShader gTwoTextureAddProgram; + +//output vec4(color.rgb,color.a*tex0[tc0].a) +extern LLGLSLShader gSolidColorProgram; + //object shaders extern LLGLSLShader gObjectSimpleProgram; extern LLGLSLShader gObjectSimpleWaterProgram; @@ -296,6 +308,7 @@ extern LLGLSLShader gObjectFullbrightProgram; extern LLGLSLShader gObjectFullbrightWaterProgram; extern LLGLSLShader gObjectFullbrightNonIndexedProgram; extern LLGLSLShader gObjectFullbrightNonIndexedWaterProgram; +extern LLGLSLShader gObjectBumpProgram; extern LLGLSLShader gObjectSimpleLODProgram; extern LLGLSLShader gObjectFullbrightLODProgram; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 4da0f80a00..5fcc57bc91 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -599,7 +599,7 @@ bool LLViewerTexture::bindDefaultImage(S32 stage) } if (!res && LLViewerTexture::sNullImagep.notNull() && (this != LLViewerTexture::sNullImagep)) { - res = gGL.getTexUnit(stage)->bind(LLViewerTexture::sNullImagep) ; + res = gGL.getTexUnit(stage)->bind(LLViewerTexture::sNullImagep); } if (!res) { diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index d24174adea..30ef8b8a29 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -115,7 +115,7 @@ void LLViewerTextureList::doPreloadImages() // Set the "white" image LLViewerFetchedTexture::sWhiteImagep = LLViewerTextureManager::getFetchedTextureFromFile("white.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI); - + LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName(); LLUIImageList* image_list = LLUIImageList::getInstance(); image_list->initFromFile(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index cff166b825..1e056898d5 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2296,6 +2296,11 @@ void LLViewerWindow::draw() // Draw all nested UI views. // No translation needed, this view is glued to 0,0 + if (LLGLSLShader::sNoFixedFunction) + { + gUIProgram.bind(); + } + gGL.pushMatrix(); LLUI::pushMatrix(); { @@ -2370,6 +2375,11 @@ void LLViewerWindow::draw() LLUI::popMatrix(); gGL.popMatrix(); + if (LLGLSLShader::sNoFixedFunction) + { + gUIProgram.unbind(); + } + //#if LL_DEBUG LLView::sIsDrawing = FALSE; //#endif diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index cd2bbad620..9dc6b5194e 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -7049,6 +7049,8 @@ LLVivoxProtocolParser::~LLVivoxProtocolParser() XML_ParserFree(parser); } +//static LLFastTimer::DeclareTimer FTM_VIVOX_PROCESS("Vivox Process"); + // virtual LLIOPipe::EStatus LLVivoxProtocolParser::process_impl( const LLChannelDescriptors& channels, @@ -7057,6 +7059,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl( LLSD& context, LLPumpIO* pump) { + //LLFastTimer t(FTM_VIVOX_PROCESS); LLBufferStream istr(channels, buffer.get()); std::ostringstream ostr; while (istr.good()) diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 3c7fe708e6..890861df71 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -51,6 +51,7 @@ #include "llspatialpartition.h" #include "llnotificationsutil.h" #include "raytrace.h" +#include "llglslshader.h" extern LLPipeline gPipeline; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e74bf2a620..8372c2430b 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1983,6 +1983,14 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl LLGLDepthTest depth(GL_TRUE, GL_FALSE); + bool bound_shader = false; + if (gPipeline.canUseVertexShaders() && LLGLSLShader::sCurBoundShader == 0) + { //if no shader is currently bound, use the occlusion shader instead of fixed function if we can + // (shadow render uses a special shader that clamps to clip planes) + bound_shader = true; + gOcclusionProgram.bind(); + } + for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); iter != LLWorld::getInstance()->getRegionList().end(); ++iter) { @@ -2010,6 +2018,11 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl } } + if (bound_shader) + { + gOcclusionProgram.unbind(); + } + camera.disableUserClipPlane(); if (hasRenderType(LLPipeline::RENDER_TYPE_SKY) && @@ -2133,7 +2146,12 @@ void LLPipeline::doOcclusion(LLCamera& camera) LLGLDepthTest depth(GL_TRUE, GL_FALSE); LLGLDisable cull(GL_CULL_FACE); - + + if (canUseVertexShaders()) + { + gOcclusionProgram.bind(); + } + for (LLCullResult::sg_list_t::iterator iter = sCull->beginOcclusionGroups(); iter != sCull->endOcclusionGroups(); ++iter) { LLSpatialGroup* group = *iter; @@ -2141,6 +2159,11 @@ void LLPipeline::doOcclusion(LLCamera& camera) group->clearOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION); } + if (canUseVertexShaders()) + { + gOcclusionProgram.unbind(); + } + gGL.setColorMask(true, false); } } @@ -3249,6 +3272,11 @@ void render_hud_elements() gGL.color4f(1,1,1,1); if (!LLPipeline::sReflectionRender && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) { + if (LLGLSLShader::sNoFixedFunction) + { + gUIProgram.bind(); + } + LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0); gViewerWindow->renderSelections(FALSE, FALSE, FALSE); // For HUD version in render_ui_3d() @@ -3262,6 +3290,10 @@ void render_hud_elements() // Render name tags. LLHUDObject::renderAll(); + if (LLGLSLShader::sNoFixedFunction) + { + gUIProgram.unbind(); + } } else if (gForceRenderLandFence) { @@ -3599,8 +3631,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) check_stack_depth(stack_depth); std::string msg = llformat("pass %d", i); LLGLState::checkStates(msg); - LLGLState::checkTextureChannels(msg); - LLGLState::checkClientArrays(msg); + //LLGLState::checkTextureChannels(msg); + //LLGLState::checkClientArrays(msg); } } } @@ -3638,16 +3670,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLVertexBuffer::unbind(); LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); - - - - stop_glerror(); - - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); + //LLGLState::checkTextureChannels(); + //LLGLState::checkClientArrays(); LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights"); @@ -3701,8 +3725,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLVertexBuffer::unbind(); LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); +// LLGLState::checkTextureChannels(); +// LLGLState::checkClientArrays(); } void LLPipeline::renderGeomDeferred(LLCamera& camera) @@ -6449,30 +6473,39 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) LLGLDisable blend(GL_BLEND); - //tex unit 0 - gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR); - - gGL.getTexUnit(0)->bind(&mGlow[1]); - gGL.getTexUnit(1)->activate(); - gGL.getTexUnit(1)->enable(LLTexUnit::TT_RECT_TEXTURE); - - - //tex unit 1 - gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR); + if (LLGLSLShader::sNoFixedFunction) + { + gGlowCombineProgram.bind(); + } + else + { + //tex unit 0 + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR); + //tex unit 1 + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR); + } + gGL.getTexUnit(0)->bind(&mGlow[1]); gGL.getTexUnit(1)->bind(&mScreen); - gGL.getTexUnit(1)->activate(); LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0); buff->setBuffer(mask); buff->drawArrays(LLRender::TRIANGLE_STRIP, 0, 3); - gGL.getTexUnit(1)->disable(); - gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT); + if (LLGLSLShader::sNoFixedFunction) + { + gGlowCombineProgram.unbind(); + } + else + { + gGL.getTexUnit(1)->disable(); + gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT); - gGL.getTexUnit(0)->activate(); - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + gGL.getTexUnit(0)->activate(); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + } + } if (LLRenderTarget::sUseFBO) @@ -6485,6 +6518,11 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES)) { + if (LLGLSLShader::sNoFixedFunction) + { + gUIProgram.bind(); + } + gGL.setColorMask(true, false); LLVector2 tc1(0,0); @@ -6508,6 +6546,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) gGL.end(); gGL.flush(); + + if (LLGLSLShader::sNoFixedFunction) + { + gUIProgram.unbind(); + } + } glMatrixMode(GL_PROJECTION); @@ -8063,8 +8107,8 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLViewerCamera::getInstance()->setUserClipPlane(npnorm); LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); + //LLGLState::checkTextureChannels(); + //LLGLState::checkClientArrays(); if (!skip_avatar_update) { @@ -8197,6 +8241,10 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera LLVertexBuffer::unbind(); { + if (!use_shader) + { //occlusion program is general purpose depth-only no-textures + gOcclusionProgram.bind(); + } LLFastTimer ftm(FTM_SHADOW_SIMPLE); LLGLDisable test(GL_ALPHA_TEST); gGL.getTexUnit(0)->disable(); @@ -8205,6 +8253,10 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera renderObjects(types[i], LLVertexBuffer::MAP_VERTEX, FALSE); } gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); + if (!use_shader) + { + gOcclusionProgram.unbind(); + } } if (use_shader) diff --git a/shining-fixes_rev18977.patch b/shining-fixes_rev18977.patch new file mode 100644 index 0000000000..b711da870a --- /dev/null +++ b/shining-fixes_rev18977.patch @@ -0,0 +1,41 @@ +# HG changeset patch +# User Dave Parks +# Date 1308673064 18000 +# Node ID 95c5639a3f80920e8dc54703d894517dd7694edf +# Parent 6af10678de4736222b2c3f7e010e984fb5b327de +SH-208 Disable VBO on all intel graphics chips (stability improvement). + +diff -r 6af10678de47 -r 95c5639a3f80 indra/newview/featuretable.txt +--- a/indra/newview/featuretable.txt Mon Jun 20 16:42:31 2011 -0700 ++++ b/indra/newview/featuretable.txt Tue Jun 21 11:17:44 2011 -0500 +@@ -1,4 +1,4 @@ +-version 29 ++version 30 + + // NOTE: This is mostly identical to featuretable_mac.txt with a few differences + // Should be combined into one table +@@ -297,6 +297,7 @@ + + list Intel + RenderAnisotropic 1 0 ++RenderVBOEnable 1 0 + + list GeForce2 + RenderAnisotropic 1 0 +diff -r 6af10678de47 -r 95c5639a3f80 indra/newview/featuretable_xp.txt +--- a/indra/newview/featuretable_xp.txt Mon Jun 20 16:42:31 2011 -0700 ++++ b/indra/newview/featuretable_xp.txt Tue Jun 21 11:17:44 2011 -0500 +@@ -1,4 +1,4 @@ +-version 29 ++version 30 + + // NOTE: This is mostly identical to featuretable_mac.txt with a few differences + // Should be combined into one table +@@ -295,6 +295,7 @@ + + list Intel + RenderAnisotropic 1 0 ++RenderVBOEnable 1 0 + + list GeForce2 + RenderAnisotropic 1 0 -- cgit v1.2.3 From 9077f7722b3ab2b6dda7e5c13cee3fd59d7dbf53 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Sun, 17 Jul 2011 09:51:29 -0400 Subject: Decided against using Boost.Filesystem, remove from link --- indra/llcommon/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 09a05689f4..c755020a64 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -317,8 +317,7 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(lllazy "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llprocessor "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llsdserialize "" - "${test_libs};${BOOST_FILESYSTEM_LIBRARY};${BOOST_SYSTEM_LIBRARY}" + LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}" "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/setpython.py") LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}") -- cgit v1.2.3 From 190ff3c346ae8f86b4533fd03f7a0dcb0808dde3 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 18 Jul 2011 10:39:02 -0500 Subject: SH-2031 Fix for link error in llui_libtest --- indra/llrender/llglslshader.cpp | 4 ++++ indra/llrender/llglslshader.h | 6 ++++++ indra/newview/llviewershadermgr.cpp | 2 -- indra/newview/llviewershadermgr.h | 4 ---- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index c582858413..80c93bb0d2 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -51,6 +51,10 @@ using std::string; GLhandleARB LLGLSLShader::sCurBoundShader = 0; bool LLGLSLShader::sNoFixedFunction = false; +//UI shader -- declared here so llui_libtest will link properly +LLGLSLShader gUIProgram; +LLGLSLShader gSolidColorProgram; + BOOL shouldChange(const LLVector4& v1, const LLVector4& v2) { return v1 != v2; diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 24562c3c42..621e0b82ee 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -142,4 +142,10 @@ public: std::string mName; }; +//UI shader (declared here so llui_libtest will link properly) +extern LLGLSLShader gUIProgram; +//output vec4(color.rgb,color.a*tex0[tc0].a) +extern LLGLSLShader gSolidColorProgram; + + #endif diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 812b03a2e6..a772777495 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -63,11 +63,9 @@ LLVector4 gShinyOrigin; //utility shaders LLGLSLShader gOcclusionProgram; -LLGLSLShader gUIProgram; LLGLSLShader gCustomAlphaProgram; LLGLSLShader gGlowCombineProgram; LLGLSLShader gTwoTextureAddProgram; -LLGLSLShader gSolidColorProgram; //object shaders LLGLSLShader gObjectSimpleProgram; diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index 6b22e83a9f..93a0ecc4f0 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -289,16 +289,12 @@ extern LLVector4 gShinyOrigin; //utility shaders extern LLGLSLShader gOcclusionProgram; -extern LLGLSLShader gUIProgram; extern LLGLSLShader gCustomAlphaProgram; extern LLGLSLShader gGlowCombineProgram; //output tex0[tc0] + tex1[tc1] extern LLGLSLShader gTwoTextureAddProgram; -//output vec4(color.rgb,color.a*tex0[tc0].a) -extern LLGLSLShader gSolidColorProgram; - //object shaders extern LLGLSLShader gObjectSimpleProgram; extern LLGLSLShader gObjectSimpleWaterProgram; -- cgit v1.2.3 From 2eaadf902406fbdf6feb5e3e39a9f07f3369fc17 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 18 Jul 2011 12:22:54 -0500 Subject: SH-2031 Fix for shadow render targets using inappropriate shader for occlusion culling resulting in objects popping in and out of the shadow map. --- indra/newview/pipeline.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 8372c2430b..bd801ae4c2 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2147,9 +2147,18 @@ void LLPipeline::doOcclusion(LLCamera& camera) LLGLDisable cull(GL_CULL_FACE); - if (canUseVertexShaders()) + + bool bind_shader = LLGLSLShader::sNoFixedFunction && LLGLSLShader::sCurBoundShader == 0; + if (bind_shader) { - gOcclusionProgram.bind(); + if (LLPipeline::sShadowRender) + { + gDeferredShadowProgram.bind(); + } + else + { + gOcclusionProgram.bind(); + } } for (LLCullResult::sg_list_t::iterator iter = sCull->beginOcclusionGroups(); iter != sCull->endOcclusionGroups(); ++iter) @@ -2159,9 +2168,16 @@ void LLPipeline::doOcclusion(LLCamera& camera) group->clearOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION); } - if (canUseVertexShaders()) + if (bind_shader) { - gOcclusionProgram.unbind(); + if (LLPipeline::sShadowRender) + { + gDeferredShadowProgram.unbind(); + } + else + { + gOcclusionProgram.unbind(); + } } gGL.setColorMask(true, false); -- cgit v1.2.3 From 808521393ce57218cf82a559e362930fa967a0bb Mon Sep 17 00:00:00 2001 From: eli Date: Mon, 18 Jul 2011 15:01:41 -0700 Subject: sync with viewer-development --- indra/newview/skins/default/xui/en/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 022c97f341..c1c1151eb9 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -18,6 +18,7 @@ Clearing cache... Initializing Texture Cache... Initializing VFS... + Graphics Initialization Failed. Please Update Your Graphics Driver! Restoring... -- cgit v1.2.3 From 3ce04f335e640ef9a00b00aae94ef2de841a1f7b Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Mon, 18 Jul 2011 18:25:47 -0400 Subject: SH-1904 FIX (cherry pick from original by bao) --- indra/newview/llmeshrepository.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 78e2716be2..7ddc0db20d 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1399,7 +1399,8 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures) instance_entry["face_list"] = LLSD::emptyArray(); - for (S32 face_num = 0; face_num < data.mBaseModel->getNumVolumeFaces(); face_num++) + S32 end = llmin((S32)data.mBaseModel->mMaterialList.size(), data.mBaseModel->getNumVolumeFaces()) ; + for (S32 face_num = 0; face_num < end; face_num++) { LLImportMaterial& material = instance.mMaterial[data.mBaseModel->mMaterialList[face_num]]; LLSD face_entry = LLSD::emptyMap(); -- cgit v1.2.3 From 677609b7224b2cd1e02e5866218f2e0d1fce57ba Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Tue, 19 Jul 2011 09:05:54 -0400 Subject: Per Josh's comments in http://codereview.lindenlab.com/6510035/ Instead of low-level open(O_CREAT | O_EXCL) loop on all platforms, use GetTempFileName() on Windows and mkstemp() elsewhere. Don't append a final newline to NamedTempFile: use caller's data literally. Tweak a couple comments. --- indra/llcommon/tests/llsdserialize_test.cpp | 179 +++++++++++++++++++++------- 1 file changed, 133 insertions(+), 46 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 7ce7ada29e..1fe3dc13c0 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -37,12 +37,12 @@ typedef U32 uint32_t; #include #include #include +#include +#include #include #include "llprocesslauncher.h" #endif -#include -#include #include /*==========================================================================*| @@ -89,6 +89,45 @@ std::vector string_to_vector(const std::string& str) return std::vector(str.begin(), str.end()); } +#if ! LL_WINDOWS +// We want to call strerror_r(), but alarmingly, there are two different +// variants. The one that returns int always populates the passed buffer +// (except in case of error), whereas the other one always returns a valid +// char* but might or might not populate the passed buffer. How do we know +// which one we're getting? Define adapters for each and let the compiler +// select the applicable adapter. + +// strerror_r() returns char* +std::string message_from(int /*orig_errno*/, const char* /*buffer*/, const char* strerror_ret) +{ + return strerror_ret; +} + +// strerror_r() returns int +std::string message_from(int orig_errno, const char* buffer, int strerror_ret) +{ + if (strerror_ret == 0) + { + return buffer; + } + // Here strerror_r() has set errno. Since strerror_r() has already failed, + // seems like a poor bet to call it again to diagnose its own error... + int stre_errno = errno; + if (stre_errno == ERANGE) + { + return STRINGIZE("strerror_r() can't explain errno " << orig_errno + << " (buffer too small)"); + } + if (stre_errno == EINVAL) + { + return STRINGIZE("unknown errno " << orig_errno); + } + // Here we don't even understand the errno from strerror_r()! + return STRINGIZE("strerror_r() can't explain errno " << orig_errno + << " (error " << stre_errno << ')'); +} +#endif // ! LL_WINDOWS + // boost::filesystem::temp_directory_path() isn't yet in Boost 1.45! :-( std::string temp_directory_path() { @@ -119,11 +158,6 @@ std::string temp_directory_path() #define _write write #define _close close #define _remove remove -#define _O_WRONLY O_WRONLY -#define _O_CREAT O_CREAT -#define _O_EXCL O_EXCL -#define _S_IWRITE S_IWUSR -#define _S_IREAD S_IRUSR #endif // ! LL_WINDOWS // Create a text file with specified content "somewhere in the @@ -165,6 +199,11 @@ public: private: void createFile(const std::string& ext, const Streamer& func) { + // Silly maybe, but use 'ext' as the name prefix. Strip off a leading + // '.' if present. + int pfx_offset = ((! ext.empty()) && ext[0] == '.')? 1 : 0; + +#if ! LL_WINDOWS // Make sure mPath ends with a directory separator, if it doesn't already. if (mPath.empty() || ! (mPath[mPath.length() - 1] == '\\' || mPath[mPath.length() - 1] == '/')) @@ -172,49 +211,92 @@ private: mPath.append("/"); } - // Open a file with a unique name in the mPath directory. - int fd(-1); - for (int i(0);; ++i) + // mkstemp() accepts and modifies a char* template string. Generate + // the template string, then copy to modifiable storage. + // mkstemp() requires its template string to end in six X's. + mPath += ext.substr(pfx_offset) + "XXXXXX"; + // Copy to vector + std::vector pathtemplate(mPath.begin(), mPath.end()); + // append a nul byte for classic-C semantics + pathtemplate.push_back('\0'); + // std::vector promises that a pointer to the 0th element is the same + // as a pointer to a contiguous classic-C array + int fd(mkstemp(&pathtemplate[0])); + if (fd == -1) { - // Append an integer name to mPath. It need not be zero-filled, - // but I think it's neater that way. - std::string testname(STRINGIZE(mPath - << std::setw(8) << std::setfill('0') << i - << ext)); - // The key to this whole loop is the _O_CREAT | _O_EXCL bitmask, - // which requests error EEXIST if the file already exists. A - // proper implementation will check atomically, ensuring that - // racing processes will end up with two different filenames. - fd = _open(testname.c_str(), - _O_WRONLY | _O_CREAT | _O_EXCL, - _S_IREAD | _S_IWRITE); - if (fd != -1) // managed to open the file + // The documented errno values (http://linux.die.net/man/3/mkstemp) + // are used in a somewhat unusual way, so provide context-specific + // errors. + if (errno == EEXIST) + { + LL_ERRS("NamedTempFile") << "mkstemp(\"" << mPath + << "\") could not create unique file " << LL_ENDL; + } + if (errno == EINVAL) { - mPath = testname; // remember its actual name - break; + LL_ERRS("NamedTempFile") << "bad mkstemp() file path template '" + << mPath << "'" << LL_ENDL; } - // This loop is specifically coded to handle EEXIST. Any other - // error is a problem. - llassert_always(errno == EEXIST); - // loop back to try another filename + // Shrug, something else + int mkst_errno = errno; + char buffer[256]; + LL_ERRS("NamedTempFile") << "mkstemp(\"" << mPath << "\") failed: " + << message_from(mkst_errno, buffer, + strerror_r(mkst_errno, buffer, sizeof(buffer))) + << LL_ENDL; } - // fd is open, its name is in mPath: write it and close it. + // mkstemp() seems to have worked! Capture the modified filename. + // Avoid the nul byte we appended. + mPath.assign(pathtemplate.begin(), (pathtemplate.end()-1)); /*==========================================================================*| // Define an ostream on the open fd. Tell it to close fd on destruction. boost::iostreams::stream out(fd, boost::iostreams::close_handle); |*==========================================================================*/ + + // Write desired content. std::ostringstream out; // Stream stuff to it. func(out); - // toss in a final newline for good measure - out << '\n'; std::string data(out.str()); int written(_write(fd, data.c_str(), data.length())); int closed(_close(fd)); llassert_always(written == data.length() && closed == 0); + +#else // LL_WINDOWS + // GetTempFileName() is documented to require a MAX_PATH buffer. + char tempname[MAX_PATH]; + // Use 'ext' as filename prefix, but skip leading '.' if any. + // The 0 param is very important: requests iterating until we get a + // unique name. + if (0 == GetTempFileNameA(mPath.c_str(), ext.c_str() + pfx_offset, 0, tempname)) + { + // I always have to look up this call... :-P + LPVOID msgptr; + FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + LPTSTR(&lpMsgBuf), + 0, NULL ); + LL_ERRS("NamedTempFile") << "GetTempFileName(\"" << mPath << "\", \"" + << (ext.c_str() + pfx_offset) << "\") failed: " + << msgptr << LL_ENDL; + LocalFree(msgptr); + } + // GetTempFileName() appears to have worked! Capture the actual + // filename. + mPath = tempname; + // Open the file and stream content to it. Destructor will close. + std::ofstream out(tempname); + func(out); + +#endif // LL_WINDOWS } void peep() @@ -1674,14 +1756,13 @@ namespace tut struct TestPythonCompatible { TestPythonCompatible(): - // Note the peculiar insertion of __FILE__ into this string. - // Normally I like to make a Python script navigate relative to - // its own placement in the repo directory tree (__file__) -- but - // in this case, the script is being written into a platform- - // dependent temp directory! So locate indra/lib/python relative - // to this C++ source file rather than the Python module. - // Use Python raw-string syntax so Windows pathname backslashes - // won't mislead Python's string scanner. + // Note the peculiar insertion of __FILE__ into this string. Since + // this script is being written into a platform-dependent temp + // directory, we can't locate indra/lib/python relative to + // Python's __file__. Use __FILE__ instead, navigating relative + // to this C++ source file. Use Python raw-string syntax so + // Windows pathname backslashes won't mislead Python's string + // scanner. import_llsd("import os.path\n" "import sys\n" "sys.path.insert(0,\n" @@ -1708,7 +1789,7 @@ namespace tut std::string q("\""); std::string qPYTHON(q + PYTHON + q); std::string qscript(q + scriptfile.getName() + q); - int rc(_spawnl(_P_WAIT, PYTHON, qPYTHON.c_str(), qscript.c_str(), NULL)); + int rc = _spawnl(_P_WAIT, PYTHON, qPYTHON.c_str(), qscript.c_str(), NULL); if (rc == -1) { char buffer[256]; @@ -1768,7 +1849,7 @@ namespace tut set_test_name("verify python()"); python("hello", "import sys\n" - "sys.exit(17)", + "sys.exit(17)\n", 17); // expect nonzero rc } @@ -1778,7 +1859,7 @@ namespace tut set_test_name("verify NamedTempFile"); python("platform", "import sys\n" - "print 'Running on', sys.platform"); + "print 'Running on', sys.platform\n"); } template<> template<> @@ -1811,14 +1892,20 @@ namespace tut // notation. It's important to separate with newlines because Python's // llsd module doesn't support parsing from a file stream, only from a // string, so we have to know how much of the file to read into a - // string. Avoid final newline because NamedTempFile implicitly adds - // one. + // string. NamedTempFile file(".llsd", + // NamedTempFile's boost::function constructor + // takes a callable. To this callable it passes the + // std::ostream with which it's writing the + // NamedTempFile. This lambda-based expression + // first calls LLSD::Serialize() with that ostream, + // then streams a newline to it, etc. (lambda::bind(LLSDSerialize::toNotation, cdata[0], lambda::_1), lambda::_1 << '\n', lambda::bind(LLSDSerialize::toNotation, cdata[1], lambda::_1), lambda::_1 << '\n', - lambda::bind(LLSDSerialize::toNotation, cdata[2], lambda::_1))); + lambda::bind(LLSDSerialize::toNotation, cdata[2], lambda::_1), + lambda::_1 << '\n')); python("read C++ notation", lambda::_1 << -- cgit v1.2.3 From 5379467ccb2861d2dbcbc8a13f860d9448bd2fb0 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Tue, 19 Jul 2011 10:18:12 -0400 Subject: Fix copy/paste error in swiped FormatMessage() example code. --- indra/llcommon/tests/llsdserialize_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 1fe3dc13c0..f2a7530f10 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -282,7 +282,7 @@ private: NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - LPTSTR(&lpMsgBuf), + LPTSTR(&msgptr), 0, NULL ); LL_ERRS("NamedTempFile") << "GetTempFileName(\"" << mPath << "\", \"" << (ext.c_str() + pfx_offset) << "\") failed: " -- cgit v1.2.3 From 25ababd7a6e7a1ab7222b760b7bcc8dde3e6b829 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Tue, 19 Jul 2011 10:40:02 -0400 Subject: More FormatMessage compile errors, try again to fix --- indra/llcommon/tests/llsdserialize_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index f2a7530f10..72322c3b72 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -274,7 +274,7 @@ private: if (0 == GetTempFileNameA(mPath.c_str(), ext.c_str() + pfx_offset, 0, tempname)) { // I always have to look up this call... :-P - LPVOID msgptr; + LPSTR msgptr; FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | @@ -282,7 +282,7 @@ private: NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - LPTSTR(&msgptr), + LPSTR(&msgptr), // have to cast (char**) to (char*) 0, NULL ); LL_ERRS("NamedTempFile") << "GetTempFileName(\"" << mPath << "\", \"" << (ext.c_str() + pfx_offset) << "\") failed: " -- cgit v1.2.3 From cf8c7701dfd758a9f19e076baad0a9b8d37bbe5f Mon Sep 17 00:00:00 2001 From: Seth ProductEngine Date: Tue, 19 Jul 2011 20:04:24 +0300 Subject: STORM-1221 FIXED Hard coded dates made localizable under Group Profile Land/Assets. Added a function for parsing a date string of specific format. Added strings defining the date format in Group Profile Land/Assets that should be localized. --- indra/newview/lldateutil.cpp | 27 ++++++++++++++++++ indra/newview/lldateutil.h | 14 +++++++++ indra/newview/llpanelgrouplandmoney.cpp | 39 +++++++++++++++++++++++--- indra/newview/skins/default/xui/en/strings.xml | 2 ++ 4 files changed, 78 insertions(+), 4 deletions(-) diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp index 18ae6107e7..c7fc45f61e 100644 --- a/indra/newview/lldateutil.cpp +++ b/indra/newview/lldateutil.cpp @@ -27,10 +27,16 @@ #include "lldateutil.h" +#include +#include + // Linden libraries #include "lltrans.h" #include "llui.h" +using namespace boost::gregorian; +using namespace boost::posix_time; + static S32 DAYS_PER_MONTH_NOLEAP[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static S32 DAYS_PER_MONTH_LEAP[] = @@ -186,3 +192,24 @@ std::string LLDateUtil::ageFromDate(const std::string& date_string) //{ // return ageFromDateISO(date_string, LLDate::now()); //} + +S32 LLDateUtil::secondsSinceEpochFromString(const std::string& format, const std::string& str) +{ + date_input_facet *facet = new date_input_facet(format); + + std::stringstream ss; + ss << str; + ss.imbue(std::locale(ss.getloc(), facet)); + + date d; + ss >> d; + + ptime time_t_date(d); + ptime time_t_epoch(date(1970,1,1)); + + // We assume that the date defined by str is in UTC, so the difference + // is calculated with no time zone corrections. + time_duration diff = time_t_date - time_t_epoch; + + return diff.total_seconds(); +} diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h index 2843a357c9..f027d360f7 100644 --- a/indra/newview/lldateutil.h +++ b/indra/newview/lldateutil.h @@ -69,6 +69,20 @@ namespace LLDateUtil //std::string ageFromDateISO(const std::string& date_string); //std::string ageFromDate(S32 born_year, S32 born_month, S32 born_day, const LLDate& now); + + /** + * Convert a string of a specified date format into seconds since the Epoch. + * + * Many of the format flags are those used by strftime(...), but not all. + * For the full list of supported time format specifiers + * see http://www.boost.org/doc/libs/1_47_0/doc/html/date_time/date_time_io.html#date_time.format_flags + * + * @param format Format characters string. Example: "%A %b %d, %Y" + * @param str Date string containing the time in specified format. + * + * @return Number of seconds since 01/01/1970 UTC. + */ + S32 secondsSinceEpochFromString(const std::string& format, const std::string& str); } #endif diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 8d8d9bc1c4..eddd6e554d 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -35,6 +35,7 @@ #include "llqueryflags.h" #include "llagent.h" +#include "lldateutil.h" #include "lliconctrl.h" #include "llfloaterreg.h" #include "lllineeditor.h" @@ -1056,6 +1057,14 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg, msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_CurrentInterval, current_interval ); msg->getStringFast(_PREHASH_MoneyData, _PREHASH_StartDate, start_date); + std::string time_str = LLTrans::getString("GroupMoneyDate"); + LLSD substitution; + + // We don't do time zone corrections of the calculated number of seconds + // because we don't have a full time stamp, only a date. + substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%A %b %d, %Y", start_date); + LLStringUtil::format (time_str, substitution); + if ( interval_days != mImplementationp->mIntervalLength || current_interval != mImplementationp->mCurrentInterval ) { @@ -1064,7 +1073,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg, return; } - std::string text = start_date; + std::string text = time_str; text.append("\n\n"); S32 total_amount = 0; @@ -1203,7 +1212,15 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg, // Start with the date. if (text == mImplementationp->mLoadingText) { - text = start_date + "\n\n"; + std::string time_str = LLTrans::getString("GroupMoneyDate"); + LLSD substitution; + + // We don't do time zone corrections of the calculated number of seconds + // because we don't have a full time stamp, only a date. + substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%A %b %d, %Y", start_date); + LLStringUtil::format (time_str, substitution); + + text = time_str + "\n\n"; } S32 transactions = msg->getNumberOfBlocksFast(_PREHASH_HistoryData); @@ -1408,12 +1425,26 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg, } text.append(LLTrans::getString("SummaryForTheWeek")); - text.append(start_date); + + std::string date_format_str = LLTrans::getString("GroupPlanningDate"); + std::string time_str = date_format_str; + LLSD substitution; + // We don't do time zone corrections of the calculated number of seconds + // because we don't have a full time stamp, only a date. + substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%m/%d/%Y", start_date); + LLStringUtil::format (time_str, substitution); + + text.append(time_str); if (current_interval == 0) { text.append(LLTrans::getString("NextStipendDay")); - text.append(next_stipend_date); + + time_str = date_format_str; + substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%m/%d/%Y", next_stipend_date); + LLStringUtil::format (time_str, substitution); + + text.append(time_str); text.append("\n\n"); text.append(llformat("%-24sL$%6d\n", LLTrans::getString("GroupMoneyBalance").c_str(), balance )); text.append(1, '\n'); diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index c1c1151eb9..ee6317f367 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2238,6 +2238,7 @@ Returns a string with the requested data about the region (Unknown) + [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc] Balance @@ -2394,6 +2395,7 @@ Returns a string with the requested data about the region Balance Credits Debits + [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc] Contents -- cgit v1.2.3 From 563c942a346cb44b18c12bb58b639410136b33d9 Mon Sep 17 00:00:00 2001 From: Vadim ProductEngine Date: Tue, 19 Jul 2011 21:21:11 +0300 Subject: STORM-1487 FIXED Changed the "get more gestures" marketplace URL. --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 58b0879fde..9bb320d882 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3848,7 +3848,7 @@ Type String Value - https://www.xstreetsl.com/modules.php?name=Marketplace&CategoryID=233 + https://marketplace.secondlife.com/products/search?search[category_id]=200&search[maturity][]=General&search[page]=1&search[per_page]=12 GridCrossSections -- cgit v1.2.3 From 880a7ebb9298b1cc6b516b894daf4aa09cdc776b Mon Sep 17 00:00:00 2001 From: Paul ProductEngine Date: Tue, 19 Jul 2011 21:24:56 +0300 Subject: STORM-519 FIXED "Delete" is enabled in the context menu for folders which contain worn items - Disable "Delete" menu item in case selected folder contains non-removable items. --- indra/newview/llinventorybridge.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 75d4c4e80d..9f093b8a34 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2514,6 +2514,11 @@ void LLFolderBridge::folderOptionsMenu() } } + if (!isItemRemovable()) + { + disabled_items.push_back(std::string("Delete")); + } + #ifndef LL_RELEASE_FOR_DOWNLOAD if (LLFolderType::lookupIsProtectedType(type)) { -- cgit v1.2.3 From 8b7e33ad36bc33c2356300f8eabc8ddae578070e Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 19 Jul 2011 15:19:07 -0400 Subject: Cherry pick of https://bitbucket.org/lindenlab/mesh-development/changeset/9cea44ebea3b by don, to fix old viewer crashes in mesh regions --- indra/llprimitive/llprimitive.h | 1 + indra/newview/llviewerobject.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h index 76faa1b8c5..8903d8e049 100644 --- a/indra/llprimitive/llprimitive.h +++ b/indra/llprimitive/llprimitive.h @@ -103,6 +103,7 @@ public: PARAMS_LIGHT = 0x20, PARAMS_SCULPT = 0x30, PARAMS_LIGHT_IMAGE = 0x40, + PARAMS_MESH = 0x50, }; public: diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index bbe929b7f7..b5fdca632b 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4877,6 +4877,10 @@ void LLViewerObject::adjustAudioGain(const F32 gain) bool LLViewerObject::unpackParameterEntry(U16 param_type, LLDataPacker *dp) { + if (LLNetworkData::PARAMS_MESH == param_type) + { + param_type = LLNetworkData::PARAMS_SCULPT; + } ExtraParameter* param = getExtraParameterEntryCreate(param_type); if (param) { -- cgit v1.2.3 From 564087f6b01b19b1efd2e0dee72e4bfa5d7fd9e7 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 19 Jul 2011 15:33:43 -0400 Subject: addendum to prim fix --- indra/llprimitive/llprimitive.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) mode change 100644 => 100755 indra/llprimitive/llprimitive.h diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h old mode 100644 new mode 100755 index 8903d8e049..998016f8f6 --- a/indra/llprimitive/llprimitive.h +++ b/indra/llprimitive/llprimitive.h @@ -103,7 +103,8 @@ public: PARAMS_LIGHT = 0x20, PARAMS_SCULPT = 0x30, PARAMS_LIGHT_IMAGE = 0x40, - PARAMS_MESH = 0x50, + PARAMS_RESERVED = 0x50, // Used on server-side + PARAMS_MESH = 0x60, }; public: -- cgit v1.2.3 From 76249c58f64beec0d426ab37397159feeafca2d6 Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Tue, 19 Jul 2011 13:31:32 -0700 Subject: SH-2038 FIX -- [PUBLIC] Severe performance drop on MacBook Pros EXP-997 FIX -- Significant FPS degradation in 2.8.0 Beta on Mac equipped ATI video card * Disabled VBO's on mac to avoid stalls in renderer * Placed valid data into the padding between triangles in the vertex buffer to remove uninitialized craziness * Removed invalid rendering checks causing GL errors in debug mode Reviewed by davep --- indra/newview/featuretable_mac.txt | 4 ++-- indra/newview/lldrawable.cpp | 5 ----- indra/newview/llface.cpp | 12 +++++++++++- indra/newview/pipeline.cpp | 10 ---------- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index f0b1f532a9..fa67ee547c 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 28 +version 29 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -47,7 +47,7 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 -RenderVBOEnable 1 1 +RenderVBOEnable 1 0 RenderVBOMappingDisable 1 0 RenderVolumeLODFactor 1 2.0 UseStartScreen 1 1 diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index a5168fd897..debac9dcbf 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -1524,11 +1524,6 @@ BOOL LLDrawable::isAnimating() const return TRUE; } - if (!LLVertexBuffer::sUseStreamDraw && mVObjp->isFlexible()) - { - return TRUE; - } - return FALSE; } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 59c6e904a1..17b6912b63 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1621,6 +1621,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_pos) { + llassert(num_vertices > 0); + mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, map_range); vertices = (LLVector4a*) vert.get(); @@ -1649,7 +1651,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, index_dst += 4; } while (index_dst < index_end); - + + S32 aligned_pad_vertices = mGeomCount - num_vertices; + LLVector4a* last_vec = end - 1; + while (aligned_pad_vertices > 0) + { + --aligned_pad_vertices; + *dst++ = *last_vec; + } + if (map_range) { mVertexBuffer->setBuffer(0); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index bd801ae4c2..3e35e0e41a 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3686,8 +3686,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLVertexBuffer::unbind(); LLGLState::checkStates(); - //LLGLState::checkTextureChannels(); - //LLGLState::checkClientArrays(); LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights"); @@ -3825,8 +3823,6 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera) llerrs << "GL matrix stack corrupted!" << llendl; } LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); } } } @@ -3919,8 +3915,6 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera) llerrs << "GL matrix stack corrupted!" << llendl; } LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); } } } @@ -3995,8 +3989,6 @@ void LLPipeline::renderGeomShadow(LLCamera& camera) LLVertexBuffer::unbind(); LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); } } else @@ -8123,8 +8115,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLViewerCamera::getInstance()->setUserClipPlane(npnorm); LLGLState::checkStates(); - //LLGLState::checkTextureChannels(); - //LLGLState::checkClientArrays(); if (!skip_avatar_update) { -- cgit v1.2.3 From 11ddfa8bcee802b0c5808ab4fef2eba48e8fc47f Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 19 Jul 2011 17:52:32 -0400 Subject: SH-2090 FIX - cherry pick from davep commit --- indra/newview/llvovolume.cpp | 3 +++ 1 file changed, 3 insertions(+) mode change 100644 => 100755 indra/newview/llvovolume.cpp diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp old mode 100644 new mode 100755 index 4723ec9bd1..367a3f5732 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1017,6 +1017,9 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms_in, const S32 detail, bo if (is404) { setIcon(LLViewerTextureManager::getFetchedTextureFromFile("icons/Inv_Mesh.png", TRUE, LLViewerTexture::BOOST_UI)); + //render prim proxy when mesh loading attempts give up + volume_params.setSculptID(LLUUID::null, LL_SCULPT_TYPE_NONE); + } if ((LLPrimitive::setVolume(volume_params, lod, (mVolumeImpl && mVolumeImpl->isVolumeUnique()))) || mSculptChanged) -- cgit v1.2.3 From 9b1174243d3a264f296574329a73f945bf7165a7 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Tue, 19 Jul 2011 17:25:02 -0700 Subject: EXP-932 Implement system that fades from login page to (either) intro screen or loading screen instead of using a hard cut EXP-938 Turn off in-world audio until fade from intro/loading page complete EXP-939 Fade from intro/loading page to world, not to image of last login --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llmediactrl.h | 2 + indra/newview/llprogressview.cpp | 88 ++++++++++++++++++++++++++++----- indra/newview/llprogressview.h | 5 ++ indra/newview/llstartup.cpp | 8 +-- indra/newview/llvieweraudio.cpp | 16 ++++-- indra/newview/llviewermedia.cpp | 24 ++++++++- indra/newview/llviewermedia.h | 2 + indra/newview/llviewerwindow.cpp | 8 +++ indra/newview/llviewerwindow.h | 1 + 10 files changed, 136 insertions(+), 20 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 142bf94395..916f376c4c 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -6592,7 +6592,7 @@ Type Boolean Value - 0 + 0 PrecachingDelay diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index 6833453616..0e4a5b1d65 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -166,6 +166,8 @@ public: // Incoming media event dispatcher virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); + LLUUID getTextureID() {return mMediaTextureID;} + protected: void convertInputCoords(S32& x, S32& y); diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index 028891a90e..fd9e768242 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -50,12 +50,13 @@ #include "llappviewer.h" #include "llweb.h" #include "lluictrlfactory.h" +#include "llpanellogin.h" LLProgressView* LLProgressView::sInstance = NULL; S32 gStartImageWidth = 1; S32 gStartImageHeight = 1; -const F32 FADE_TO_WORLD_TIME = 1.0f; +const F32 FADE_TO_WORLD_TIME = 1.5f; static LLRegisterPanelClassWrapper r("progress_view"); @@ -66,7 +67,9 @@ LLProgressView::LLProgressView() mMediaCtrl( NULL ), mMouseDownInActiveArea( false ), mUpdateEvents("LLProgressView"), - mFadeToWorldTimer() + mFadeToWorldTimer(), + mFadeFromLoginTimer(), + mStartupComplete(false) { mUpdateEvents.listen("self", boost::bind(&LLProgressView::handleUpdate, this, _1)); } @@ -79,10 +82,13 @@ BOOL LLProgressView::postBuild() mMediaCtrl = getChild("login_media_panel"); mMediaCtrl->setVisible( false ); // hidden initially mMediaCtrl->addObserver( this ); // watch events + + LLViewerMedia::setOnlyAudibleMediaTextureID(mMediaCtrl->getTextureID()); mCancelBtn = getChild("cancel_btn"); mCancelBtn->setClickedCallback( LLProgressView::onCancelButtonClicked, NULL ); mFadeToWorldTimer.stop(); + mFadeFromLoginTimer.stop(); getChild("title_text")->setText(LLStringExplicit(LLAppViewer::instance()->getSecondLifeTitle())); @@ -132,16 +138,29 @@ void LLProgressView::revealIntroPanel() if ( intro_url.length() > 0 && gSavedSettings.getBOOL("PostFirstLoginIntroViewed" ) == FALSE ) { + // hide the progress bar + getChild("stack1")->setVisible(false); + // navigate to intro URL and reveal widget mMediaCtrl->navigateTo( intro_url ); mMediaCtrl->setVisible( TRUE ); + // flag as having seen the new user post login intro gSavedSettings.setBOOL("PostFirstLoginIntroViewed", TRUE ); } - else + + mFadeFromLoginTimer.start(); +} + +void LLProgressView::setStartupComplete() +{ + mStartupComplete = true; + + // if we are not showing a video, fade into world + if (!mMediaCtrl->getVisible()) { - // start the timer that will control the fade through to the world view + mFadeFromLoginTimer.stop(); mFadeToWorldTimer.start(); } } @@ -162,17 +181,15 @@ void LLProgressView::setVisible(BOOL visible) } } -void LLProgressView::draw() -{ - static LLTimer timer; - // Paint bitmap if we've got one +void LLProgressView::drawStartTexture(F32 alpha) +{ glPushMatrix(); if (gStartTexture) { LLGLSUIDefault gls_ui; gGL.getTexUnit(0)->bind(gStartTexture.get()); - gGL.color4f(1.f, 1.f, 1.f, 1.f); + gGL.color4f(1.f, 1.f, 1.f, alpha); F32 image_aspect = (F32)gStartImageWidth / (F32)gStartImageHeight; S32 width = getRect().getWidth(); S32 height = getRect().getHeight(); @@ -198,6 +215,33 @@ void LLProgressView::draw() gl_rect_2d(getRect()); } glPopMatrix(); +} + + +void LLProgressView::draw() +{ + static LLTimer timer; + + if (mFadeFromLoginTimer.getStarted()) + { + F32 alpha = clamp_rescale(mFadeFromLoginTimer.getElapsedTimeF32(), 0.f, FADE_TO_WORLD_TIME, 0.f, 1.f); + LLViewDrawContext context(alpha); + + if (!mMediaCtrl->getVisible()) + { + drawStartTexture(alpha); + } + + LLPanel::draw(); + + if (mFadeFromLoginTimer.getElapsedTimeF32() > FADE_TO_WORLD_TIME ) + { + mFadeFromLoginTimer.stop(); + LLPanelLogin::closePanel(); + } + + return; + } // handle fade out to world view when we're asked to if (mFadeToWorldTimer.getStarted()) @@ -205,6 +249,8 @@ void LLProgressView::draw() // draw fading panel F32 alpha = clamp_rescale(mFadeToWorldTimer.getElapsedTimeF32(), 0.f, FADE_TO_WORLD_TIME, 1.f, 0.f); LLViewDrawContext context(alpha); + + drawStartTexture(alpha); LLPanel::draw(); // faded out completely - remove panel and reveal world @@ -212,6 +258,8 @@ void LLProgressView::draw() { mFadeToWorldTimer.stop(); + LLViewerMedia::setOnlyAudibleMediaTextureID(LLUUID::null); + // Fade is complete, release focus gFocusMgr.releaseFocusIfNeeded( this ); @@ -235,6 +283,7 @@ void LLProgressView::draw() return; } + drawStartTexture(1.0f); // draw children LLPanel::draw(); } @@ -349,9 +398,26 @@ bool LLProgressView::onAlertModal(const LLSD& notify) void LLProgressView::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) { + // the intro web content calls javascript::window.close() when it's done if( event == MEDIA_EVENT_CLOSE_REQUEST ) { - // the intro web content calls javascript::window.close() when it's done - mFadeToWorldTimer.start(); + if (mStartupComplete) + { + //make sure other timer has stopped + mFadeFromLoginTimer.stop(); + mFadeToWorldTimer.start(); + } + else + { + // hide the media ctrl and wait for startup to be completed before fading to world + mMediaCtrl->setVisible(false); + if (mMediaCtrl->getMediaPlugin()) + { + mMediaCtrl->getMediaPlugin()->stop(); + } + + // show the progress bar + getChild("stack1")->setVisible(true); + } } } diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h index 73dd478e98..fac00ad04d 100644 --- a/indra/newview/llprogressview.h +++ b/indra/newview/llprogressview.h @@ -48,6 +48,7 @@ public: BOOL postBuild(); /*virtual*/ void draw(); + void drawStartTexture(F32 alpha); /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask); @@ -65,6 +66,8 @@ public: // turns on (under certain circumstances) the into video after login void revealIntroPanel(); + void setStartupComplete(); + void setCancelButtonVisible(BOOL b, const std::string& label); static void onCancelButtonClicked( void* ); @@ -82,8 +85,10 @@ protected: std::string mMessage; LLButton* mCancelBtn; LLFrameTimer mFadeToWorldTimer; + LLFrameTimer mFadeFromLoginTimer; LLRect mOutlineRect; bool mMouseDownInActiveArea; + bool mStartupComplete; // The LLEventStream mUpdateEvents depends upon this class being a singleton // to avoid pump name conflicts. diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 4dfcb85295..b390c933f7 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -897,7 +897,7 @@ bool idle_startup() if (show_connect_box) { LLSLURL slurl; - LLPanelLogin::closePanel(); + //LLPanelLogin::closePanel(); } @@ -944,6 +944,8 @@ bool idle_startup() gViewerWindow->setShowProgress(TRUE); gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Quit")); + gViewerWindow->revealIntroPanel(); + // Poke the VFS, which could potentially block for a while if // Windows XP is acting up set_startup_status(0.07f, LLTrans::getString("LoginVerifyingCache"), LLStringUtil::null); @@ -1962,8 +1964,8 @@ bool idle_startup() gViewerWindow->getWindow()->resetBusyCount(); gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); LL_DEBUGS("AppInit") << "Done releasing bitmap" << LL_ENDL; - gViewerWindow->revealIntroPanel(); - //gViewerWindow->setShowProgress(FALSE); // reveal intro video now handles this + //gViewerWindow->revealIntroPanel(); + gViewerWindow->setStartupComplete(); gViewerWindow->setProgressCancelButtonVisible(FALSE); // We're not away from keyboard, even though login might have taken diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index b19c738ed2..f7fa5690d6 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -36,6 +36,7 @@ #include "llviewerwindow.h" #include "llvoiceclient.h" #include "llviewermedia.h" +#include "llprogressview.h" ///////////////////////////////////////////////////////// @@ -101,7 +102,16 @@ void audio_update_volume(bool force_update) { F32 master_volume = gSavedSettings.getF32("AudioLevelMaster"); BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio"); - if (!gViewerWindow->getActive() && (gSavedSettings.getBOOL("MuteWhenMinimized"))) + + LLProgressView* progress = gViewerWindow->getProgressView(); + BOOL progress_view_visible = FALSE; + + if (progress) + { + progress_view_visible = progress->getVisible(); + } + + if (!gViewerWindow->getActive() && gSavedSettings.getBOOL("MuteWhenMinimized")) { mute_audio = TRUE; } @@ -114,7 +124,7 @@ void audio_update_volume(bool force_update) gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler")); gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); - gAudiop->setMuted(mute_audio); + gAudiop->setMuted(mute_audio || progress_view_visible); if (force_update) { @@ -136,7 +146,7 @@ void audio_update_volume(bool force_update) F32 music_volume = gSavedSettings.getF32("AudioLevelMusic"); BOOL music_muted = gSavedSettings.getBOOL("MuteMusic"); music_volume = mute_volume * master_volume * music_volume; - gAudiop->setInternetStreamGain ( music_muted ? 0.f : music_volume ); + gAudiop->setInternetStreamGain ( music_muted || progress_view_visible ? 0.f : music_volume ); } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 1be58eae45..384f7cd61d 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -344,6 +344,8 @@ static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap; static LLTimer sMediaCreateTimer; static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f; static F32 sGlobalVolume = 1.0f; +static bool sForceUpdate = false; +static LLUUID sOnlyAudibleTextureID = LLUUID::null; static F64 sLowestLoadableImplInterest = 0.0f; static bool sAnyMediaShowing = false; static boost::signals2::connection sTeleportFinishConnection; @@ -606,7 +608,7 @@ bool LLViewerMedia::textureHasMedia(const LLUUID& texture_id) // static void LLViewerMedia::setVolume(F32 volume) { - if(volume != sGlobalVolume) + if(volume != sGlobalVolume || sForceUpdate) { sGlobalVolume = volume; impl_list::iterator iter = sViewerMediaImplList.begin(); @@ -617,6 +619,8 @@ void LLViewerMedia::setVolume(F32 volume) LLViewerMediaImpl* pimpl = *iter; pimpl->updateVolume(); } + + sForceUpdate = false; } } @@ -1626,6 +1630,15 @@ void LLViewerMedia::onTeleportFinished() gSavedSettings.setBOOL("MediaTentativeAutoPlay", true); } + +////////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setOnlyAudibleMediaTextureID(const LLUUID& texture_id) +{ + sOnlyAudibleTextureID = texture_id; + sForceUpdate = true; +} + ////////////////////////////////////////////////////////////////////////////////////////// // LLViewerMediaImpl ////////////////////////////////////////////////////////////////////////////////////////// @@ -2188,7 +2201,14 @@ void LLViewerMediaImpl::updateVolume() } } - mMediaSource->setVolume(volume); + if (sOnlyAudibleTextureID == LLUUID::null || sOnlyAudibleTextureID == mTextureId) + { + mMediaSource->setVolume(volume); + } + else + { + mMediaSource->setVolume(0.0f); + } } } diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index a70c6f4887..aeac6ba29a 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -160,6 +160,8 @@ public: static void createSpareBrowserMediaSource(); static LLPluginClassMedia* getSpareBrowserMediaSource(); + + static void setOnlyAudibleMediaTextureID(const LLUUID& texture_id); private: static void setOpenIDCookie(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index cff166b825..260840e8e4 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4531,6 +4531,14 @@ void LLViewerWindow::setShowProgress(const BOOL show) } } +void LLViewerWindow::setStartupComplete() +{ + if (mProgressView) + { + mProgressView->setStartupComplete(); + } +} + BOOL LLViewerWindow::getShowProgress() const { return (mProgressView && mProgressView->getVisible()); diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index ff49ed1f62..edd241a742 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -272,6 +272,7 @@ public: void setProgressCancelButtonVisible( BOOL b, const std::string& label = LLStringUtil::null ); LLProgressView *getProgressView() const; void revealIntroPanel(); + void setStartupComplete(); void updateObjectUnderCursor(); -- cgit v1.2.3 From 7d8ec742138cbb4716897e59f0e4332347c37caf Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Wed, 20 Jul 2011 11:30:55 -0400 Subject: Switching channels to project viewer --- BuildParams | 10 ++++++++++ 1 file changed, 10 insertions(+) mode change 100644 => 100755 BuildParams diff --git a/BuildParams b/BuildParams old mode 100644 new mode 100755 index 9433e335fe..3501934487 --- a/BuildParams +++ b/BuildParams @@ -82,6 +82,16 @@ mesh-development.build_debug_release_separately = true mesh-development.build_CYGWIN_Debug = false mesh-development.build_viewer_update_version_manager = false +# ======================================== +# mesh-development-release-1-candidate +# ======================================== +mesh-development-release-1-candidate.viewer_channel = "Project Viewer - Mesh" +mesh-development-release-1-candidate.login_channel = "Project Viewer - Mesh" +mesh-development-release-1-candidate.viewer_grid = agni +mesh-development-release-1-candidate.build_debug_release_separately = true +mesh-development-release-1-candidate.build_CYGWIN_Debug = false +mesh-development-release-1-candidate.build_viewer_update_version_manager = false + # ======================================== # mesh-asset-deprecation # ======================================== -- cgit v1.2.3 From 956021b8662409cb0bdebe6f85bedaf1e2c33b87 Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Wed, 20 Jul 2011 10:37:25 -0700 Subject: Disabling freshness tag for the merge. --- indra/newview/llpanelmarketplaceinboxinventory.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index d2d42e11f4..8946b9dc98 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -33,7 +33,7 @@ #include "llfolderviewitem.h" -#define SUPPORTING_FRESH_ITEM_COUNT 1 +#define SUPPORTING_FRESH_ITEM_COUNT 0 -- cgit v1.2.3 From 0ddf718d9266fa1262d6e1f0f6d1e537048e8388 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Wed, 20 Jul 2011 13:48:46 -0400 Subject: still trying to fix channels --- BuildParams | 10 ++++++++++ indra/llcommon/llversionviewer.h | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) mode change 100644 => 100755 indra/llcommon/llversionviewer.h diff --git a/BuildParams b/BuildParams index 3501934487..c944381ba1 100755 --- a/BuildParams +++ b/BuildParams @@ -92,6 +92,16 @@ mesh-development-release-1-candidate.build_debug_release_separately = true mesh-development-release-1-candidate.build_CYGWIN_Debug = false mesh-development-release-1-candidate.build_viewer_update_version_manager = false +# ======================================== +# mesh-development-rc +# ======================================== +mesh-development-rc.viewer_channel = "Project Viewer - Mesh" +mesh-development-rc.login_channel = "Project Viewer - Mesh" +mesh-development-rc.viewer_grid = agni +mesh-development-rc.build_debug_release_separately = true +mesh-development-rc.build_CYGWIN_Debug = false +mesh-development-rc.build_viewer_update_version_manager = false + # ======================================== # mesh-asset-deprecation # ======================================== diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h old mode 100644 new mode 100755 index 0018b8e844..c6ce1a7a25 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -32,7 +32,7 @@ const S32 LL_VERSION_MINOR = 8; const S32 LL_VERSION_PATCH = 1; const S32 LL_VERSION_BUILD = 0; -const char * const LL_CHANNEL = "Second Life Developer"; +const char * const LL_CHANNEL = "Project Viewer - Mesh"; #if LL_DARWIN const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.indra.viewer"; -- cgit v1.2.3 From 5b89ba6942ebaa593914d9dc34794239aec8542f Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Wed, 20 Jul 2011 11:35:38 -0700 Subject: Removed unused variable for build fix. --- indra/newview/llsidepanelinventory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index a0d1247b34..6f809ba3ca 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -456,8 +456,8 @@ void LLSidepanelInventory::onToggleInboxBtn() LLButton* otherButton = getChild(OUTBOX_BUTTON_NAME); LLLayoutPanel* otherPanel = getChild(OUTBOX_LAYOUT_PANEL_NAME); - bool inboxExpanded = manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel); - + manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel); + gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString()); } -- cgit v1.2.3 From 299615e9d6d991a0ae0a3f21b7acc55984dfbd1b Mon Sep 17 00:00:00 2001 From: "Christian Goetze (CG)" Date: Wed, 20 Jul 2011 11:48:19 -0700 Subject: Re-enable public build status indicators --- BuildParams | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BuildParams b/BuildParams index 9433e335fe..ad2f71e336 100644 --- a/BuildParams +++ b/BuildParams @@ -14,8 +14,8 @@ public_build = true # skip windows debug build until we can get a fix in. build_CYGWIN_Debug = false -# Update Public Inworld Build Status Indicators -email_status_this_is_os = false +# Update Public Inworld Build Status Indicators (setting should mirror "public_build") +email_status_this_is_os = true # Limit extent of codeticket updates to revisions after... codeticket_since = 2.2.0-release @@ -163,6 +163,7 @@ viewer-asset-delivery-metrics.build_server_tests = false # Simon says # ======================================== simon_viewer-dev-private.public_build = false +simon_viewer-dev-private.email_status_this_is_os = false # eof -- cgit v1.2.3 From 6d86a36b848d6bd1cc320a270c443ccb56bfae52 Mon Sep 17 00:00:00 2001 From: "Christian Goetze (CG)" Date: Wed, 20 Jul 2011 11:48:57 -0700 Subject: Re-indent teamcity service messages when scanning build logs to fix incredibuild formatting. --- build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 4268c76e78..c7c89fe3c2 100755 --- a/build.sh +++ b/build.sh @@ -209,7 +209,7 @@ do end_section BuildParallel else begin_section "Build$variant" - build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | grep --line-buffered "^##teamcity" + build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | sed -n 's/^ *\(##teamcity.*\)/\1/p' if `cat "$build_dir/build_ok"` then echo so far so good. @@ -238,7 +238,7 @@ then begin_section "Build$variant" build_dir=`build_dir_$arch $variant` build_dir_stubs="$build_dir/win_setup/$variant" - tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity" + tee -a $build_log < "$build_dir/build.log" | sed -n 's/^ *\(##teamcity.*\)/\1/p' if `cat "$build_dir/build_ok"` then echo so far so good. -- cgit v1.2.3 From e0782e32e5c4471fe11395f176d7c496125e3334 Mon Sep 17 00:00:00 2001 From: seth_productengine Date: Wed, 20 Jul 2011 23:36:39 +0300 Subject: =?UTF-8?q?SH-2059=20FIXED=20Mesh=20uploader=20UI=20clean=20up.=20?= =?UTF-8?q?-=20When=20the=20=E2=80=9CLoad=20from=20file=E2=80=9D=20radio?= =?UTF-8?q?=20is=20selected,=20the=20labels=20uner=20it=20are=20disabled.?= =?UTF-8?q?=20-=20Added=20horizontal=20lines=20to=20LoD=20tab=20like=20in?= =?UTF-8?q?=20the=20physics=20tab.=20-=20Physics=20tab:=20LoD=20dropdown?= =?UTF-8?q?=20moved=20to=20the=20left,=20against=20the=20=E2=80=9CUse=20Le?= =?UTF-8?q?vel=20of=20Detail=E2=80=9D=20label.=20-=20Modifiers=20tab:=20fi?= =?UTF-8?q?xed=20dimensions=20to=20show=20a=20z=20value.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skins/default/xui/en/floater_model_preview.xml | 61 ++++++++++++++++++---- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index 1d4a1d4827..0b7b4c684c 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -173,6 +173,18 @@ L$ [MODEL] name="lod_panel" help_topic="upload_model_lod"> + + + Select Level of Detail: @@ -210,9 +222,22 @@ L$ [MODEL] - + + - + + + + Mesh @@ -236,10 +261,10 @@ L$ [MODEL] - + Build Operator: - + Queue Mode: @@ -263,11 +288,11 @@ L$ [MODEL] - + Border Mode: - + Share Tolerance: @@ -280,14 +305,28 @@ L$ [MODEL] - - + + + + + + Generate Normals Crease Angle: + @@ -314,8 +353,8 @@ L$ [MODEL] - + Lowest @@ -448,7 +487,7 @@ L$ [MODEL] - + [X] x [Y] x [Z] m -- cgit v1.2.3 From c567f0dcdd1b31cc94e9065218a88d48cdaf2278 Mon Sep 17 00:00:00 2001 From: "Debi King (Dessie)" Date: Wed, 20 Jul 2011 16:43:32 -0400 Subject: Added tag DRTVWR-68_2.7.5-release, 2.7.5-release for changeset 6866d9df6efb --- .hgtags | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.hgtags b/.hgtags index b4d76bb7d8..d0943c5064 100644 --- a/.hgtags +++ b/.hgtags @@ -145,3 +145,5 @@ a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release 19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start 09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1 09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1 +6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release +6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release -- cgit v1.2.3 From cec8d8b3e649d6cf946e427730793260f2c6296f Mon Sep 17 00:00:00 2001 From: eli Date: Wed, 20 Jul 2011 13:56:21 -0700 Subject: FIX INTL-58 set25, light set4 translation for 6 languages --- .../skins/default/xui/de/floater_about_land.xml | 14 +- .../default/xui/de/floater_delete_env_preset.xml | 35 +++++ .../default/xui/de/floater_edit_day_cycle.xml | 104 +++++++++++++++ .../default/xui/de/floater_edit_sky_preset.xml | 143 +++++++++++++++++++++ .../default/xui/de/floater_edit_water_preset.xml | 72 +++++++++++ .../xui/de/floater_environment_settings.xml | 36 ++++++ .../skins/default/xui/de/floater_model_preview.xml | 6 + .../skins/default/xui/de/floater_model_wizard.xml | 6 + .../newview/skins/default/xui/de/floater_tools.xml | 4 +- indra/newview/skins/default/xui/de/menu_login.xml | 2 +- .../xui/de/menu_people_nearby_view_sort.xml | 5 +- indra/newview/skins/default/xui/de/menu_viewer.xml | 21 ++- .../skins/default/xui/de/menu_wearing_gear.xml | 5 +- .../newview/skins/default/xui/de/notifications.xml | 62 +++++---- .../skins/default/xui/de/panel_outfits_list.xml | 6 +- .../newview/skins/default/xui/de/panel_people.xml | 4 +- .../skins/default/xui/de/panel_place_profile.xml | 2 + .../default/xui/de/panel_preferences_advanced.xml | 13 ++ .../default/xui/de/panel_preferences_sound.xml | 26 +--- .../default/xui/de/panel_region_environment.xml | 33 +++++ .../skins/default/xui/de/panel_region_terrain.xml | 74 +++++++---- .../skins/default/xui/de/sidepanel_inventory.xml | 32 +++++ indra/newview/skins/default/xui/de/strings.xml | 21 +++ .../skins/default/xui/es/floater_about_land.xml | 14 +- .../default/xui/es/floater_delete_env_preset.xml | 35 +++++ .../default/xui/es/floater_edit_day_cycle.xml | 104 +++++++++++++++ .../default/xui/es/floater_edit_sky_preset.xml | 143 +++++++++++++++++++++ .../default/xui/es/floater_edit_water_preset.xml | 72 +++++++++++ .../xui/es/floater_environment_settings.xml | 36 ++++++ .../skins/default/xui/es/floater_model_preview.xml | 6 + .../skins/default/xui/es/floater_model_wizard.xml | 6 + .../newview/skins/default/xui/es/floater_tools.xml | 2 +- indra/newview/skins/default/xui/es/menu_login.xml | 2 +- .../xui/es/menu_people_nearby_view_sort.xml | 5 +- indra/newview/skins/default/xui/es/menu_viewer.xml | 21 ++- .../skins/default/xui/es/menu_wearing_gear.xml | 5 +- .../newview/skins/default/xui/es/notifications.xml | 62 +++++---- .../skins/default/xui/es/panel_outfits_list.xml | 6 +- .../newview/skins/default/xui/es/panel_people.xml | 2 +- .../skins/default/xui/es/panel_place_profile.xml | 2 + .../default/xui/es/panel_preferences_advanced.xml | 13 ++ .../default/xui/es/panel_preferences_sound.xml | 26 +--- .../default/xui/es/panel_region_environment.xml | 33 +++++ .../skins/default/xui/es/panel_region_terrain.xml | 67 +++++++--- .../skins/default/xui/es/sidepanel_inventory.xml | 32 +++++ indra/newview/skins/default/xui/es/strings.xml | 21 +++ .../skins/default/xui/fr/floater_about_land.xml | 14 +- .../default/xui/fr/floater_delete_env_preset.xml | 35 +++++ .../default/xui/fr/floater_edit_day_cycle.xml | 104 +++++++++++++++ .../default/xui/fr/floater_edit_sky_preset.xml | 143 +++++++++++++++++++++ .../default/xui/fr/floater_edit_water_preset.xml | 72 +++++++++++ .../xui/fr/floater_environment_settings.xml | 36 ++++++ .../skins/default/xui/fr/floater_model_preview.xml | 6 + .../skins/default/xui/fr/floater_model_wizard.xml | 6 + .../newview/skins/default/xui/fr/floater_tools.xml | 2 +- indra/newview/skins/default/xui/fr/menu_login.xml | 2 +- .../xui/fr/menu_people_nearby_view_sort.xml | 5 +- indra/newview/skins/default/xui/fr/menu_viewer.xml | 21 ++- .../skins/default/xui/fr/menu_wearing_gear.xml | 5 +- .../newview/skins/default/xui/fr/notifications.xml | 62 +++++---- .../skins/default/xui/fr/panel_outfits_list.xml | 6 +- .../newview/skins/default/xui/fr/panel_people.xml | 8 +- .../skins/default/xui/fr/panel_place_profile.xml | 2 + .../default/xui/fr/panel_preferences_advanced.xml | 13 ++ .../default/xui/fr/panel_preferences_sound.xml | 26 +--- .../default/xui/fr/panel_region_environment.xml | 33 +++++ .../skins/default/xui/fr/panel_region_terrain.xml | 63 +++++++-- .../skins/default/xui/fr/sidepanel_inventory.xml | 32 +++++ indra/newview/skins/default/xui/fr/strings.xml | 21 +++ .../skins/default/xui/it/floater_about_land.xml | 14 +- .../default/xui/it/floater_delete_env_preset.xml | 35 +++++ .../default/xui/it/floater_edit_day_cycle.xml | 104 +++++++++++++++ .../default/xui/it/floater_edit_sky_preset.xml | 143 +++++++++++++++++++++ .../default/xui/it/floater_edit_water_preset.xml | 72 +++++++++++ .../xui/it/floater_environment_settings.xml | 36 ++++++ .../skins/default/xui/it/floater_model_preview.xml | 6 + .../skins/default/xui/it/floater_model_wizard.xml | 6 + .../newview/skins/default/xui/it/floater_tools.xml | 2 +- indra/newview/skins/default/xui/it/menu_login.xml | 2 +- .../xui/it/menu_people_nearby_view_sort.xml | 5 +- indra/newview/skins/default/xui/it/menu_viewer.xml | 21 ++- .../skins/default/xui/it/menu_wearing_gear.xml | 5 +- .../newview/skins/default/xui/it/notifications.xml | 62 +++++---- .../skins/default/xui/it/panel_outfits_list.xml | 6 +- .../skins/default/xui/it/panel_place_profile.xml | 2 + .../default/xui/it/panel_preferences_advanced.xml | 13 ++ .../default/xui/it/panel_preferences_sound.xml | 26 +--- .../default/xui/it/panel_region_environment.xml | 33 +++++ .../skins/default/xui/it/panel_region_terrain.xml | 65 +++++++--- .../skins/default/xui/it/sidepanel_inventory.xml | 32 +++++ indra/newview/skins/default/xui/it/strings.xml | 21 +++ .../skins/default/xui/ja/floater_about_land.xml | 14 +- .../default/xui/ja/floater_delete_env_preset.xml | 35 +++++ .../default/xui/ja/floater_edit_day_cycle.xml | 104 +++++++++++++++ .../default/xui/ja/floater_edit_sky_preset.xml | 143 +++++++++++++++++++++ .../default/xui/ja/floater_edit_water_preset.xml | 72 +++++++++++ .../xui/ja/floater_environment_settings.xml | 36 ++++++ .../skins/default/xui/ja/floater_model_preview.xml | 6 + .../skins/default/xui/ja/floater_model_wizard.xml | 6 + .../newview/skins/default/xui/ja/floater_tools.xml | 36 +++--- indra/newview/skins/default/xui/ja/menu_login.xml | 2 +- .../xui/ja/menu_people_nearby_view_sort.xml | 5 +- indra/newview/skins/default/xui/ja/menu_viewer.xml | 21 ++- .../skins/default/xui/ja/menu_wearing_gear.xml | 5 +- .../newview/skins/default/xui/ja/notifications.xml | 62 +++++---- .../skins/default/xui/ja/panel_outfits_list.xml | 6 +- .../skins/default/xui/ja/panel_place_profile.xml | 2 + .../default/xui/ja/panel_preferences_advanced.xml | 13 ++ .../default/xui/ja/panel_preferences_sound.xml | 26 +--- .../default/xui/ja/panel_region_environment.xml | 33 +++++ .../skins/default/xui/ja/panel_region_terrain.xml | 74 +++++++---- .../skins/default/xui/ja/sidepanel_inventory.xml | 32 +++++ indra/newview/skins/default/xui/ja/strings.xml | 21 +++ .../skins/default/xui/pt/floater_about_land.xml | 14 +- .../default/xui/pt/floater_delete_env_preset.xml | 35 +++++ .../default/xui/pt/floater_edit_day_cycle.xml | 104 +++++++++++++++ .../default/xui/pt/floater_edit_sky_preset.xml | 143 +++++++++++++++++++++ .../default/xui/pt/floater_edit_water_preset.xml | 72 +++++++++++ .../xui/pt/floater_environment_settings.xml | 36 ++++++ .../skins/default/xui/pt/floater_model_preview.xml | 6 + .../skins/default/xui/pt/floater_model_wizard.xml | 6 + .../newview/skins/default/xui/pt/floater_tools.xml | 2 +- indra/newview/skins/default/xui/pt/menu_login.xml | 2 +- .../xui/pt/menu_people_nearby_view_sort.xml | 5 +- indra/newview/skins/default/xui/pt/menu_viewer.xml | 21 ++- .../skins/default/xui/pt/menu_wearing_gear.xml | 5 +- .../newview/skins/default/xui/pt/notifications.xml | 61 ++++----- .../skins/default/xui/pt/panel_outfits_list.xml | 6 +- .../skins/default/xui/pt/panel_place_profile.xml | 2 + .../default/xui/pt/panel_preferences_advanced.xml | 13 ++ .../default/xui/pt/panel_preferences_sound.xml | 26 +--- .../default/xui/pt/panel_region_environment.xml | 33 +++++ .../skins/default/xui/pt/panel_region_terrain.xml | 65 +++++++--- .../skins/default/xui/pt/sidepanel_inventory.xml | 32 +++++ indra/newview/skins/default/xui/pt/strings.xml | 21 +++ .../minimal/xui/de/panel_im_control_panel.xml | 17 ++- .../minimal/xui/es/panel_im_control_panel.xml | 16 +-- .../minimal/xui/fr/panel_im_control_panel.xml | 17 ++- .../minimal/xui/it/panel_im_control_panel.xml | 16 +-- .../minimal/xui/ja/panel_im_control_panel.xml | 17 ++- .../minimal/xui/pt/panel_im_control_panel.xml | 16 +-- 141 files changed, 3850 insertions(+), 582 deletions(-) create mode 100644 indra/newview/skins/default/xui/de/floater_delete_env_preset.xml create mode 100644 indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml create mode 100644 indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml create mode 100644 indra/newview/skins/default/xui/de/floater_edit_water_preset.xml create mode 100644 indra/newview/skins/default/xui/de/floater_environment_settings.xml create mode 100644 indra/newview/skins/default/xui/de/panel_region_environment.xml create mode 100644 indra/newview/skins/default/xui/es/floater_delete_env_preset.xml create mode 100644 indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml create mode 100644 indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml create mode 100644 indra/newview/skins/default/xui/es/floater_edit_water_preset.xml create mode 100644 indra/newview/skins/default/xui/es/floater_environment_settings.xml create mode 100644 indra/newview/skins/default/xui/es/panel_region_environment.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_environment_settings.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_region_environment.xml create mode 100644 indra/newview/skins/default/xui/it/floater_delete_env_preset.xml create mode 100644 indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml create mode 100644 indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml create mode 100644 indra/newview/skins/default/xui/it/floater_edit_water_preset.xml create mode 100644 indra/newview/skins/default/xui/it/floater_environment_settings.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_environment.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_environment_settings.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_region_environment.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_environment_settings.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_region_environment.xml diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index f0fa4386d2..c65dc5f41d 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -133,12 +133,12 @@ 0 - + Geometry preview - + High detail - + Medium detail - + Low detail - + Lowest detail @@ -497,7 +502,7 @@ Higher prim weight height="50" font="SansSerifSmall" layout="topleft" - name="description" + name="physics_hint" word_wrap="true" left_delta="5"> We will create a shape for the outer hull of the model. Adjust the shape's detail level as needed for the intended purpose of your model. @@ -531,16 +536,16 @@ Higher prim weight left="15" height="270" width="505" - name="content" + name="physics_content_panel" bg_opaque_color="DkGray2" background_visible="true" background_opaque="true"> - Performance - Faster rendering + Performance + Faster rendering Less detail Lower prim weight - Accuracy - Slower rendering + Accuracy + Slower rendering More detail Higher prim weight @@ -558,15 +563,15 @@ Higher prim weight show_text="false" top="25" width="22" /> - Examples: + Examples: Moving objects Flying objects Vehicles - Examples: + Examples: Small static objects Less detailed objects Simple furniture - Examples: + Examples: Static objects Detailed objects Buildings @@ -592,7 +597,7 @@ Buildings visible="false" width="150"> - + Physics preview - + High detail - + Medium detail - + Low detail - + Lowest detail @@ -635,7 +640,7 @@ Buildings left="15" height="310" width="505" - name="content" + name="review_content_panel" bg_opaque_color="DkGray2" background_visible="true" background_opaque="true"> @@ -706,7 +711,7 @@ Buildings Date: Fri, 5 Aug 2011 13:28:29 -0400 Subject: undo Mac app name change (again) --- indra/newview/viewer_manifest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 049e43684f..34565835e9 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -754,7 +754,7 @@ class DarwinManifest(ViewerManifest): self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script)) def package_finish(self): - channel_standin = 'Second Life Viewer' # hah, our default channel is not usable on its own + channel_standin = 'Second Life Viewer 2' # hah, our default channel is not usable on its own if not self.default_channel(): channel_standin = self.channel() -- cgit v1.2.3 From d456006f9a7034463e3448cf6ea3b90a304471b7 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Fri, 5 Aug 2011 16:23:31 -0400 Subject: remove override for channel testing --- BuildParams | 2 -- 1 file changed, 2 deletions(-) diff --git a/BuildParams b/BuildParams index c963acacef..a5729e616d 100644 --- a/BuildParams +++ b/BuildParams @@ -125,8 +125,6 @@ oz_viewer-devreview.codeticket_add_context = false oz_project-1.build_debug_release_separately = true oz_project-1.codeticket_add_context = false -oz_project-1.viewer_channel = "Second Life Release" -oz_project-1.login_channel = "Second Life Release" oz_project-2.build_debug_release_separately = true oz_project-2.codeticket_add_context = false oz_project-3.build_debug_release_separately = true -- cgit v1.2.3 From 8675901fa85de600cc1ef7c5263a5906fd2b2811 Mon Sep 17 00:00:00 2001 From: "Debi King (Dessie)" Date: Fri, 5 Aug 2011 19:07:06 -0400 Subject: Added tag DRTVWR-75_2.8.3-beta1, 2.8.3-beta1 for changeset 599677276b22 --- .hgtags | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.hgtags b/.hgtags index c1635c9adb..51f7a9ae1f 100644 --- a/.hgtags +++ b/.hgtags @@ -160,3 +160,5 @@ e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1 54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start 493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start +599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 +599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1 -- cgit v1.2.3 From fb2733942c2dbc393b151142adaf1bb25d2d9ae2 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 09:16:01 -0400 Subject: increment viewer version to 3.0.0 --- indra/llcommon/llversionviewer.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 99c5412ae5..b39ef3050a 100755 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -27,9 +27,9 @@ #ifndef LL_LLVERSIONVIEWER_H #define LL_LLVERSIONVIEWER_H -const S32 LL_VERSION_MAJOR = 2; -const S32 LL_VERSION_MINOR = 8; -const S32 LL_VERSION_PATCH = 4; +const S32 LL_VERSION_MAJOR = 0; +const S32 LL_VERSION_MINOR = 0; +const S32 LL_VERSION_PATCH = 0; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Developer"; -- cgit v1.2.3 From f30680cce995ff8fd980101f75b8d69377116b7f Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 10:56:32 -0400 Subject: correct merge-induced error in settings.xml --- indra/newview/app_settings/settings.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9db59205bf..01842d1037 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12629,21 +12629,13 @@ WatchdogEnabled Comment -<<<<<<< local - Controls whether the thread watchdog timer is activated. -======= Controls whether the thread watchdog timer is activated. Value is boolean. Set to -1 to defer to built-in default. ->>>>>>> other Persist 0 Type S32 Value -<<<<<<< local - -1 -======= 0 ->>>>>>> other WaterGLFogDensityScale -- cgit v1.2.3 From 7c7038136eaab9d0ce3a1f5aaa47d3b83e5483c5 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 10:58:52 -0400 Subject: correct version number typo --- .hgtags | 1 + indra/llcommon/llversionviewer.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.hgtags b/.hgtags index eea6e4b702..39adb1e494 100644 --- a/.hgtags +++ b/.hgtags @@ -163,3 +163,4 @@ e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1 ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start 599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1 +46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index b39ef3050a..7e4bad9ee3 100755 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -27,7 +27,7 @@ #ifndef LL_LLVERSIONVIEWER_H #define LL_LLVERSIONVIEWER_H -const S32 LL_VERSION_MAJOR = 0; +const S32 LL_VERSION_MAJOR = 3; const S32 LL_VERSION_MINOR = 0; const S32 LL_VERSION_PATCH = 0; const S32 LL_VERSION_BUILD = 0; -- cgit v1.2.3 From 8053f7a5b0d7d0ca4440bddca921406461bb063c Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 11:08:33 -0400 Subject: correct xml syntax error --- indra/newview/skins/default/xui/en/floater_search.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 114b3a72e0..6d90f654d1 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -14,5 +14,5 @@ title="" initial_mime_type="text/html" width="780" + tab_stop="true" filename="floater_web_content.xml"/> - tab_stop="true" \ No newline at end of file -- cgit v1.2.3 From 1722790ab6e9e1e7ef2222034b904aaa1d8da30c Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 11:08:53 -0400 Subject: Added tag 3.0.0-start for changeset 6b678ea52f90 --- .hgtags | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.hgtags b/.hgtags index 39adb1e494..566092e48f 100644 --- a/.hgtags +++ b/.hgtags @@ -164,3 +164,5 @@ ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start 599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1 46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start +46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start +6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start -- cgit v1.2.3 From 4ab5831b3eed23c06d2ccd3cf55f6c018613c788 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 11:13:15 -0400 Subject: increment viewer version to 3.0.1 --- indra/llcommon/llversionviewer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 7e4bad9ee3..27b1bce60c 100755 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@ const S32 LL_VERSION_MAJOR = 3; const S32 LL_VERSION_MINOR = 0; -const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_PATCH = 1; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Developer"; -- cgit v1.2.3 From f7e5282badf8756614d8907f307adfa7ac1ce09c Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 16:49:06 -0400 Subject: fix idiosyncratic name for beta viewer channel icon recognition --- BuildParams | 2 ++ indra/newview/viewer_manifest.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/BuildParams b/BuildParams index a5729e616d..a6a50f091b 100644 --- a/BuildParams +++ b/BuildParams @@ -134,6 +134,8 @@ oz_project-4.codeticket_add_context = false oz_viewer-beta-review.build_debug_release_separately = true oz_viewer-beta-review.codeticket_add_context = false +oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer" +oz_viewer-beta-review.login_channel = "Second Life Beta Viewer" oz_viewer-poreview.build_debug_release_separately = true oz_viewer-poreview.codeticket_add_context = false diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 34565835e9..07382e8e85 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -147,7 +147,7 @@ class ViewerManifest(LLManifest): icon_path="icons/" channel_type=self.channel_lowerword() if channel_type == 'release' \ - or channel_type == 'beta' \ + or channel_type == 'betaviewer' \ or channel_type == 'development' \ : icon_path += channel_type -- cgit v1.2.3 From 881a215535d7bd3b9efc55b9f36722ceec4ccef1 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 8 Aug 2011 23:23:34 -0400 Subject: more idiosyncracies for beta channel --- indra/newview/CMakeLists.txt | 5 ++++- indra/newview/viewer_manifest.py | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index f87ecbd2f5..f6ebf331bb 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1249,10 +1249,13 @@ if (WINDOWS) endif(USE_PRECOMPILED_HEADERS) # Replace the icons with the appropriate ones for the channel + # ('test' is the default) set(ICON_PATH "test") string(TOLOWER ${VIEWER_CHANNEL} channel_lower) - if(channel_lower MATCHES "^(release|beta|development)") + if(channel_lower MATCHES "^(release|development)") set(ICON_PATH ${channel_lower}) + elseif(channel_lower MATCHES "^(beta.*)") + set(ICON_PATH "beta") elseif(channel_lower MATCHES "^(project.*)") set(ICON_PATH "project") endif() diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 07382e8e85..37099bf29b 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -147,10 +147,11 @@ class ViewerManifest(LLManifest): icon_path="icons/" channel_type=self.channel_lowerword() if channel_type == 'release' \ - or channel_type == 'betaviewer' \ or channel_type == 'development' \ : icon_path += channel_type + elif channel_type == 'betaviewer' : + icon_path += 'beta' elif re.match('project.*',channel_type) : icon_path += 'project' else : -- cgit v1.2.3 From e384ccb5dacc8208506f8849553af66d87950f5c Mon Sep 17 00:00:00 2001 From: prep linden Date: Tue, 9 Aug 2011 16:31:36 -0400 Subject: Temporarily disallow the upload of non 1.4 dae files --- indra/newview/llfloatermodelpreview.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 95dcf8ba1e..333c0c0000 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -768,6 +768,7 @@ void LLFloaterModelPreview::draw() if ( mModelPreview->getLoadState() == LLModelLoader::ERROR_PARSING ) { childSetTextArg("status", "[STATUS]", getString("status_parse_error")); + toggleCalculateButton(false); } else { @@ -776,7 +777,7 @@ void LLFloaterModelPreview::draw() } childSetEnabled("ok_btn", mHasUploadPerm && !mUploadModelUrl.empty()); - + childSetTextArg("prim_cost", "[PRIM_COST]", llformat("%d", mModelPreview->mResourceCost)); childSetTextArg("description_label", "[TEXTURES]", llformat("%d", mModelPreview->mTextureSet.size())); @@ -1395,6 +1396,18 @@ bool LLModelLoader::doLoadModel() return false; } + //determine if this dae is a valid version. + domVersionType docVersion = dom->getVersion(); + + if ( docVersion != VERSIONTYPE_1_4_0 ) + { + llinfos<<" Error with dae - unsupported dae version "<getElementCount(NULL, COLLADA_TYPE_MESH); -- cgit v1.2.3 From 0405e91df31b7fed5d994a6d2526a1c5a5bc8c5c Mon Sep 17 00:00:00 2001 From: prep linden Date: Tue, 9 Aug 2011 17:10:17 -0400 Subject: Reports error of a non compatible dae to the log if not 1.4 --- indra/newview/llfloatermodelpreview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 333c0c0000..3aca0f7119 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1402,8 +1402,8 @@ bool LLModelLoader::doLoadModel() if ( docVersion != VERSIONTYPE_1_4_0 ) { llinfos<<" Error with dae - unsupported dae version "< Date: Wed, 10 Aug 2011 12:27:29 -0400 Subject: Joint resolver now constructed from key name (cts-660) --- indra/newview/llfloatermodelpreview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 3aca0f7119..7d34754214 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1629,7 +1629,7 @@ bool LLModelLoader::doLoadModel() { //Build a joint for the resolver to work with char str[64]={0}; - sprintf(str,"./%s",(*jointIt).second.c_str() ); + sprintf(str,"./%s",(*jointIt).first.c_str() ); //llwarns<<"Joint "<< str < Date: Wed, 10 Aug 2011 12:50:12 -0400 Subject: Submitted correction for logic error: if decomp fails for single hull only execute fallback code --- indra/newview/llmeshrepository.cpp | 43 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 2473f2d610..1518fde66b 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -3144,32 +3144,33 @@ void LLPhysicsDecomp::doDecompositionSingleHull() llwarns << "Could not execute decomposition stage when attempting to create single hull." << llendl; make_box(mCurRequest); } + else + { + mMutex->lock(); + mCurRequest->mHull.clear(); + mCurRequest->mHull.resize(1); + mCurRequest->mHullMesh.clear(); + mMutex->unlock(); - mMutex->lock(); - mCurRequest->mHull.clear(); - mCurRequest->mHull.resize(1); - mCurRequest->mHullMesh.clear(); - mMutex->unlock(); - - std::vector p; - LLCDHull hull; + std::vector p; + LLCDHull hull; - // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code - decomp->getSingleHull(&hull); + // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code + decomp->getSingleHull(&hull); - const F32* v = hull.mVertexBase; + const F32* v = hull.mVertexBase; - for (S32 j = 0; j < hull.mNumVertices; ++j) - { - LLVector3 vert(v[0], v[1], v[2]); - p.push_back(vert); - v = (F32*) (((U8*) v) + hull.mVertexStrideBytes); - } + for (S32 j = 0; j < hull.mNumVertices; ++j) + { + LLVector3 vert(v[0], v[1], v[2]); + p.push_back(vert); + v = (F32*) (((U8*) v) + hull.mVertexStrideBytes); + } - mMutex->lock(); - mCurRequest->mHull[0] = p; - mMutex->unlock(); - + mMutex->lock(); + mCurRequest->mHull[0] = p; + mMutex->unlock(); + } #else setMeshData(mesh, false); -- cgit v1.2.3 From 0d91c495717ae210aff0248119af6c4ec7ad595d Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Wed, 10 Aug 2011 18:15:07 -0400 Subject: Fix for merge breakages --- indra/newview/llviewerobject.h | 3 --- indra/newview/llviewerregion.cpp | 2 -- 2 files changed, 5 deletions(-) diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index f7620707cf..af96bd8fde 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -243,9 +243,6 @@ public: void buildReturnablesForChildrenVO( std::vector& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion ); void constructAndAddReturnable( std::vector& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion ); - void buildReturnablesForChildrenVO( std::vector& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion ); - void constructAndAddReturnable( std::vector& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion ); - /* // This method will scan through this object, and then query the // selection manager to see if the local agent probably has the diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 415963ff53..a7fac0e29d 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1486,8 +1486,6 @@ void LLViewerRegion::unpackRegionHandshake() msg->sendReliable(host); } -void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) -{ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) { capabilityNames.append("AttachmentResources"); -- cgit v1.2.3 From 6b70273603e4aa807662c301179d05a1f2f5a224 Mon Sep 17 00:00:00 2001 From: prep linden Date: Thu, 11 Aug 2011 13:19:58 -0400 Subject: Added support for parsing of collada 1.4.1 location sids --- indra/newview/llfloatermodelpreview.cpp | 60 +++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 195c70c5a6..737fdd4919 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -184,6 +184,13 @@ std::string lod_label_name[NUM_LOD+1] = "I went off the end of the lod_label_name array. Me so smart." }; +std::string colladaVersion[VERSIONTYPE_COUNT+1] = +{ + "1.4.0", + "1.4.1", + "Unsupported" +}; + #define LL_DEGENERACY_TOLERANCE 1e-7f @@ -1395,17 +1402,20 @@ bool LLModelLoader::doLoadModel() setLoadState( ERROR_PARSING ); return false; } - - //determine if this dae is a valid version. + //Dom version + daeString domVersion = dae.getDomVersion(); + std::string sldom(domVersion); + llinfos<<"Collada Importer Version: "<getVersion(); - - if ( docVersion != VERSIONTYPE_1_4_0 ) - { - llinfos<<" Error with dae - unsupported dae version "< 1 ) + { + docVersion = VERSIONTYPE_COUNT; + } + llinfos<<"Dae version "<( jointResolver.getElement() ); + daeSIDResolver jointResolverA( pJoint, "./translate" ); + domTranslate* pTranslateA = daeSafeCast( jointResolverA.getElement() ); + daeSIDResolver jointResolverB( pJoint, "./location" ); + domTranslate* pTranslateB = daeSafeCast( jointResolverB.getElement() ); LLMatrix4 workingTransform; //Translation via SID - if ( pTranslate ) + if ( pTranslateA ) + { + extractTranslation( pTranslateA, workingTransform ); + } + else + if ( pTranslateB ) { - extractTranslation( pTranslate, workingTransform ); + extractTranslation( pTranslateB, workingTransform ); } else { @@ -2525,13 +2542,20 @@ void LLModelLoader::processJointNode( domNode* pNode, JointTransformMap& jointTr LLMatrix4 workingTransform; //Pull out the translate id and store it in the jointTranslations map - daeSIDResolver jointResolver( pNode, "./translate" ); - domTranslate* pTranslate = daeSafeCast( jointResolver.getElement() ); + daeSIDResolver jointResolverA( pNode, "./translate" ); + domTranslate* pTranslateA = daeSafeCast( jointResolverA.getElement() ); + daeSIDResolver jointResolverB( pNode, "./location" ); + domTranslate* pTranslateB = daeSafeCast( jointResolverB.getElement() ); //Translation via SID was successful - if ( pTranslate ) + if ( pTranslateA ) + { + extractTranslation( pTranslateA, workingTransform ); + } + else + if ( pTranslateB ) { - extractTranslation( pTranslate, workingTransform ); + extractTranslation( pTranslateB, workingTransform ); } else { -- cgit v1.2.3