diff --git a/autobuild.xml b/autobuild.xml
index f836af8b23..3f6859e867 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1944,9 +1944,9 @@
archive
name
linux64
@@ -1956,9 +1956,9 @@
archive
name
windows
@@ -1968,9 +1968,9 @@
archive
name
windows64
diff --git a/indra/llcommon/fstelemetry.cpp b/indra/llcommon/fstelemetry.cpp
index c2bc80b66a..12c31d521d 100644
--- a/indra/llcommon/fstelemetry.cpp
+++ b/indra/llcommon/fstelemetry.cpp
@@ -28,4 +28,11 @@
namespace FSTelemetry
{
bool active{false};
+
+ int RecordSceneTime::writeBuffer{0};
+
+ bool RecordSceneTime::collectionEnabled{true};
+
+ std::array< typename RecordSceneTime::StatsArray, 2 > RecordSceneTime::stats{ {} };
+
}
\ No newline at end of file
diff --git a/indra/llcommon/fstelemetry.h b/indra/llcommon/fstelemetry.h
index 9a0cdd5e18..c3f6a28bf1 100644
--- a/indra/llcommon/fstelemetry.h
+++ b/indra/llcommon/fstelemetry.h
@@ -63,9 +63,178 @@
#define FSTelemetryIsConnected
#endif // TRACY_ENABLE
+#include
+#include
+#include
+
namespace FSTelemetry
{
extern bool active;
-}
+
+ enum class ObjStatType_t{
+ RENDER_GEOMETRY=0,
+ RENDER_SHADOWS,
+ RENDER_COMBINED,
+ STATS_COUNT
+ };
+ enum class SceneStatType_t{
+ RENDER_GEOMETRY=0,
+ RENDER_SHADOWS,
+ RENDER_HUDS,
+ RENDER_UI,
+ RENDER_COMBINED,
+ RENDER_SWAP,
+ RENDER_FRAME,
+ RENDER_SLEEP,
+ RENDER_LFS,
+ RENDER_MESHREPO,
+ RENDER_FPSLIMIT,
+ RENDER_FPS,
+ STATS_COUNT
+ };
+
+ using ObjStatType = ObjStatType_t;
+ using SceneStatType = SceneStatType_t;
+
+ class RecordSceneTime
+ {
+ using StatsEnum = SceneStatType;
+ using StatsArray = std::array(StatsEnum::STATS_COUNT)>;
+ // using StatsBlock = std::unordered_map;
+
+ static int writeBuffer;
+ static std::array stats;
+ static bool collectionEnabled;
+
+ RecordSceneTime(const RecordSceneTime&) = delete;
+ RecordSceneTime() = delete;
+
+ const StatsEnum type;
+ std::chrono::steady_clock::time_point start;
+ public:
+
+ static inline void enable(){collectionEnabled=true;};
+ static inline void disable(){collectionEnabled=false;};
+ static inline bool enabled(){return(collectionEnabled);};
+
+ RecordSceneTime(SceneStatType type):start{std::chrono::steady_clock::now()}, type{type} {}
+
+ ~RecordSceneTime()
+ {
+ auto val = std::chrono::duration(std::chrono::steady_clock::now() - start).count();
+ stats[writeBuffer][static_cast(type)] += val;
+ };
+
+ static inline void toggleBuffer()
+ {
+ if(enabled())
+ {
+ // stats[writeBuffer][static_cast(SceneStatType::RENDER_FPS)] = LLTrace::get_frame_recording().getPeriodMeanPerSec(LLStatViewer::FPS,3); // last 3 Frames
+ writeBuffer = (writeBuffer+1)%2;
+ }; // not we are relying on atomic updates here. The risk is low and would cause minor errors in the stats display.
+
+ auto& statsArray = stats[writeBuffer];
+ std::fill_n(statsArray.begin() ,static_cast(SceneStatType::STATS_COUNT),0);
+ }
+ static inline int getReadBufferIndex(){return (writeBuffer+1)%2;};
+ static inline StatsArray getCurrentStatsBuffer(){ return stats[getReadBufferIndex()];}
+ static inline uint64_t get(StatsEnum type){return stats[getReadBufferIndex()][static_cast(type)];}
+ };
+
+ template
+ class RecordObjectTime
+ {
+ using StatsEnum = ObjStatType;
+ using StatsArray = std::array(StatsEnum::STATS_COUNT)>;
+ using StatsBlock = std::unordered_map;
+
+ static int writeBuffer;
+ static std::array stats;
+
+ static std::array max;
+ static std::array sum;
+ static bool collectionEnabled;
+
+ RecordObjectTime(const RecordObjectTime&) = delete;
+ RecordObjectTime() = delete;
+ const T key;
+ const StatsEnum type;
+ std::chrono::steady_clock::time_point start;
+
+ public:
+ static inline void enable(){collectionEnabled=true;};
+ static inline void disable(){collectionEnabled=false;};
+ static inline bool enabled(){return(collectionEnabled);};
+
+ RecordObjectTime(T key, ObjStatType type):start{std::chrono::steady_clock::now()}, key{key}, type{type} {}
+
+ ~RecordObjectTime()
+ {
+ using ST = StatsEnum;
+ // Note: nullptr is used as the key for global stats
+ auto val = std::chrono::duration(std::chrono::steady_clock::now() - start).count();
+ if(key)
+ {
+ stats[writeBuffer][key][static_cast(type)] += val;
+ stats[writeBuffer][key][static_cast(ST::RENDER_COMBINED)] += val;
+ if(max[writeBuffer][static_cast(type)] < stats[writeBuffer][key][static_cast(type)])
+ {
+ max[writeBuffer][static_cast(type)] = stats[writeBuffer][key][static_cast(type)];
+ }
+ if(max[writeBuffer][static_cast(ST::RENDER_COMBINED)] < stats[writeBuffer][key][static_cast(ST::RENDER_COMBINED)])
+ {
+ max[writeBuffer][static_cast(ST::RENDER_COMBINED)] = stats[writeBuffer][key][static_cast(ST::RENDER_COMBINED)];
+ }
+ sum[writeBuffer][static_cast(type)] += val;
+ sum[writeBuffer][static_cast(ST::RENDER_COMBINED)] += val;
+ }
+ };
+ static inline void toggleBuffer()
+ {
+ using ST = StatsEnum;
+ if(enabled())
+ {
+ writeBuffer = (writeBuffer+1)%2;
+ }; // note we are relying on atomic updates here. The risk is low and would cause minor errors in the stats display.
+
+ auto& statsMap = stats[writeBuffer];
+ for(auto& stat_entry : statsMap)
+ {
+ std::fill_n(stat_entry.second.begin() ,static_cast(ST::STATS_COUNT),0);
+ }
+ statsMap.clear();
+ std::fill_n(max[writeBuffer].begin(),static_cast(ST::STATS_COUNT),0);
+ std::fill_n(sum[writeBuffer].begin(),static_cast(ST::STATS_COUNT),0);
+ }
+ static inline int getReadbufferIndex(){return (writeBuffer+1)%2;};
+ static inline StatsBlock& getCurrentStatsBuffer(){ return stats[(writeBuffer+1)%2]; }
+ static inline uint64_t getMax(StatsEnum type){return max[(writeBuffer+1)%2][static_cast(type)];}
+ static inline uint64_t getSum(StatsEnum type){return sum[(writeBuffer+1)%2][static_cast(type)];}
+ static inline uint64_t getNum(){return stats[(writeBuffer+1)%2].size();}
+ static inline uint64_t get(T key, StatsEnum type){return stats[(writeBuffer+1)%2][key][static_cast(type)];}
+ };
+
+ static inline void toggleBuffer()
+ {
+ // RecordObjectTime::toggleBuffer();
+ RecordSceneTime::toggleBuffer();
+ }
+
+ template< typename T >
+ int RecordObjectTime::writeBuffer{0};
+
+ template< typename T >
+ bool RecordObjectTime::collectionEnabled{true};
+
+ template< typename T >
+ std::array< typename RecordObjectTime< T >::StatsArray, 2 > RecordObjectTime::max;
+
+ template< typename T >
+ std::array< typename RecordObjectTime< T >::StatsArray, 2 > RecordObjectTime::sum;
+
+ template< typename T >
+ std::array< typename RecordObjectTime< T >::StatsBlock, 2 > RecordObjectTime< T >::stats{ {{}} };
+
+}// namespace FSTelemetry
#endif
\ No newline at end of file
diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp
index e1e7863cca..7ee9c4f777 100644
--- a/indra/llkdu/llimagej2ckdu.cpp
+++ b/indra/llkdu/llimagej2ckdu.cpp
@@ -321,7 +321,12 @@ void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECod
// *TODO: This seems to be wrong. The base class should have no idea of
// how j2c compression works so no good way of computing what's the byte
// range to be used.
+#if (KDU_MAJOR_VERSION*10000 + KDU_MINOR_VERSION*100 + KDU_PATCH_VERSION) >= 80200
+ mCodeStreamp->set_max_bytes(max_bytes, false);
+#else
mCodeStreamp->set_max_bytes(max_bytes,true);
+#endif
+
// If you want to flip or rotate the image for some reason, change
// the resolution, or identify a restricted region of interest, this is
diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp
index 43b36f36f3..bbd3c85ec1 100644
--- a/indra/media_plugins/cef/media_plugin_cef.cpp
+++ b/indra/media_plugins/cef/media_plugin_cef.cpp
@@ -1012,12 +1012,7 @@ void MediaPluginCEF::checkEditState()
void MediaPluginCEF::setVolume()
{
- //mVolumeCatcher.setVolume(mCurVolume);
-#if 0//(DULLAHAN_VERSION_MAJOR*100 + DULLAHAN_VERSION_MINOR) >= 108
- mCEFLib->setVolume(mCurVolume);
-#else
mVolumeCatcher.setVolume(mCurVolume);
-#endif
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b60b84d0bd..a9bb2bc0a9 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1182,7 +1182,7 @@ set(viewer_HEADER_FILES
llfloaterperms.h
llfloaterpostprocess.h
llfloaterpreference.h
- llfloaterpreferencesgraphicsadvanced.h
+ # llfloaterpreferencesgraphicsadvanced.h
llfloaterpreferenceviewadvanced.h
llfloaterpreviewtrash.h
llfloaterproperties.h
diff --git a/indra/newview/fsradarentry.cpp b/indra/newview/fsradarentry.cpp
index 38bb6839e2..ef911faa58 100644
--- a/indra/newview/fsradarentry.cpp
+++ b/indra/newview/fsradarentry.cpp
@@ -124,7 +124,7 @@ void FSRadarEntry::processProperties(void* data, EAvatarProcessorType type)
else if (type == APT_NOTES)
{
LLAvatarNotes* avatar_notes = static_cast(data);
- if (avatar_notes && avatar_notes->agent_id == gAgentID && avatar_notes->target_id == mID)
+ if (avatar_notes && avatar_notes->agent_id == gAgentID && avatar_notes->target_id == mID && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
{
mNotes = avatar_notes->notes;
LLStringUtil::trim(mNotes);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 5ed386fc5d..05ce83c6e9 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1631,6 +1631,9 @@ bool LLAppViewer::frame()
bool LLAppViewer::doFrame()
{
+ {
+ FSTelemetry::RecordSceneTime T (FSTelemetry::SceneStatType::RENDER_FRAME);
+
LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop"));
LLSD newFrame;
// telemetry enabling.
@@ -1828,6 +1831,7 @@ bool LLAppViewer::doFrame()
static LLCachedControl yield_time(gSavedSettings, "YieldTime", -1);
if(yield_time >= 0)
{
+ FSTelemetry::RecordSceneTime T ( FSTelemetry::SceneStatType::RENDER_SLEEP );
LL_RECORD_BLOCK_TIME(FTM_YIELD);
ms_sleep(yield_time);
}
@@ -1922,6 +1926,7 @@ bool LLAppViewer::doFrame()
if (fsLimitFramerate && LLStartUp::getStartupState() == STATE_STARTED && !gTeleportDisplay && !logoutRequestSent() && max_fps > F_APPROXIMATELY_ZERO)
{
// Sleep a while to limit frame rate.
+ FSTelemetry::RecordSceneTime T (FSTelemetry::SceneStatType::RENDER_FPSLIMIT);
F32 min_frame_time = 1.f / (F32)max_fps;
S32 milliseconds_to_sleep = llclamp((S32)((min_frame_time - frameTimer.getElapsedTimeF64()) * 1000.f), 0, 1000);
if (milliseconds_to_sleep > 0)
@@ -1961,6 +1966,9 @@ bool LLAppViewer::doFrame()
}
FSFrameMark; // Tracy support delineate Frame
LLPROFILE_UPDATE();
+ }
+ FSTelemetry::RecordSceneTime::toggleBuffer();
+ FSTelemetry::RecordObjectTime::toggleBuffer();
return ! LLApp::isRunning();
}
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 64fae234b8..124e613b54 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -579,6 +579,8 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)
{
return;
}
+ FSTelemetry::RecordObjectTime T(avatarp, FSTelemetry::ObjStatType::RENDER_SHADOWS);
+
LLVOAvatar::AvatarOverallAppearance oa = avatarp->getOverallAppearance();
BOOL impostor = !LLPipeline::sImpostorRender && avatarp->isImpostor();
if (oa == LLVOAvatar::AOA_INVISIBLE ||
@@ -1494,6 +1496,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
{
return;
}
+ FSTelemetry::RecordObjectTime T(avatarp, FSTelemetry::ObjStatType::RENDER_GEOMETRY);
// Add avatar hitbox debug
static LLCachedControl render_hitbox(gSavedSettings, "DebugRenderHitboxes", false);
diff --git a/indra/newview/llfloaterautoreplacesettings.cpp b/indra/newview/llfloaterautoreplacesettings.cpp
index ec05ba924c..d455b685fd 100644
--- a/indra/newview/llfloaterautoreplacesettings.cpp
+++ b/indra/newview/llfloaterautoreplacesettings.cpp
@@ -64,6 +64,7 @@
#include "llnotificationhandler.h"
#include "llnotificationmanager.h"
#include "llnotificationsutil.h"
+#include "llviewercontrol.h"
LLFloaterAutoReplaceSettings::LLFloaterAutoReplaceSettings(const LLSD& key)
diff --git a/indra/newview/llfloaterperformance.cpp b/indra/newview/llfloaterperformance.cpp
index dd9f050826..be1adc1c31 100644
--- a/indra/newview/llfloaterperformance.cpp
+++ b/indra/newview/llfloaterperformance.cpp
@@ -333,19 +333,21 @@ void LLFloaterPerformance::populateNearbyList()
getNearbyAvatars(valid_nearby_avs);
std::vector::iterator char_iter = valid_nearby_avs.begin();
+ auto render_max = FSTelemetry::RecordObjectTime::getMax(FSTelemetry::ObjStatType::RENDER_COMBINED);
while (char_iter != valid_nearby_avs.end())
{
LLVOAvatar* avatar = dynamic_cast(*char_iter);
if (avatar && (LLVOAvatar::AOA_INVISIBLE != avatar->getOverallAppearance()))
{
- S32 complexity_short = llmax((S32)avatar->getVisualComplexity() / 1000, 1);;
+ S32 complexity_short = llmax((S32)avatar->getVisualComplexity() / 1000, 1);
+ auto render_av = FSTelemetry::RecordObjectTime::get(avatar,FSTelemetry::ObjStatType::RENDER_COMBINED);
LLSD item;
item["id"] = avatar->getID();
LLSD& row = item["columns"];
row[0]["column"] = "complex_visual";
row[0]["type"] = "bar";
LLSD& value = row[0]["value"];
- value["ratio"] = (F32)complexity_short / mNearbyMaxComplexity * 1000;
+ value["ratio"] = (double)render_av / render_max;
value["bottom"] = BAR_BOTTOM_PAD;
value["left_pad"] = BAR_LEFT_PAD;
value["right_pad"] = BAR_RIGHT_PAD;
@@ -502,24 +504,24 @@ void LLFloaterPerformance::onCustomAction(const LLSD& userdata, const LLUUID& av
{
const std::string command_name = userdata.asString();
- S32 new_setting = 0;
+ LLVOAvatar::VisualMuteSettings new_setting = LLVOAvatar::AV_RENDER_NORMALLY;
if ("default" == command_name)
{
- new_setting = S32(LLVOAvatar::AV_RENDER_NORMALLY);
+ new_setting = LLVOAvatar::AV_RENDER_NORMALLY;
}
else if ("never" == command_name)
{
- new_setting = S32(LLVOAvatar::AV_DO_NOT_RENDER);
+ new_setting = LLVOAvatar::AV_DO_NOT_RENDER;
}
else if ("always" == command_name)
{
- new_setting = S32(LLVOAvatar::AV_ALWAYS_RENDER);
+ new_setting = LLVOAvatar::AV_ALWAYS_RENDER;
}
LLVOAvatar *avatarp = find_avatar(av_id);
if (avatarp)
{
- avatarp->setVisualMuteSettings(LLVOAvatar::VisualMuteSettings(new_setting));
+ avatarp->setVisualMuteSettings(new_setting);
}
else
{
@@ -541,19 +543,19 @@ bool LLFloaterPerformance::isActionChecked(const LLSD& userdata, const LLUUID& a
//
if ("default" == command_name)
{
- return (visual_setting == S32(LLVOAvatar::AV_RENDER_NORMALLY));
+ return (visual_setting == LLVOAvatar::AV_RENDER_NORMALLY);
}
else if ("non_default" == command_name)
{
- return (visual_setting != S32(LLVOAvatar::AV_RENDER_NORMALLY));
+ return (visual_setting != LLVOAvatar::AV_RENDER_NORMALLY);
}
else if ("never" == command_name)
{
- return (visual_setting == S32(LLVOAvatar::AV_DO_NOT_RENDER));
+ return (visual_setting == LLVOAvatar::AV_DO_NOT_RENDER);
}
else if ("always" == command_name)
{
- return (visual_setting == S32(LLVOAvatar::AV_ALWAYS_RENDER));
+ return (visual_setting == LLVOAvatar::AV_ALWAYS_RENDER);
}
return false;
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 7faa89f484..bc70fadf89 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -167,7 +167,7 @@
// FIRE-19539 - Include the alert messages in Prefs>Notifications>Alerts in preference Search.
#include "llfiltereditor.h"
-
+#include "llviewershadermgr.h"
// FIRE-6340, FIRE-6567 - Setting Bandwidth issues
//const F32 BANDWIDTH_UPDATER_TIMEOUT = 0.5f;
char const* const VISIBILITY_DEFAULT = "default";
@@ -5330,6 +5330,25 @@ BOOL FSPanelPreferenceBackup::postBuild()
getChild("settings_backup_path")->setValue(dir_name);
//
+ //
+ #if !defined OPENSIM
+ // Note: Windlight setting restore is enabled in OPENSIM bulds irrespective of grid (or pre-login)
+ // windlights settings folders are not grid specific and thus neither is the restore.
+ // if windlight folders existsed they will be backed up on all builds but for SL only builds they will not be restored.
+
+ LLScrollListCtrl* globalFoldersScrollList = getChild("restore_global_folders_list");
+ std::vector globalFoldersList = globalFoldersScrollList->getAllData();
+ for (const auto item : globalFoldersList)
+ {
+ // if it is windlight related remove it.
+ if (item->getValue().asString().rfind("windlight",0) == 0)
+ {
+ LL_INFOS() << "removing windlight folder (no longer used in SL) : " << item->getValue().asString() << " index: " << globalFoldersScrollList->getItemIndex(item) << LL_ENDL;
+ globalFoldersScrollList->deleteSingleItem(globalFoldersScrollList->getItemIndex(item));
+ }
+ }
+ #endif
+ //
return LLPanelPreference::postBuild();
}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index e23d990184..0bb91556e8 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -1192,6 +1192,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
void render_hud_attachments()
{
+ FSTelemetry::RecordSceneTime T (FSTelemetry::SceneStatType::RENDER_HUDS);
gGL.matrixMode(LLRender::MM_PROJECTION);
gGL.pushMatrix();
gGL.matrixMode(LLRender::MM_MODELVIEW);
@@ -1399,6 +1400,7 @@ bool setup_hud_matrices(const LLRect& screen_region)
void render_ui(F32 zoom_factor, int subfield)
{
+ FSTelemetry::RecordSceneTime T (FSTelemetry::SceneStatType::RENDER_UI);
LL_RECORD_BLOCK_TIME(FTM_RENDER_UI);
LLGLState::checkStates();
@@ -1484,6 +1486,7 @@ static LLTrace::BlockTimerStatHandle FTM_SWAP("Swap");
void swap()
{
+ FSTelemetry::RecordSceneTime T (FSTelemetry::SceneStatType::RENDER_SWAP);
LL_RECORD_BLOCK_TIME(FTM_SWAP);
if (gDisplaySwapBuffers)
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 017d47444d..ad6ee18c65 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3870,6 +3870,7 @@ bool check_avatar_render_mode(U32 mode)
// return (avatar->getVisualMuteSettings() == LLVOAvatar::AV_ALWAYS_RENDER);
case 4:
return FSAvatarRenderPersistence::instance().getAvatarRenderSettings(avatar->getID()) != LLVOAvatar::AV_RENDER_NORMALLY;
+ // return FSAvatarRenderPersistence::instance().getAvatarRenderSettings(avatar->getID()) == LLVOAvatar::AV_RENDER_NORMALLY;
default:
return false;
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 10616f08cb..1cd4580298 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -11691,8 +11691,8 @@ void LLVOAvatar::accountRenderComplexityForObject(
{
temp_item_complexity.insert(std::make_pair(attached_object->getID(), (U32)attachment_total_cost));
}
- }
//
+ }
}
}
}
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index be66720237..c4439858d3 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -390,6 +390,8 @@ bool LLPipeline::sRenderTextures = true;
bool LLPipeline::sUseDepthTexture = false;
// [/RLVa:KB]
+static U32 sShowTrueARC; // True when we have the TrueArc overlay active.
+
// EventHost API LLPipeline listener.
static LLPipelineListener sPipelineListener;
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index d9c8aaef29..92135d2fae 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -621,6 +621,8 @@ public:
static bool sUseDepthTexture;
// [/RLVa:KB]
+ static U32 sShowTrueARC; // True when we have the TrueArc overlay active.
+
static LLTrace::EventStatHandle sStatBatchSize;
//screen texture
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
index 7bf0beb2c0..2193383d25 100644
--- a/indra/newview/skins/default/xui/en/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
@@ -198,7 +198,6 @@
function="Avatar.SetImpostorMode"
parameter="0" />
-
-
+
Windlight (Mandatory)
windlight
-
+
Windlight Day Cycles
windlight/days
-
+
Windlight Skies
windlight/skies
-
+
Windlight Waters
windlight/water
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index f55fb50753..04c157de7c 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2731,7 +2731,7 @@ Try enclosing path to the editor with double quotes.
Show nearby people (CTRL+SHIFT+M)
Moving your avatar
Friends, groups, and nearby people (CTRL+SHIFT+A)
- Improve graphics speed
+ Tune graphics settings
Places to show as favorites in your profile
Places you've saved (ALT+H)
Preferences (CTRL+P)