diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 142aa5b476..f467fba416 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -1014,6 +1014,7 @@ LLGLManager::LLGLManager() : mGLSLVersionMajor(0), mGLSLVersionMinor(0), mVRAM(0), + mVRAMDetected(0), // add override support mGLMaxVertexRange(0), mGLMaxIndexRange(0) { diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index a2143a447c..9198fae85f 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -133,7 +133,7 @@ public: std::string mGLVersionString; U32 mVRAM; // VRAM in MB - + S32 mVRAMDetected; // The amount detected/reported by the OS/Drivers. If different to mVRAM there is an override in place. std::string getGLInfoString(); void printGLInfoString(); void getGLInfo(LLSD& info); diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 64cc55823d..fee05ff218 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -251,8 +251,14 @@ bool LLFlatListView::removeItemByValue(const LLSD& value, bool rearrange) if (value.isUndefined()) return false; item_pair_t* item_pair = getItemPair(value); - if (!item_pair) return false; - + // try to find where the notifications get stuck + // if (!item_pair) return false; + if (!item_pair) + { + LL_WARNS() << "LLFlatListView::removeItemByValue: item_pair not found" << LL_ENDL; + return false; + } + // return removeItemPair(item_pair, rearrange); } @@ -1105,7 +1111,13 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange) } } - if (!deleted) return false; + // try to find where the notifications get stuck + // if (!deleted) return false; + if (!deleted) + { + LL_WARNS() << "LLFlatListView::removeItemPair: item not found" << LL_ENDL; + return false; + } for (pairs_iterator_t it = mSelectedItemPairs.begin(); it != mSelectedItemPairs.end(); ++it) { diff --git a/indra/newview/fsdata.cpp b/indra/newview/fsdata.cpp index 7b58cac222..4c6620faba 100644 --- a/indra/newview/fsdata.cpp +++ b/indra/newview/fsdata.cpp @@ -1023,7 +1023,7 @@ LLSD FSData::getSystemInfo() info["SIMD"].asString().c_str(), info["BUILD_TYPE"].asString().c_str()); sysinfo1 += llformat("Build with %s version %s\n\n", info["COMPILER"].asString().c_str(), info["COMPILER_VERSION"].asString().c_str()); - sysinfo1 += llformat("I am in %s located at %s (%s)\n", info["REGION"].asString().c_str(), info["HOSTNAME"].asString().c_str(), info["HOSTIP"].asString().c_str()); + sysinfo1 += llformat("Location: %s (%s)\n", info["REGION"].asString().c_str(), info["HOSTNAME"].asString().c_str(), info["HOSTIP"].asString().c_str()); sysinfo1 += llformat("%s\n\n", info["SERVER_VERSION"].asString().c_str()); sysinfo1 += llformat("CPU: %s\n", info["CPU"].asString().c_str()); @@ -1031,7 +1031,9 @@ LLSD FSData::getSystemInfo() sysinfo1 += llformat("OS: %s\n", info["OS_VERSION"].asString().c_str()); sysinfo1 += llformat("Graphics Card Vendor: %s\n", info["GRAPHICS_CARD_VENDOR"].asString().c_str()); sysinfo1 += llformat("Graphics Card: %s\n", info["GRAPHICS_CARD"].asString().c_str()); - sysinfo1 += llformat("Graphics Card Memory: %d MB\n", info["GRAPHICS_CARD_MEMORY"].asInteger()); + sysinfo1 += llformat("VRAM: %d MB\n", info["GRAPHICS_CARD_MEMORY"].asInteger()); + sysinfo1 += llformat("VRAM (Detected): %d MB\n", info["GRAPHICS_CARD_MEMORY_DETECTED"].asInteger()); + sysinfo1 += llformat("VRAM (Budget): %s\n", info["VRAM_BUDGET_ENGLISH"].asString().c_str()); if (info.has("GRAPHICS_DRIVER_VERSION")) { @@ -1064,15 +1066,6 @@ LLSD FSData::getSystemInfo() sysinfo2 += llformat("Bandwidth: %d kbit/s\n", info["BANDWIDTH"].asInteger()); sysinfo2 += llformat("LOD Factor: %.3f\n", info["LOD"].asReal()); sysinfo2 += llformat("Render quality: %s\n", info["RENDERQUALITY_FSDATA_ENGLISH"].asString().c_str()); - sysinfo2 += llformat("ALM enabled: %s\n", info["ALMSTATUS_FSDATA_ENGLISH"].asString().c_str()); - if (info["TEXTUREMEMORYDYNAMIC"].asBoolean()) - { - sysinfo2 += llformat("Texture memory: Dynamic (%d MB min / %d%% Cache / %d%% VRAM)\n", info["TEXTUREMEMORYMIN"].asInteger(), info["TEXTUREMEMORYCACHERESERVE"].asInteger(), info["TEXTUREMEMORYGPURESERVE"].asInteger()); - } - else - { - sysinfo2 += llformat("Texture memory: %d MB (%.2f)\n", info["TEXTUREMEMORY"].asInteger(), info["TEXTUREMEMORYMULTIPLIER"].asReal()); - } sysinfo2 += "Disk cache: " + info["DISK_CACHE_INFO"].asString(); LLSD sysinfos; diff --git a/indra/newview/fsfloaterwhitelisthelper.cpp b/indra/newview/fsfloaterwhitelisthelper.cpp index e26df39b05..0d8eeb5928 100644 --- a/indra/newview/fsfloaterwhitelisthelper.cpp +++ b/indra/newview/fsfloaterwhitelisthelper.cpp @@ -50,10 +50,14 @@ void FSFloaterWhiteListHelper::populateWhitelistInfo() // On windows use exe (not work or RO) directory std::string voiceexe_path = gDirUtilp->getExecutableDir(); gDirUtilp->append(voiceexe_path, "SLVoice.exe"); + std::string dullahan_path = gDirUtilp->getLLPluginDir(); + std::string dullahan_exe = "dullahan_host.exe"; #elif LL_DARWIN // On MAC use resource directory std::string voiceexe_path = gDirUtilp->getAppRODataDir(); gDirUtilp->append(voiceexe_path, "SLVoice"); + std::string dullahan_path = ""; // ignore dullahan on mac until we can identify it accurately + std::string dullahan_exe = ""; #else std::string voiceexe_path = gDirUtilp->getExecutableDir(); bool usingWine = gSavedSettings.getBOOL("FSLinuxEnableWin64VoiceProxy"); @@ -65,8 +69,12 @@ void FSFloaterWhiteListHelper::populateWhitelistInfo() { gDirUtilp->append(voiceexe_path, "win64/SLVoice.exe"); // use bundled win64 version } + std::string dullahan_path = gDirUtilp->getExecutableDir(); // linux keeps dullahan in the bin folder + std::string dullahan_exe = "dullahan_host"; #endif + gDirUtilp->append(dullahan_path, dullahan_exe); + const std::string slpluginexe_path = gDirUtilp->getLLPluginLauncher(); std::string whitelist_folder_info = @@ -80,7 +88,10 @@ void FSFloaterWhiteListHelper::populateWhitelistInfo() + gDirUtilp->getBaseFileName(voiceexe_path, false) + "\n" // " Voice Binary" + voiceexe_path + "\n" // slvoice full path + gDirUtilp->getBaseFileName(slpluginexe_path, false) + "\n" // SLPlugin Launcher Binary - + slpluginexe_path + "\n"; // SLPlugin Launcher full path + + slpluginexe_path + "\n" // SLPlugin Launcher full path + + gDirUtilp->getBaseFileName(dullahan_path, false) + "\n" // SLPlugin Launcher Binary + + dullahan_path + "\n" + ; getChild("whitelist_folders_editor")->setText(whitelist_folder_info); getChild("whitelist_exes_editor")->setText(whitelist_exe_info); diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 73a3a32443..e006eaa9d2 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2751,6 +2751,17 @@ void LLAgent::endAnimationUpdateUI() // clean up UI from mode we're leaving if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_MOUSELOOK ) { + // FIRE-33958: clear out any visible toasts/group notices before leaving mouselook + LLNotificationsUI::LLScreenChannel* channel = dynamic_cast( + LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID) + ); + + if(channel) + { + channel->removeAndStoreAllStorableToasts(); + } + // + // Unhide chat bar, unless autohide is enabled gSavedSettings.setBOOL("MouseLookEnabled", false); if(!gSavedSettings.getBOOL("AutohideChatBar")) @@ -2914,6 +2925,16 @@ void LLAgent::endAnimationUpdateUI() //--------------------------------------------------------------------- if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { + // FIRE-33958: clear out any visible toasts/group notices before entering mouselook + LLNotificationsUI::LLScreenChannel* channel = dynamic_cast( + LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID) + ); + + if(channel) + { + channel->removeAndStoreAllStorableToasts(); + } + // // FIRE-8868: Show UI in mouselook if(!gSavedSettings.getBOOL("FSShowInterfaceInMouselook")) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 4bc423bc84..15a346e0ac 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1130,6 +1130,12 @@ bool LLAppViewer::init() gGLActive = true; initWindow(); LL_INFOS("InitInfo") << "Window is initialized." << LL_ENDL ; + // allow detected hardware to be overridden. + gGLManager.mVRAMDetected = gGLManager.mVRAM; + LL_INFOS("AppInit") << "VRAM detected: " << gGLManager.mVRAMDetected << LL_ENDL; + overrideDetectedHardware(); + // + // writeSystemInfo can be called after window is initialized (gViewerWindow non-null) writeSystemInfo(); @@ -1490,6 +1496,20 @@ bool LLAppViewer::init() return true; } +// allow detected hardware to be overridden. +void LLAppViewer::overrideDetectedHardware() +{ + // Override the VRAM Detection if FSOverrideVRAMDetection is set. + if ( gSavedSettings.getBOOL("FSOverrideVRAMDetection") ) + { + S32 forced_video_memory = gSavedSettings.getS32("FSForcedVideoMemory"); + // Note: 0 is allowed here, some systems detect VRAM as zero so override should support emulating them. + LL_INFOS("AppInit") << "Overriding VRAM to " << forced_video_memory*1024 << " MB" << LL_ENDL; + gGLManager.mVRAM = forced_video_memory*1024; + } +} +// + void LLAppViewer::initMaxHeapSize() { //set the max heap size. @@ -3937,6 +3957,7 @@ LLSD LLAppViewer::getViewerInfo() const info["GRAPHICS_CARD_VENDOR"] = ll_safe_string((const char*)(glGetString(GL_VENDOR))); info["GRAPHICS_CARD"] = ll_safe_string((const char*)(glGetString(GL_RENDERER))); info["GRAPHICS_CARD_MEMORY"] = LLSD::Integer(gGLManager.mVRAM); + info["GRAPHICS_CARD_MEMORY_DETECTED"] = gGLManager.mVRAMDetected; // allow detected hardware to be overridden. #if LL_WINDOWS std::string drvinfo; @@ -4138,18 +4159,18 @@ LLSD LLAppViewer::getViewerInfo() const } // - // ALM enabled or disabled - if (gSavedSettings.getBOOL("RenderDeferred")) + // Include VRAM budget + if (auto budget = gSavedSettings.getU32("RenderMaxVRAMBudget"); budget > 0) { - info["ALMSTATUS"] = LLTrans::getString("PermYes"); - info["ALMSTATUS_FSDATA_ENGLISH"] = "Yes"; + info["VRAM_BUDGET"] = std::to_string(budget) + " MB"; + info["VRAM_BUDGET_ENGLISH"] = std::to_string(budget) + " MB"; } else { - info["ALMSTATUS"] = LLTrans::getString("PermNo"); - info["ALMSTATUS_FSDATA_ENGLISH"] = "No"; + info["VRAM_BUDGET"] = LLTrans::getString("Unlimited"); + info["VRAM_BUDGET_ENGLISH"] = "Unlimited"; } - // + // return info; } diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 00f3b5cdf0..9544168723 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -244,6 +244,7 @@ protected: virtual void initLoggingAndGetLastDuration(); // Initialize log files, logging system virtual void initConsole() {}; // Initialize OS level debugging console. virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit. + virtual void overrideDetectedHardware(); // Override VRAM (and others in future?) consistently. virtual bool initSLURLHandler(); virtual bool sendURLToOtherInstance(const std::string& url); diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 642241cf47..83c479703d 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -1028,22 +1028,10 @@ bool LLAppViewerWin32::initHardwareTest() if (gGLManager.mVRAM == 0) { - // Allow the user to override the VRAM detection - if ( gSavedSettings.getBOOL("FSOverrideVRAMDetection") ) - { - S32 forced_video_memory = gSavedSettings.getS32("FSForcedVideoMemory"); - if ( forced_video_memory > 0 ) - { - LL_INFOS("AppInit") << "Forcing VRAM to " << forced_video_memory*1024 << " MB" << LL_ENDL; - gGLManager.mVRAM = forced_video_memory*1024; - } - } - else - // gGLManager.mVRAM = gDXHardware.getVRAM(); } - LL_INFOS("AppInit") << "Detected VRAM: " << gGLManager.mVRAM << LL_ENDL; + // LL_INFOS("AppInit") << "Detected VRAM: " << gGLManager.mVRAM << LL_ENDL; // move this into common code return true; } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 8032c4c021..79dc6db47c 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -5297,7 +5297,7 @@ static void copy_prefs_file(const std::string& from, const std::string& to) LL_INFOS() << "Copying " << from << " to " << to << LL_ENDL; std::error_code ec; - if (!std::filesystem::copy_file(from, to, ec) || ec) + if (!std::filesystem::copy_file(from, to, std::filesystem::copy_options::overwrite_existing, ec) || ec) LL_WARNS() << "Couldn't copy file: " << ec.message() << LL_ENDL; } diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index 095a535aa7..59a88fcbd9 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -469,7 +469,6 @@ void LLModelPreview::rebuildUploadData() { assert_main_thread(); - mDefaultPhysicsShapeP = NULL; mUploadData.clear(); mTextureSet.clear(); diff --git a/indra/newview/llmodelpreview.h b/indra/newview/llmodelpreview.h index 0b605c2928..09c168ecf5 100644 --- a/indra/newview/llmodelpreview.h +++ b/indra/newview/llmodelpreview.h @@ -246,7 +246,7 @@ private: /// It is set only when the user chooses a physics shape file that contains a mesh with a name that matches DEFAULT_PHYSICS_MESH_NAME. /// It is reset when such a name is not found, and when resetting the modelpreview. /// Not read unless mWarnOfUnmatchedPhyicsMeshes is true. - LLPointer mDefaultPhysicsShapeP; + LLPointer mDefaultPhysicsShapeP{nullptr}; typedef enum { diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 23c50d1e18..a5cbad878b 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -98,12 +98,18 @@ LLViewerCamera::LLViewerCamera() : LLCamera() mAverageSpeed = 0.f; mAverageAngularSpeed = 0.f; - mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); + // add a way to disconnect/reconnect the "CameraAngle" changed signal + // mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); + connectCameraAngleSignal(); + // } LLViewerCamera::~LLViewerCamera() { - mCameraAngleChangedSignal.disconnect(); + // add a way to disconnect/reconnect the "CameraAngle" changed signal + // mCameraAngleChangedSignal.disconnect(); + disconnectCameraAngleSignal(); + // } void LLViewerCamera::updateCameraLocation(const LLVector3 ¢er, const LLVector3 &up_direction, const LLVector3 &point_of_interest) @@ -920,3 +926,19 @@ void LLViewerCamera::updateCameraAngle(const LLSD& value) setDefaultFOV(value.asReal()); } +// add a way to disconnect/reconnect the "CameraAngle" changed signal +void LLViewerCamera::connectCameraAngleSignal() +{ + if (mCameraAngleChangedSignal.connected()) + { + mCameraAngleChangedSignal.disconnect(); + } + + mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); +} + +void LLViewerCamera::disconnectCameraAngleSignal() +{ + mCameraAngleChangedSignal.disconnect(); +} +// diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index a204b85d88..b202f0812a 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -129,6 +129,12 @@ protected: boost::signals2::connection mCameraAngleChangedSignal; public: + // Enable external classes to disconnect and connect the "CameraAngle" settings + // changed signal, so classes can copy and overwrite the camera class and restore + // the signal handler + void connectCameraAngleSignal(); + void disconnectCameraAngleSignal(); + // }; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 4c874d9901..6822cb6c2f 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -6566,6 +6566,8 @@ bool LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea glh::matrix4f saved_proj = get_current_projection(); glh::matrix4f saved_mod = get_current_modelview(); + camera->disconnectCameraAngleSignal(); // disconnect the "CameraAngle" changed signal + // camera constants for the square, cube map capture image camera->setAspect(1.0); // must set aspect ratio first to avoid undesirable clamping of vertical FoV camera->setViewNoBroadcast(F_PI_BY_TWO); @@ -6700,6 +6702,8 @@ bool LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea setup3DViewport(); LLPipeline::sUseOcclusion = old_occlusion; + camera->connectCameraAngleSignal(); // reconnect the "CameraAngle" changed signal so mouselook zoom keeps working + // ==================================================== return true; } diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index 40ecd466cc..a484e674da 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -550,6 +550,16 @@ F32 LLVOCacheEntry::getSquaredPixelThreshold(bool is_front) bool LLVOCacheEntry::isAnyVisible(const LLVector4a& camera_origin, const LLVector4a& local_camera_origin, F32 dist_threshold) { +#if 0 + // this is ill-conceived and should be removed pending QA + // In the name of saving memory, we evict objects that are still within view distance from memory + // This results in constant paging of objects in and out of memory, leading to poor performance + // and many unacceptable visual glitches when rotating the camera + + // Honestly, the entire VOCache partition system needs to be removed since it doubles the overhead of + // the spatial partition system and is redundant to the object cache, but this is a start + // - davep 2024.06.07 + if( gAgent.getFSAreaSearchActive() ) { return true; } // FIRE-32688 Area Search improvements LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)getGroup(); if(!group) @@ -587,6 +597,9 @@ bool LLVOCacheEntry::isAnyVisible(const LLVector4a& camera_origin, const LLVecto } return vis; +#else + return true; +#endif } void LLVOCacheEntry::calcSceneContribution(const LLVector4a& camera_origin, bool needs_update, U32 last_update, F32 max_dist) diff --git a/indra/newview/skins/default/xui/az/strings.xml b/indra/newview/skins/default/xui/az/strings.xml index 52447aef6d..ce90cacad2 100644 --- a/indra/newview/skins/default/xui/az/strings.xml +++ b/indra/newview/skins/default/xui/az/strings.xml @@ -58,6 +58,8 @@ OS versiyası: [OS_VERSION] Grafik kartının istehsalçısı: [GRAPHICS_CARD_VENDOR] Grafik kartı: [GRAPHICS_CARD] Grafik kartının yaddaşı: [GRAPHICS_CARD_MEMORY] MB +Grafik kartının yaddaşı (Detected): [GRAPHICS_CARD_MEMORY_DETECTED] MB +Grafik kartının yaddaşı (Budget): [VRAM_BUDGET] Windows grafik sürücüsü versiyası: [GRAPHICS_DRIVER_VERSION] @@ -76,13 +78,6 @@ UI məstabı: [UI_SCALE_FACTOR] Bandwidth: [BANDWIDTH] Detallaşdırma səviyyəsi: [LOD] Grafika keyfiyyəti: [RENDERQUALITY] -Yüksəldilmiş işıqlandırma modeli: [ALMSTATUS] - - - Tekstur yaddaşı: [TEXTUREMEMORY] MB ([TEXTUREMEMORYMULTIPLIER]) - - - Tekstur yaddaşı: dinamik ([TEXTUREMEMORYMIN] MB min. / [TEXTUREMEMORYCACHERESERVE]% Cache / [TEXTUREMEMORYGPURESERVE]% VRAM) Disk keşi: [DISK_CACHE_INFO] diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 4fbabd899a..d8735983e7 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -94,8 +94,9 @@ - + + diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index 8243060514..a18cdde565 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -58,6 +58,8 @@ Betriebssystemversion: [OS_VERSION] Grafikkartenhersteller: [GRAPHICS_CARD_VENDOR] Grafikkarte: [GRAPHICS_CARD] Grafikkartenspeicher: [GRAPHICS_CARD_MEMORY] MB +Grafikkartenspeicher (Erkannt): [GRAPHICS_CARD_MEMORY_DETECTED] MB +Grafikkartenspeicher (Budget): [VRAM_BUDGET] Windows-Grafiktreiberversion: [GRAPHICS_DRIVER_VERSION] @@ -76,7 +78,6 @@ Draw Distance: [DRAW_DISTANCE] m Bandbreite: [BANDWIDTH] kbit/s LOD-Faktor: [LOD] Darstellungsqualität: [RENDERQUALITY] -Erweitertes Beleuchtungsmodell: [ALMSTATUS] Disk-Cache: [DISK_CACHE_INFO] @@ -7273,4 +7274,7 @@ Ihre aktuelle Position: [AVATAR_POS] das Support-Team Ihres Grid-Betreibers + + Unlimitiert + diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 35b1d53421..64e72e62cb 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -355,18 +355,18 @@ +