diff options
| author | Mnikolenko Productengine <mnikolenko@productengine.com> | 2021-06-18 18:36:15 +0300 | 
|---|---|---|
| committer | Mnikolenko Productengine <mnikolenko@productengine.com> | 2021-06-18 18:36:15 +0300 | 
| commit | 3fe7715197c1e9a4ae781201df7a9ec24354f15e (patch) | |
| tree | 82782546951bd1365532b4dd171ef96be24d5123 | |
| parent | bc609f964b13141301aca9d29b9ceb5f9a541bf9 (diff) | |
SL-15297 WIP Implement performance floater - Quick and Individual settings panels
6 files changed, 461 insertions, 77 deletions
diff --git a/indra/newview/llfloaterperformance.cpp b/indra/newview/llfloaterperformance.cpp index c96d3dac5e..424ca04b1f 100644 --- a/indra/newview/llfloaterperformance.cpp +++ b/indra/newview/llfloaterperformance.cpp @@ -63,18 +63,21 @@ BOOL LLFloaterPerformance::postBuild()      mComplexityPanel = getChild<LLPanel>("panel_performance_complexity");      mSettingsPanel = getChild<LLPanel>("panel_performance_preferences");      mHUDsPanel = getChild<LLPanel>("panel_performance_huds"); +    mPresetsPanel = getChild<LLPanel>("panel_performance_presets");      getChild<LLPanel>("troubleshooting_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mTroubleshootingPanel));      getChild<LLPanel>("nearby_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mNearbyPanel));      getChild<LLPanel>("complexity_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mComplexityPanel));      getChild<LLPanel>("settings_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mSettingsPanel));      getChild<LLPanel>("huds_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mHUDsPanel)); +    getChild<LLPanel>("presets_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mPresetsPanel));      initBackBtn(mTroubleshootingPanel);      initBackBtn(mNearbyPanel);      initBackBtn(mComplexityPanel);      initBackBtn(mSettingsPanel);      initBackBtn(mHUDsPanel); +    initBackBtn(mPresetsPanel);      mHUDList = mHUDsPanel->getChild<LLNameListCtrl>("hud_list");      mHUDList->setNameListType(LLNameListCtrl::SPECIAL); @@ -87,11 +90,13 @@ BOOL LLFloaterPerformance::postBuild()      mObjectList->setIconClickedCallback(boost::bind(&LLFloaterPerformance::detachItem, this, _1));      mSettingsPanel->getChild<LLButton>("advanced_btn")->setCommitCallback(boost::bind(&LLFloaterPerformance::onClickAdvanced, this)); -    mSettingsPanel->getChild<LLButton>("defaults_btn")->setCommitCallback(boost::bind(&LLFloaterPerformance::onClickRecommended, this));      mNearbyPanel->getChild<LLButton>("exceptions_btn")->setCommitCallback(boost::bind(&LLFloaterPerformance::onClickExceptions, this));      mNearbyList = mNearbyPanel->getChild<LLNameListCtrl>("nearby_list"); +    mPresetsPanel->getChild<LLTextBox>("avatars_nearby_link")->setURLClickedCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mNearbyPanel)); +    mPresetsPanel->getChild<LLTextBox>("settings_link")->setURLClickedCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mSettingsPanel)); +      updateComplexityText();      mComplexityChangedSignal = gSavedSettings.getControl("IndirectMaxComplexity")->getCommitSignal()->connect(boost::bind(&LLFloaterPerformance::updateComplexityText, this));      mNearbyPanel->getChild<LLSliderCtrl>("IndirectMaxComplexity")->setCommitCallback(boost::bind(&LLFloaterPerformance::updateMaxComplexity, this)); @@ -103,8 +108,9 @@ BOOL LLFloaterPerformance::postBuild()  void LLFloaterPerformance::showSelectedPanel(LLPanel* selected_panel)  { -    selected_panel->setVisible(TRUE); +    hidePanels();      mMainPanel->setVisible(FALSE); +    selected_panel->setVisible(TRUE);      if (mHUDsPanel == selected_panel)      { @@ -148,12 +154,18 @@ void LLFloaterPerformance::draw()  void LLFloaterPerformance::showMainPanel()  { +    hidePanels(); +    mMainPanel->setVisible(TRUE); +} + +void LLFloaterPerformance::hidePanels() +{      mTroubleshootingPanel->setVisible(FALSE);      mNearbyPanel->setVisible(FALSE);      mComplexityPanel->setVisible(FALSE);      mHUDsPanel->setVisible(FALSE);      mSettingsPanel->setVisible(FALSE); -    mMainPanel->setVisible(TRUE); +    mPresetsPanel->setVisible(FALSE);  }  void LLFloaterPerformance::initBackBtn(LLPanel* panel) @@ -247,6 +259,7 @@ void LLFloaterPerformance::populateNearbyList()      mNearbyList->updateColumns(true);      S32 avatars = 0; +    static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);      std::vector<LLCharacter*>::iterator char_iter = LLCharacter::sInstances.begin();      while (char_iter != LLCharacter::sInstances.end()) @@ -274,12 +287,21 @@ void LLFloaterPerformance::populateNearbyList()              row[2]["font"]["name"] = "SANSSERIF";              LLScrollListItem* av_item = mNearbyList->addElement(item); -            if(av_item && LLAvatarActions::isFriend(avatar->getID())) +            if(av_item)              {                  LLScrollListText* name_text = dynamic_cast<LLScrollListText*>(av_item->getColumn(2));                  if (name_text)                  { -                    name_text->setColor(LLUIColorTable::instance().getColor("ConversationFriendColor")); +                    std::string color = "white"; +                    if (avatar->getVisualComplexity() > max_render_cost) +                    { +                        color = "LabelDisabledColor"; +                    } +                    else if (LLAvatarActions::isFriend(avatar->getID())) +                    { +                        color = "ConversationFriendColor"; +                    } +                    name_text->setColor(LLUIColorTable::instance().getColor(color));                  }              }              avatars++; @@ -291,6 +313,7 @@ void LLFloaterPerformance::populateNearbyList()  void LLFloaterPerformance::updateNearbyComplexityDesc()  { +    static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);       S32 max_complexity = 0;      std::vector<LLCharacter*>::iterator char_iter = LLCharacter::sInstances.begin();      while (char_iter != LLCharacter::sInstances.end()) @@ -302,7 +325,7 @@ void LLFloaterPerformance::updateNearbyComplexityDesc()          }          char_iter++;      } -    std::string desc = getString(max_complexity > COMPLEXITY_THRESHOLD_1 ? "very_high" : "medium"); +    std::string desc = getString(max_complexity > llmin((S32)max_render_cost, COMPLEXITY_THRESHOLD_1) ? "very_high" : "medium");      if (mMainPanel->getVisible())      { @@ -316,13 +339,13 @@ void LLFloaterPerformance::detachItem(const LLUUID& item_id)      LLAppearanceMgr::instance().removeItemFromAvatar(item_id);  } -void LLFloaterPerformance::onClickRecommended() -{ -    LLFeatureManager::getInstance()->applyRecommendedSettings(); -} -  void LLFloaterPerformance::onClickAdvanced()  { +    LLFloaterPreference* instance = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences"); +    if (instance) +    { +        instance->saveSettings(); +    }      LLFloaterReg::showInstance("prefs_graphics_advanced");  } diff --git a/indra/newview/llfloaterperformance.h b/indra/newview/llfloaterperformance.h index 1facfe9225..7aec7c3f6c 100644 --- a/indra/newview/llfloaterperformance.h +++ b/indra/newview/llfloaterperformance.h @@ -41,6 +41,7 @@ public:      void showSelectedPanel(LLPanel* selected_panel);      void showMainPanel(); +    void hidePanels();      void detachItem(const LLUUID& item_id); @@ -51,7 +52,6 @@ private:      void populateNearbyList();      void onClickAdvanced(); -    void onClickRecommended();      void onClickExceptions();      void updateMaxComplexity(); @@ -65,6 +65,7 @@ private:      LLPanel* mComplexityPanel;      LLPanel* mHUDsPanel;      LLPanel* mSettingsPanel; +    LLPanel* mPresetsPanel;      LLNameListCtrl* mHUDList;      LLNameListCtrl* mObjectList;      LLNameListCtrl* mNearbyList; diff --git a/indra/newview/skins/default/xui/en/floater_performance.xml b/indra/newview/skins/default/xui/en/floater_performance.xml index 09af364266..e415ac5be0 100644 --- a/indra/newview/skins/default/xui/en/floater_performance.xml +++ b/indra/newview/skins/default/xui/en/floater_performance.xml @@ -194,7 +194,7 @@         text_color="PerformanceMid"         height="20"         layout="topleft" -       left_pad="5" +       left_pad="2"         name="avatars_nearby_value"         width="100">            very high @@ -383,6 +383,14 @@      </panel>    </panel>    <panel +    filename="panel_performance_presets.xml" +    follows="all" +    layout="topleft" +    left="0" +    name="panel_performance_presets" +    visible="false" +    top="55" /> +  <panel      filename="panel_performance_troubleshooting.xml"      follows="all"      layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_performance_nearby.xml b/indra/newview/skins/default/xui/en/panel_performance_nearby.xml index 28ffbd5c2e..9d91e86b7a 100644 --- a/indra/newview/skins/default/xui/en/panel_performance_nearby.xml +++ b/indra/newview/skins/default/xui/en/panel_performance_nearby.xml @@ -46,7 +46,7 @@    </text>    <text     follows="left|top" -   font="SansSerifLargeBold" +   font="SansSerifLarge"     text_color="PerformanceMid"     height="20"     layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_performance_preferences.xml b/indra/newview/skins/default/xui/en/panel_performance_preferences.xml index aaa27061e3..ec1b624f13 100644 --- a/indra/newview/skins/default/xui/en/panel_performance_preferences.xml +++ b/indra/newview/skins/default/xui/en/panel_performance_preferences.xml @@ -2,7 +2,7 @@  <panel   bevel_style="none"   follows="left|top" - height="490" + height="510"   width="580"   name="panel_performance_preferences"   layout="topleft" @@ -35,37 +35,33 @@    <text     follows="left|top"     font="SansSerifLarge" -   text_color="PerformanceMid" +   text_color="white"     height="20"     layout="topleft"     left="20"     top_pad="10" -   name="preferences_title" +   name="settings_title"     width="300"> -    This location is very complex +    Individual settings    </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="border1" +    top_pad="8" +    width="540"/>    <text     follows="left|top"     font="SansSerifSmall"     text_color="White"     height="18"     layout="topleft" -   top_pad="5" -   name="preferences_desc" -   width="580"> -    While you are here, you may want to reduce graphics quality or draw distance. -  </text> - -  <text -   follows="left|top" -   font="SansSerifSmall" -   text_color="White" -   height="18" -   layout="topleft" -   top_pad="35" +   top_pad="20"     name="quality_lbl"     width="100">      Graphics quality +shortcuts    </text>    <text     follows="left|top" @@ -111,43 +107,31 @@     text_color="White"     height="18"     layout="topleft" -   top_pad="40" -   left="20" -   name="enhancements_lbl" -   width="100"> -    Enhancements +   top_pad="15" +   left="160" +   name="quality_desc" +   width="380"> +    Choosing a shortcut will reset all manual changes you have made.    </text> -  <check_box -    control_name="WindLightUseAtmosShaders" -    height="16" -    initial_value="true" -    label="Atmospheric shaders" +  <view_border +    bevel_style="in" +    height="0"      layout="topleft" -    name="atmospheric_shaders" -    left_pad="37" -    width="280"> -  </check_box> -  <check_box -    control_name="RenderDeferred" -    height="16" -    initial_value="true" -    label="Advanced Lighting Model" -    layout="topleft" -    name="advanced_lighting_model" -    top_delta="24" -    width="256"> -  </check_box> +    name="border2" +    top_pad="15" +    left="20" +    width="540"/>    <text     follows="left|top"     font="SansSerifSmall"     text_color="White"     height="18"     layout="topleft" -   top_pad="40" +   top_pad="20"     left="20"     name="distance_lbl"     width="100"> -    Draw distance +    Visibility distance    </text>    <text     follows="left|top" @@ -205,11 +189,11 @@     text_color="White"     height="18"     layout="topleft" -   top_pad="20" +   top_pad="15"     left="160"     name="distance_desc1" -   width="100"> -    Regions are 256 m x 256 m. +   width="350"> +    To zoom out and see long distances, increase the distance.    </text>    <text     follows="left|top" @@ -220,38 +204,183 @@     top_pad="5"     left="160"     name="distance_desc2" -   width="400"> -    To zoom out and see long distances, increase the draw distance. +   width="350"> +    If you are indoors, decrease the distance to improve speed.    </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="border3" +    top_pad="15" +    left="20" +    width="540"/>    <text     follows="left|top"     font="SansSerifSmall"     text_color="White"     height="18"     layout="topleft" -   top_pad="5" +   top_pad="20" +   left="20" +   name="enhancements_lbl" +   width="100"> +    Enhancements +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_delta="0"     left="160" -   name="distance_desc3" -   width="400"> -    If you are socializing in a small area, decrease the draw distance. +   name="enhancements_desc" +   width="350"> +    Each enhancement improves realism but can reduce speed.    </text> -  <button -    follows="top|left" -    height="23" -    label="Reset to recommended settings" +  <check_box +    control_name="WindLightUseAtmosShaders" +    height="16" +    initial_value="true" +    label="Atmospheric shaders" +    layout="topleft" +    name="atmospheric_shaders" +    top_pad="5" +    left="157" +    width="280"> +  </check_box> +  <check_box +    control_name="RenderDeferred" +    height="16" +    initial_value="true" +    label="Advanced Lighting" +    layout="topleft" +    name="advanced_lighting_model" +    top_delta="24" +    width="280"> +  </check_box> +  <check_box +    control_name="RenderTransparentWater" +    height="16" +    initial_value="true" +    label="Transparent Water" +    layout="topleft" +    name="TransparentWater" +    top_delta="24" +    width="280"> +  </check_box> +  <text +    type="string" +    length="1" +    follows="left|top" +    height="16" +    layout="topleft" +    name="ReflectionsText" +    text_readonly_color="LabelDisabledColor" +    top_pad="16" +    left="160" +    width="128"> +    Water Reflections: +  </text> +  <combo_box +    control_name="RenderReflectionDetail" +    height="18" +    layout="topleft" +    left_delta="150" +    top_delta="0" +    name="Reflections" +    width="150"> +    <combo_box.item +      label="None; opaque" +      name="0" +      value="-2"/> +    <combo_box.item +      label="None; transparent" +      name="0" +      value="-1"/> +    <combo_box.item +      label="Minimal" +      name="0" +      value="0"/> +    <combo_box.item +      label="Terrain and trees" +      name="1" +      value="1"/> +    <combo_box.item +      label="All static objects" +      name="2" +      value="2"/> +    <combo_box.item +      label="All avatars and objects" +      name="3" +      value="3"/> +    <combo_box.item +      label="Everything" +      name="4" +      value="4"/> +  </combo_box> +  <text +    type="string" +    length="1" +    follows="left|top" +    height="16"      layout="topleft" +    left="160" +    name="RenderShadowDetailText" +    text_readonly_color="LabelDisabledColor" +    top_pad="10" +    width="128"> +    Shadows: +  </text> +  <combo_box +   control_name="RenderShadowDetail" +   height="18" +   layout="topleft" +   left_delta="150" +   top_delta="0" +   name="ShadowDetail" +   width="150"> +    <combo_box.item +      label="None" +      name="0" +      value="0"/> +    <combo_box.item +      label="Sun/Moon" +      name="1" +      value="1"/> +    <combo_box.item +      label="Sun/Moon + Projectors" +      name="2" +      value="2"/> +  </combo_box> +  <text +   follows="left|top" +   font="SansSerifSmall" +   height="18" +   layout="topleft" +   top_pad="8" +   left="160" +   skip_link_underline="true" +   name="settings_help" +   width="350"> +    [secondlife:/// What do these settings mean?] +  </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="border3" +    top_pad="10"      left="20" -    name="defaults_btn" -    top_delta="50" -    width="210"> -  </button> +    width="540"/>    <button      follows="top|left"      height="23" -    label="Advanced Settings..." +    label="Open Advanced Settings"      layout="topleft" -    left_pad="10" +    left="160"      name="advanced_btn" -    top_delta="0" +    top_pad="12"      width="200"/>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_performance_presets.xml b/indra/newview/skins/default/xui/en/panel_performance_presets.xml new file mode 100644 index 0000000000..51516020a2 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_performance_presets.xml @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bevel_style="none" + follows="left|top" + height="490" + width="580" + name="panel_performance_presets" + layout="topleft" + left="0" + top="0"> +  <button +    height="16" +    width="16" +    layout="topleft" +    mouse_opaque="true" +    follows="left|top" +    name="back_btn" +    top="7" +    image_selected="Arrow_Left_Off" +    image_pressed="Arrow_Left_Off" +    image_unselected="Arrow_Left_Off" +    left="15" +    is_toggle="true"> +  </button> +  <text +   follows="left|top" +   height="20" +   layout="topleft" +   left_pad="3" +   top="10" +   name="back_lbl" +   width="40"> +    Back +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="White" +   height="20" +   layout="topleft" +   left="20" +   top_pad="10" +   name="presets_title" +   width="300"> +    Quick settings +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   name="presets_desc" +   width="580"> +    Note: Quick settings will reset all manual changes you have made. +  </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="top_border" +    top_pad="12" +    width="540"/> +  <button +    follows="top|left" +    height="23" +    label="Social" +    label_color="White" +    layout="topleft" +    name="social" +    top_pad="14" +    width="130"> +  </button> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="14" +   name="social_desc1" +   width="580"> +    Tuned for many avatars in a room. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   name="social_desc2" +   width="180"> +    Nearby avatar complexity is high. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   height="18" +   layout="topleft" +   left_pad="5" +   name="avatars_nearby_link" +   skip_link_underline="true" +   width="200"> +    [secondlife:/// Choose avatars to show and hide] +  </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="social_border" +    left="20" +    top_pad="12" +    width="540"/> +  <button +    follows="top|left" +    height="23" +    label="Outdoors" +    label_color="White" +    layout="topleft" +    name="outdoors" +    top_pad="14" +    width="130"> +  </button> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="14" +   name="outdoors_desc" +   width="580"> +    Fewer avatars, higher visibility distance. +  </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="outdoors_border" +    top_pad="12" +    width="540"/> +  <button +    follows="top|left" +    height="23" +    label="Maximum distance" +    label_color="White" +    layout="topleft" +    name="max_distance" +    top_pad="14" +    width="130"> +  </button> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="14" +   name="max_distance_desc" +   width="580"> +    Good for zooming your camera far out and viewing large land areas. +  </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="max_distance_border" +    top_pad="12" +    width="540"/> +  <button +    follows="top|left" +    height="23" +    label="Photography" +    label_color="White" +    layout="topleft" +    name="photography" +    top_pad="14" +    width="130"> +  </button> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="14" +   name="photography_desc" +   width="580"> +    Maximum quality, minimum visibility distance. +  </text> +  <view_border +    bevel_style="in" +    height="0" +    layout="topleft" +    name="photography_border" +    top_pad="12" +    width="540"/> +    <text +     follows="left|top" +     font="SansSerifSmall" +     text_color="White" +     height="18" +     layout="topleft" +     top_pad="14" +     name="settings_desc" +     width="110"> +    For more control, try +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   height="18" +   layout="topleft" +   left_pad="3" +   name="settings_link" +   skip_link_underline="true" +   width="200"> +    [secondlife:/// Idividual Settings] +  </text> + +</panel>  | 
