diff options
18 files changed, 1602 insertions, 14 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index fc8d8b805b..1ec1e2cc24 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -286,6 +286,7 @@ set(viewer_SOURCE_FILES      llfloaterpathfindinglinksets.cpp      llfloaterpathfindingobjects.cpp      llfloaterpay.cpp +    llfloaterperformance.cpp      llfloaterperms.cpp      llfloaterpostprocess.cpp      llfloaterpreference.cpp @@ -924,6 +925,7 @@ set(viewer_HEADER_FILES      llfloaterpathfindinglinksets.h      llfloaterpathfindingobjects.h      llfloaterpay.h +    llfloaterperformance.h      llfloaterperms.h      llfloaterpostprocess.h      llfloaterpreference.h diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp index 94584a623b..4fd57c7341 100644 --- a/indra/newview/llavatarrendernotifier.cpp +++ b/indra/newview/llavatarrendernotifier.cpp @@ -298,6 +298,8 @@ void LLHUDRenderNotifier::updateNotificationHUD(hud_complexity_list_t complexity          return;      } +    mHUDComplexityList = complexity; +      // TODO:      // Find a way to show message with list of issues, but without making it too large      // and intrusive. diff --git a/indra/newview/llavatarrendernotifier.h b/indra/newview/llavatarrendernotifier.h index ec17b3d9e6..3fd7a32d84 100644 --- a/indra/newview/llavatarrendernotifier.h +++ b/indra/newview/llavatarrendernotifier.h @@ -121,6 +121,8 @@ public:      void updateNotificationHUD(hud_complexity_list_t complexity);      bool isNotificationVisible(); +    hud_complexity_list_t getHUDComplexityList() { return mHUDComplexityList; } +  private:      enum EWarnLevel      { @@ -141,6 +143,7 @@ private:      EWarnLevel mReportedHUDWarning;      LLHUDComplexity mLatestHUDComplexity;      LLFrameTimer mHUDPopUpDelayTimer; +    hud_complexity_list_t mHUDComplexityList;  };  #endif /* ! defined(LL_llavatarrendernotifier_H) */ diff --git a/indra/newview/llfloaterperformance.cpp b/indra/newview/llfloaterperformance.cpp new file mode 100644 index 0000000000..8024d1539c --- /dev/null +++ b/indra/newview/llfloaterperformance.cpp @@ -0,0 +1,216 @@ +/**  + * @file llfloaterperformance.cpp + * + * $LicenseInfo:firstyear=2021&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2021, 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 "llviewerprecompiledheaders.h" +#include "llfloaterperformance.h" + +#include "llappearancemgr.h" +#include "llavatarrendernotifier.h" +#include "llfeaturemanager.h" +#include "llfloaterreg.h" +#include "llnamelistctrl.h" +#include "lltextbox.h" +#include "llvoavatar.h" + + +LLFloaterPerformance::LLFloaterPerformance(const LLSD& key) +    : LLFloater(key) +{ + +} + +LLFloaterPerformance::~LLFloaterPerformance() +{ +} + +BOOL LLFloaterPerformance::postBuild() +{ +    mMainPanel = getChild<LLPanel>("panel_performance_main"); +    mTroubleshootingPanel = getChild<LLPanel>("panel_performance_troubleshooting"); +    mNearbyPanel = getChild<LLPanel>("panel_performance_nearby"); +    mScriptsPanel = getChild<LLPanel>("panel_performance_scripts"); +    mPreferencesPanel = getChild<LLPanel>("panel_performance_preferences"); +    mHUDsPanel = getChild<LLPanel>("panel_performance_huds"); + +    getChild<LLPanel>("troubleshooting_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mTroubleshootingPanel)); +    getChild<LLPanel>("nearby_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mNearbyPanel)); +    getChild<LLPanel>("scripts_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mScriptsPanel)); +    getChild<LLPanel>("preferences_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mPreferencesPanel)); +    getChild<LLPanel>("huds_subpanel")->setMouseDownCallback(boost::bind(&LLFloaterPerformance::showSelectedPanel, this, mHUDsPanel)); + +    initBackBtn(mTroubleshootingPanel); +    initBackBtn(mNearbyPanel); +    initBackBtn(mScriptsPanel); +    initBackBtn(mPreferencesPanel); +    initBackBtn(mHUDsPanel); + + +    mHUDsPanel->getChild<LLButton>("refresh_list_btn")->setCommitCallback(boost::bind(&LLFloaterPerformance::populateHUDList, this)); +  +    mHUDList = mHUDsPanel->getChild<LLNameListCtrl>("hud_list"); +    mHUDList->setNameListType(LLNameListCtrl::SPECIAL); +    mHUDList->setHoverIconName("StopReload_Off"); +    mHUDList->setIconClickedCallback(boost::bind(&LLFloaterPerformance::detachItem, this, _1)); + +    mPreferencesPanel->getChild<LLButton>("advanced_btn")->setCommitCallback(boost::bind(&LLFloaterPerformance::onClickAdvanced, this)); +    mPreferencesPanel->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"); +  +    return TRUE; +} + +void LLFloaterPerformance::showSelectedPanel(LLPanel* selected_panel) +{ +    selected_panel->setVisible(TRUE); +    mMainPanel->setVisible(FALSE); + +    if (mHUDsPanel == selected_panel) +    { +        populateHUDList(); +    } +    else if (mNearbyPanel == selected_panel) +    { +        populateNearbyList(); +    } +} + +void LLFloaterPerformance::showMainPanel() +{ +    mTroubleshootingPanel->setVisible(FALSE); +    mNearbyPanel->setVisible(FALSE); +    mScriptsPanel->setVisible(FALSE); +    mHUDsPanel->setVisible(FALSE); +    mPreferencesPanel->setVisible(FALSE); +    mMainPanel->setVisible(TRUE); +} + +void LLFloaterPerformance::initBackBtn(LLPanel* panel) +{ +    panel->getChild<LLButton>("back_btn")->setCommitCallback(boost::bind(&LLFloaterPerformance::showMainPanel, this)); + +    panel->getChild<LLTextBox>("back_lbl")->setShowCursorHand(false); +    panel->getChild<LLTextBox>("back_lbl")->setSoundFlags(LLView::MOUSE_UP); +    panel->getChild<LLTextBox>("back_lbl")->setClickedCallback(boost::bind(&LLFloaterPerformance::showMainPanel, this)); +} + +void LLFloaterPerformance::populateHUDList() +{ +    mHUDList->clearRows(); +    mHUDList->updateColumns(true); + +    hud_complexity_list_t complexity_list = LLHUDRenderNotifier::getInstance()->getHUDComplexityList(); + +    hud_complexity_list_t::iterator iter = complexity_list.begin(); +    hud_complexity_list_t::iterator end = complexity_list.end(); +    +    for (; iter != end; ++iter) +    { +        LLHUDComplexity hud_object_complexity = *iter;         + +        LLSD item; +        item["special_id"] = hud_object_complexity.objectId; +        item["target"] = LLNameListCtrl::SPECIAL; +        LLSD& row = item["columns"]; +        row[0]["column"] = "complex_visual"; +        row[0]["type"] = "text"; +        row[0]["value"] = "*"; + +        row[1]["column"] = "complex_value"; +        row[1]["type"] = "text"; +        row[1]["value"] = std::to_string(hud_object_complexity.objectsCost); +        row[1]["font"]["name"] = "SANSSERIF"; +  +        row[2]["column"] = "name"; +        row[2]["type"] = "text"; +        row[2]["value"] = hud_object_complexity.objectName; +        row[2]["font"]["name"] = "SANSSERIF"; + +        mHUDList->addElement(item); +    } + +    mHUDsPanel->getChild<LLTextBox>("huds_value")->setValue(std::to_string(complexity_list.size())); +} + +void LLFloaterPerformance::populateNearbyList() +{ +    mNearbyList->clearRows(); +    mNearbyList->updateColumns(true); + +    std::vector<LLCharacter*>::iterator char_iter = LLCharacter::sInstances.begin(); +    while (char_iter != LLCharacter::sInstances.end()) +    { +        LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(*char_iter); +        if (avatar && !avatar->isDead() && !avatar->isControlAvatar()) +        { +            avatar->calculateUpdateRenderComplexity();  + +            LLSD item; +            item["id"] = avatar->getID(); +            LLSD& row = item["columns"]; +            row[0]["column"] = "complex_visual"; +            row[0]["type"] = "text"; +            row[0]["value"] = "*"; + +            row[1]["column"] = "complex_value"; +            row[1]["type"] = "text"; +            row[1]["value"] = std::to_string( avatar->getVisualComplexity()); +            row[1]["font"]["name"] = "SANSSERIF"; + +            row[2]["column"] = "name"; +            row[2]["type"] = "text"; +            row[2]["value"] = avatar->getFullname(); +            row[2]["font"]["name"] = "SANSSERIF"; + +            mNearbyList->addElement(item); +        } +        char_iter++; +    } + +} + +void LLFloaterPerformance::detachItem(const LLUUID& item_id) +{ +    LLAppearanceMgr::instance().removeItemFromAvatar(item_id); +    mHUDList->removeNameItem(item_id); +} + +void LLFloaterPerformance::onClickRecommended() +{ +    LLFeatureManager::getInstance()->applyRecommendedSettings(); +} + +void LLFloaterPerformance::onClickAdvanced() +{ +    LLFloaterReg::showInstance("prefs_graphics_advanced"); +} + +void LLFloaterPerformance::onClickExceptions() +{ +    LLFloaterReg::showInstance("avatar_render_settings"); +} + +// EOF diff --git a/indra/newview/llfloaterperformance.h b/indra/newview/llfloaterperformance.h new file mode 100644 index 0000000000..a70a328d3a --- /dev/null +++ b/indra/newview/llfloaterperformance.h @@ -0,0 +1,65 @@ +/**  + * @file llfloaterperformance.h + * + * $LicenseInfo:firstyear=2021&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2021, 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_LLFLOATERPERFORMANCE_H +#define LL_LLFLOATERPERFORMANCE_H + +#include "llfloater.h" + +class LLNameListCtrl; + +class LLFloaterPerformance : public LLFloater +{ +public: +    LLFloaterPerformance(const LLSD& key); +    virtual ~LLFloaterPerformance(); + +    /*virtual*/ BOOL postBuild(); + +    void showSelectedPanel(LLPanel* selected_panel); +    void showMainPanel(); + +    void detachItem(const LLUUID& item_id); + +private: +    void initBackBtn(LLPanel* panel); +    void populateHUDList(); +    void populateNearbyList(); + +    void onClickAdvanced(); +    void onClickRecommended(); +    void onClickExceptions(); + +    LLPanel* mMainPanel; +    LLPanel* mTroubleshootingPanel; +    LLPanel* mNearbyPanel; +    LLPanel* mScriptsPanel; +    LLPanel* mHUDsPanel; +    LLPanel* mPreferencesPanel; +    LLNameListCtrl* mHUDList; +    LLNameListCtrl* mNearbyList; +}; + +#endif // LL_LLFLOATERPERFORMANCE_H diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 3209d23e43..e1bf9b1a17 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -67,7 +67,9 @@ LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p)  	mNameColumn(p.name_column.column_name),  	mAllowCallingCardDrop(p.allow_calling_card_drop),  	mShortNames(p.short_names), -	mPendingLookupsRemaining(0) +	mPendingLookupsRemaining(0), +    mHoverIconName("Info_Small"), +    mNameListType(INDIVIDUAL)  {}  // public @@ -134,7 +136,12 @@ BOOL LLNameListCtrl::handleDragAndDrop(  void LLNameListCtrl::showInspector(const LLUUID& avatar_id, bool is_group, bool is_experience)  { -	if(is_experience) +    if (isSpecialType()) +    { +        mIconClickedSignal(avatar_id); +        return; +    } +    if(is_experience)  	{  		LLFloaterReg::showInstance("experience_profile", avatar_id, true);  		return; @@ -215,14 +222,16 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)  	S32 column_index = getColumnIndexFromOffset(x);  	LLNameListItem* hit_item = dynamic_cast<LLNameListItem*>(hitItem(x, y));  	LLFloater* floater = gFloaterView->getParentFloater(this); -	if (floater  + + +    if (floater   		&& floater->isFrontmost()  		&& hit_item -		&& column_index == mNameColumnIndex) +		&& ((column_index == mNameColumnIndex) || isSpecialType()))  	{ -		// ...this is the column with the avatar name -		LLUUID avatar_id = hit_item->getUUID(); -		if (avatar_id.notNull()) +        // ...this is the column with the avatar name +		LLUUID item_id = isSpecialType() ? hit_item->getSpecialID() : hit_item->getUUID(); +		if (item_id.notNull())  		{  			// ...valid avatar id @@ -230,13 +239,13 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)  			if (hit_cell)  			{  				S32 row_index = getItemIndex(hit_item); -				LLRect cell_rect = getCellRect(row_index, column_index); +				LLRect cell_rect = getCellRect(row_index, isSpecialType() ? getNumColumns() - 1 : column_index);  				// Convert rect local to screen coordinates  				LLRect sticky_rect;  				localRectToScreen(cell_rect, &sticky_rect);  				// Spawn at right side of cell -				LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small"); +				LLPointer<LLUIImage> icon = LLUI::getUIImage(mHoverIconName);  				S32 screenX = sticky_rect.mRight - info_icon_size;  				S32 screenY = sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight()) / 2;  				LLCoordGL pos(screenX, screenY); @@ -250,7 +259,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)  					LLToolTip::Params params;  					params.background_visible(false); -					params.click_callback(boost::bind(&LLNameListCtrl::showInspector, this, avatar_id, is_group, is_experience)); +					params.click_callback(boost::bind(&LLNameListCtrl::showInspector, this, item_id, is_group, is_experience));  					params.delay_time(0.0f);		// spawn instantly on hover  					params.image(icon);  					params.message(""); @@ -321,6 +330,7 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(  	// use supplied name by default  	std::string fullname = name_item.name; +  	switch(name_item.target)  	{  	case GROUP: @@ -339,8 +349,10 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(  		}  		break;  	case SPECIAL: -		// just use supplied name -		break; +        { +        item->setSpecialID(name_item.special_id()); +        return item; +        }  	case INDIVIDUAL:  		{  			LLAvatarName av_name; @@ -420,7 +432,8 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)  	for (item_list::iterator it = getItemList().begin(); it != getItemList().end(); it++)  	{  		LLScrollListItem* item = *it; -		if (item->getUUID() == agent_id) +        LLUUID cur_id = isSpecialType() ? dynamic_cast<LLNameListItem*>(item)->getSpecialID() : item->getUUID(); +        if (cur_id == agent_id)  		{  			idx = getItemIndex(item);  			break; diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index ef0be135e6..1a31b1cc10 100644 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -46,6 +46,8 @@ public:  	void setIsGroup(bool is_group) { mIsGroup = is_group; }  	bool isExperience() const { return mIsExperience; }  	void setIsExperience(bool is_experience) { mIsExperience = is_experience; } +    void setSpecialID(const LLUUID& special_id) { mSpecialID = special_id; } +    const LLUUID& getSpecialID() const { return mSpecialID; }  protected:  	friend class LLNameListCtrl; @@ -68,6 +70,8 @@ protected:  private:  	bool mIsGroup;  	bool mIsExperience; + +    LLUUID mSpecialID;  }; @@ -95,10 +99,12 @@ public:  	{  		Optional<std::string>				name;  		Optional<ENameType, NameTypeNames>	target; +        Optional<LLUUID>                    special_id;  		NameItem()  		:	name("name"), -			target("target", INDIVIDUAL) +			target("target", INDIVIDUAL), +            special_id("special_id", LLUUID())  		{}  	}; @@ -170,6 +176,12 @@ public:  	/*virtual*/ void updateColumns(bool force_update);  	/*virtual*/ void mouseOverHighlightNthItem( S32 index ); + +    bool isSpecialType() { return (mNameListType == SPECIAL); } + +    void setNameListType(e_name_type type) { mNameListType = type; } +    void setHoverIconName(std::string icon_name) { mHoverIconName = icon_name; } +  private:  	void showInspector(const LLUUID& avatar_id, bool is_group, bool is_experience = false);  	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, std::string suffix, std::string prefix, LLHandle<LLNameListItem> item); @@ -186,6 +198,11 @@ private:  	S32 mPendingLookupsRemaining;  	namelist_complete_signal_t mNameListCompleteSignal; + +    std::string     mHoverIconName; +    e_name_type     mNameListType; + +    boost::signals2::signal<void(const LLUUID &)> mIconClickedSignal;  public:  	boost::signals2::connection setOnNameListCompleteCallback(boost::function<void(bool)> onNameListCompleteCallback)  @@ -193,6 +210,10 @@ public:  		return mNameListCompleteSignal.connect(onNameListCompleteCallback);   	} +    boost::signals2::connection setIconClickedCallback(boost::function<void(const LLUUID &)> cb)  +    {  +        return mIconClickedSignal.connect(cb);  +    }  }; diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 414ae1fad6..eabdb67188 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -102,6 +102,7 @@  #include "llfloaterpathfindingconsole.h"  #include "llfloaterpathfindinglinksets.h"  #include "llfloaterpay.h" +#include "llfloaterperformance.h"  #include "llfloaterperms.h"  #include "llfloaterpostprocess.h"  #include "llfloaterpreference.h" @@ -299,6 +300,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("pathfinding_linksets", "floater_pathfinding_linksets.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPathfindingLinksets>);  	LLFloaterReg::add("pathfinding_console", "floater_pathfinding_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPathfindingConsole>);  	LLFloaterReg::add("people", "floater_people.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>); +	LLFloaterReg::add("performance", "floater_performance.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerformance>);  	LLFloaterReg::add("perms_default", "floater_perms_default.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPermsDefault>);  	LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);  	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index efe8102f83..3816bf7e9a 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -963,4 +963,10 @@    <color      name="OutfitGalleryItemUnselected"      value="0.4 0.4 0.4 1" /> +  <color +    name="PerformanceFloaterGray" +    value="0.27 0.27 0.27 1" /> +  <color +    name="PerformanceMid" +    value="1 0.8 0 1" />  </colors> diff --git a/indra/newview/skins/default/textures/icons/green_dot.png b/indra/newview/skins/default/textures/icons/green_dot.png Binary files differnew file mode 100644 index 0000000000..02c07810c2 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/green_dot.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index a875c4e848..51bb91cbf9 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -234,6 +234,8 @@ with the same filename but different name    <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />    <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" /> +  <texture name="Green_dot" file_name="icons/green_dot.png" preload="false" /> +    <texture name="Hand" file_name="icons/hand.png" preload="false" />    <texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_performance.xml b/indra/newview/skins/default/xui/en/floater_performance.xml new file mode 100644 index 0000000000..42269ba34a --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_performance.xml @@ -0,0 +1,447 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + height="550" + layout="topleft" + name="performance" + save_rect="true" + title="IMPROVE GRAPHICS SPEED" + width="580"> +  <panel +   bevel_style="none" +   follows="left|top" +   height="490" +   width="580" +   name="panel_performance_main" +   visible="true" +   layout="topleft" +   left="0"    +   top="0"> +    <text +     follows="left|top" +     font="SansSerifHuge" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="fps_lbl" +     top="17" +     width="130"> +        Current FPS +    </text> +    <text +     follows="left|top" +     font="SansSerifHugeBold" +     text_color="White" +     height="20" +     layout="topleft" +     left_pad="5" +     name="fps_value" +     width="100"> +        75.2 +    </text> +   +    <icon +     height="16" +     width="16" +     image_name="Green_dot" +     mouse_opaque="true" +     name="icon_arrow4" +     follows="right|top" +     top="16" +     right="-154"/> +    <icon +     height="16" +     width="16" +     image_name="Green_dot" +     mouse_opaque="true" +     name="icon_arrow4" +     follows="right|top" +     top_pad="9"/> +    <icon +     height="16" +     width="16" +     image_name="Green_dot" +     mouse_opaque="true" +     name="icon_arrow4" +     follows="right|top" +     top_pad="8"/> +  +    <text +     follows="right|top" +     font="SansSerif" +     height="20" +     layout="topleft" +     top="17" +     right="-90" +     name="client_lbl" +     width="60"> +        Client: +    </text> +    <text +     follows="right|top" +     font="SansSerif" +     height="20" +     layout="topleft" +     top_pad="5" +     name="client_lbl" +     width="60"> +        Network: +    </text> +    <text +     follows="right|top" +     font="SansSerif" +     height="20" +     layout="topleft" +     top_pad="5" +     name="client_lbl" +     width="60"> +        Server: +    </text> +    <text +     follows="right|top" +     font="SansSerif" +     height="20" +     layout="topleft" +     right="-15" +     name="client_value" +     top="17" +     width="45"> +        Normal +    </text> +    <text +     follows="right|top" +     font="SansSerif" +     height="20" +     layout="topleft" +     name="network_value" +     top_pad="5" +     width="45"> +        Normal +    </text> +    <text +     follows="right|top" +     font="SansSerif" +     height="20" +     layout="topleft" +     name="server_value" +     top_pad="5" +     width="45"> +        Normal +    </text>  +  <panel +   bg_alpha_color="PerformanceFloaterGray" +   background_visible="true" +   background_opaque="false" +   border="true" +   bevel_style="none" +   follows="left|top" +   height="60" +   width="560" +   name="troubleshooting_subpanel" +   layout="topleft" +   left="10" +   top="102"> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="troubleshooting_lbl" +     top="12" +     width="395"> +        General troubleshooting +    </text> +    <text +     follows="left|top" +     font="SansSerif" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="troubleshooting_info" +     top_pad="5" +     width="395"> +        Choose among common problems and see what you can do. +    </text> +    <icon +     height="16" +     width="16" +     image_name="Arrow_Right_Off" +     mouse_opaque="true" +     name="icon_arrow1" +     follows="right|top" +     top="24" +     right="-20"/> +  </panel> +  <panel +   bg_alpha_color="PerformanceFloaterGray" +   background_visible="true" +   background_opaque="false" +   border="true" +   bevel_style="none" +   follows="left|top" +   height="60" +   width="560" +   name="nearby_subpanel" +   layout="topleft" +   top_pad="20"> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="avatars_nearby_lbl" +     top="12" +     width="115"> +        Avatars nearby: +    </text> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="PerformanceMid" +     height="20" +     layout="topleft" +     left_pad="3" +     name="avatars_nearby_value" +     width="100"> +        42 (very high) +    </text> +    <text +     follows="left|top" +     font="SansSerif" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="avatars_nearby_info" +     top_pad="5" +     width="395"> +        Click to review avatars and choose a complexity limit. +    </text> +    <icon +     height="16" +     width="16" +     image_name="Arrow_Right_Off" +     mouse_opaque="true" +     name="icon_arrow2" +     follows="right|top" +     top="24" +     right="-20"/> +  </panel> +  <panel +   bg_alpha_color="PerformanceFloaterGray" +   background_visible="true" +   background_opaque="false" +   border="true" +   bevel_style="none" +   follows="left|top" +   height="60" +   width="560" +   name="preferences_subpanel" +   layout="topleft" +   top_pad="20"> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="complexity_lbl" +     top="12" +     width="110"> +        This location is +    </text> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="PerformanceMid" +     height="20" +     layout="topleft" +     left_pad="3" +     name="complexity_value" +     width="100"> +        very complex +    </text> +    <text +     follows="left|top" +     font="SansSerif" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="complexity_info" +     top_pad="5" +     width="395"> +        Try changing graphics quality or draw distance. +    </text> +    <icon +     height="16" +     width="16" +     image_name="Arrow_Right_Off" +     mouse_opaque="true" +     name="icon_arrow3" +     follows="right|top" +     top="24" +     right="-20"/> +  </panel> +  <panel +   bg_alpha_color="PerformanceFloaterGray" +   background_visible="true" +   background_opaque="false" +   border="true" +   bevel_style="none" +   follows="left|top" +   height="60" +   width="560" +   name="scripts_subpanel" +   layout="topleft" +   top_pad="20"> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="scripts_lbl" +     top="12" +     width="88"> +        Your avatar: +    </text> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="PerformanceMid" +     height="20" +     layout="topleft" +     left_pad="2" +     name="scripts_value" +     width="100"> +        12 scripts +    </text> +    <text +     follows="left|top" +     font="SansSerif" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="scripts_info" +     top_pad="5" +     width="395"> +        Removing high-impact attachments may improve graphics speed. +    </text> +    <icon +     height="16" +     width="16" +     image_name="Arrow_Right_Off" +     mouse_opaque="true" +     name="icon_arrow4" +     follows="right|top" +     top="24" +     right="-20"/> +  </panel> +  <panel +   bg_alpha_color="PerformanceFloaterGray" +   background_visible="true" +   background_opaque="false" +   border="true" +   bevel_style="none" +   follows="left|top" +   height="60" +   width="560" +   name="huds_subpanel" +   layout="topleft" +   top_pad="20"> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="huds_lbl" +     top="12" +     width="80"> +        Your HUDs: +    </text> +    <text +     follows="left|top" +     font="SansSerifLarge" +     text_color="PerformanceMid" +     height="20" +     layout="topleft" +     left_pad="3" +     name="huds_value" +     width="100"> +        7 +    </text> +    <text +     follows="left|top" +     font="SansSerif" +     text_color="White" +     height="20" +     layout="topleft" +     left="10" +     name="huds_info" +     top_pad="5" +     width="395"> +        Removing HUDs you are not using can improve graphics speed. +    </text> +    <icon +     height="16" +     width="16" +     image_name="Arrow_Right_Off" +     mouse_opaque="true" +     name="icon_arrow4" +     follows="right|top" +     top="24" +     right="-20"/> +  </panel> + </panel> +  <panel +    filename="panel_performance_troubleshooting.xml" +    follows="all" +    layout="topleft" +    left="0" +    name="panel_performance_troubleshooting" +    visible="false" +    top="0" /> +  <panel +    filename="panel_performance_nearby.xml" +    follows="all" +    layout="topleft" +    left="0" +    name="panel_performance_nearby" +    visible="false" +    top="0" /> +  <panel +    filename="panel_performance_scripts.xml" +    follows="all" +    layout="topleft" +    left="0" +    name="panel_performance_scripts" +    visible="false" +    top="0" /> +  <panel +    filename="panel_performance_preferences.xml" +    follows="all" +    layout="topleft" +    left="0" +    name="panel_performance_preferences" +    visible="false" +    top="0" /> +  <panel +    filename="panel_performance_huds.xml" +    follows="all" +    layout="topleft" +    left="0" +    name="panel_performance_huds" +    visible="false" +    top="0" /> +</floater> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 0a50ff089f..f275b309a1 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -239,6 +239,13 @@               function="Floater.Toggle"               parameter="preferences" />          </menu_item_call> +        <menu_item_call +          label="Performance..." +          name="Performance"> +          <menu_item_call.on_click +           function="Floater.Toggle" +           parameter="performance" /> +        </menu_item_call>           <menu_item_call           label="Toolbar buttons..."           name="Toolbars"> diff --git a/indra/newview/skins/default/xui/en/panel_performance_huds.xml b/indra/newview/skins/default/xui/en/panel_performance_huds.xml new file mode 100644 index 0000000000..c881fadbe8 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_performance_huds.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bevel_style="none" + follows="left|top" + height="490" + width="580" + name="panel_performance_huds" + layout="topleft" + left="0" + top="0"> +  <button +    height="16" +    width="16" +    layout="topleft" +    mouse_opaque="true" +    follows="left|top" +    name="back_btn" +    top="10" +    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="13" +   name="back_lbl" +   width="40"> +    Back +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left="20" +   top_pad="10" +   name="huds_title" +   width="120"> +    HUDs displayed:  +  </text> +  <text +   follows="left|top" +   font="SansSerifLargeBold" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left_pad="3" +   name="huds_value" +   width="70"> +    7 +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   left="20" +   name="huds_desc1" +   width="540"> +    If there are any you don't need, detaching them may improve graphics speed. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="3" +   left="20" +   name="huds_desc2" +   width="540"> +    Note: Using a HUD's minimize button does not save memory.  +  </text> +  <name_list +    column_padding="0" +    draw_stripes="true" +    height="220" +    follows="left|top" +    layout="topleft" +    name="hud_list" +    top_pad="10" +    width="540"> +        <name_list.columns +         label="" +         name="complex_visual" +         width="90" /> +        <name_list.columns +         label="" +         name="complex_value" +         width="40" /> +        <name_list.columns +         label="" +         name="name"/> +  </name_list> +  <button +   follows="left|top" +   height="19" +   label="Refresh List" +   layout="topleft" +   name="refresh_list_btn" +   top_pad="20" +   width="100" /> +</panel> + diff --git a/indra/newview/skins/default/xui/en/panel_performance_nearby.xml b/indra/newview/skins/default/xui/en/panel_performance_nearby.xml new file mode 100644 index 0000000000..ade5f99451 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_performance_nearby.xml @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bevel_style="none" + follows="left|top" + height="490" + width="580" + name="panel_performance_nearby" + layout="topleft" + left="0" + top="0"> +  <button +    height="16" +    width="16" +    layout="topleft" +    mouse_opaque="true" +    follows="left|top" +    name="back_btn" +    top="10" +    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="13" +   name="back_lbl" +   width="40"> +    Back +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left="20" +   top_pad="10" +   name="av_nearby_title" +   width="215"> +    Avatars within draw distance: +  </text> +  <text +   follows="left|top" +   font="SansSerifLargeBold" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left_pad="3" +   name="av_nearby_value" +   width="150"> +    42 (very high) +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   left="20" +   top_pad="5" +   name="av_nearby_desc" +   width="580"> +    Some avatars nearby are slow to display. Choosing complexity limit may help graphics speed. +  </text> +  <slider +    control_name="IndirectMaxComplexity" +    tool_tip="Controls at what point a visually complex avatar is drawn as a JellyDoll" +    follows="left|top" +    height="16" +    initial_value="101" +    increment="1" +    label="Avatar Maximum Complexity:" +    label_width="165" +    layout="topleft" +    min_val="1" +    max_val="101" +    name="IndirectMaxComplexity" +    show_text="false" +    top_pad="10" +    width="300"> +    <slider.commit_callback +      function="Pref.UpdateIndirectMaxComplexity" +      parameter="IndirectMaxComlexityText" /> +  </slider> +  <text +    type="string" +    length="1" +    follows="left|top" +    height="16" +    layout="topleft" +    top_delta="0" +    left_delta="304" +    text_readonly_color="LabelDisabledColor" +    name="IndirectMaxComplexityText" +    width="65"> +    0 +  </text> +  <name_list +    column_padding="0" +    draw_stripes="true" +    height="220" +    left="20" +    follows="left|top" +    layout="topleft" +    sort_column="complex_value" +    name="nearby_list" +    name_column="name" +    top_pad="10" +    width="540"> +        <name_list.columns +         label="" +         name="complex_visual" +         width="90" /> +        <name_list.columns +         label="" +         name="complex_value" +         width="40" /> +        <name_list.columns +         label="" +         name="name"/> +  </name_list> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   left="20" +   top_pad="10" +   name="av_nearby_desc2" +   width="580"> +     You can also right-click on an avatar to control display. +  </text> +  <button +    height="23" +    label="Exceptions..." +    layout="topleft" +    left="460" +    top_delta="2" +    name="exceptions_btn" +    width="100"> +  </button> +  <check_box +    control_name="AlwaysRenderFriends" +    height="16" +    initial_value="true" +    label="Always display friends" +    layout="topleft" +    name="display_friends" +    top_pad="3" +    left="18" +    width="256"> +  </check_box> + +  +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_performance_preferences.xml b/indra/newview/skins/default/xui/en/panel_performance_preferences.xml new file mode 100644 index 0000000000..81605b35a2 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_performance_preferences.xml @@ -0,0 +1,257 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bevel_style="none" + follows="left|top" + height="490" + width="580" + name="panel_performance_preferences" + layout="topleft" + left="0" + top="0"> +  <button +    height="16" +    width="16" +    layout="topleft" +    mouse_opaque="true" +    follows="left|top" +    name="back_btn" +    top="10" +    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="13" +   name="back_lbl" +   width="40"> +    Back +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left="20" +   top_pad="10" +   name="preferences_title" +   width="300"> +    This location is very complex +  </text> +  <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" +   name="quality_lbl" +   width="100"> +    Graphics quality +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   left_pad="40" +   name="fastest_lbl" +   width="40"> +    Fastest +  </text> +  <slider +    control_name="RenderQualityPerformance" +    decimal_digits="0" +    follows="left|top" +    height="16" +    increment="1" +    initial_value="0" +    layout="topleft" +    left_pad="5" +    max_val="6" +    name="graphics_quality" +    show_text="false" +    top_delta="-1" +    width="275"> +  </slider> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   left_pad="10" +   top_delta="1" +   name="quality_lbl" +   width="70"> +    Best quality +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="40" +   left="20" +   name="enhancements_lbl" +   width="100"> +    Enhancements +  </text> +  <check_box +    control_name="WindLightUseAtmosShaders" +    height="16" +    initial_value="true" +    label="Atmospheric shaders" +    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> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="40" +   left="20" +   name="distance_lbl" +   width="100"> +    Draw distance +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   left_pad="40" +   name="faster_lbl" +   width="40"> +    Faster +  </text> +  <slider +    control_name="RenderFarClip" +    decimal_digits="0" +    follows="left|top" +    top_delta="-1" +    height="16" +    increment="8" +    initial_value="160" +    label_width="90" +    layout="topleft" +    min_val="64" +    max_val="512" +    name="draw_distance" +    left_pad="5" +    width="250" /> +  <text +    type="string" +    length="1" +    follows="left|top" +    height="12" +    layout="topleft" +    left_pad="1" +    top_delta="0" +    name="draw_distance_m" +    width="20"> +    m +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   left_pad="10" +   top_delta="1" +   name="farther_lbl" +   width="40"> +    Farther +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="20" +   left="160" +   name="distance_desc1" +   width="100"> +    Regions are 256 m x 256 m. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   left="160" +   name="distance_desc2" +   width="400"> +    To zoom out and see long distances, increase the draw distance. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   left="160" +   name="distance_desc3" +   width="400"> +    If you are socializing in a small area, decrease the draw distance. +  </text> +  <button +    follows="top|left" +    height="23" +    label="Reset to recommended settings" +    layout="topleft" +    left="20" +    name="defaults_btn" +    top_delta="50" +    width="210"> +  </button> +  <button +    follows="top|left" +    height="23" +    label="Advanced Settings..." +    layout="topleft" +    left_pad="10" +    name="advanced_btn" +    top_delta="0" +    width="200"/> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_performance_scripts.xml b/indra/newview/skins/default/xui/en/panel_performance_scripts.xml new file mode 100644 index 0000000000..e6dc4a217d --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_performance_scripts.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bevel_style="none" + follows="left|top" + height="490" + width="580" + name="panel_performance_scripts" + layout="topleft" + left="0" + top="0"> +  <button +    height="16" +    width="16" +    layout="topleft" +    mouse_opaque="true" +    follows="left|top" +    name="back_btn" +    top="10" +    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="13" +   name="back_lbl" +   width="40"> +    Back +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left="20" +   top_pad="10" +   name="attachments_title" +   width="195"> +    Avatar attachment scripts:  +  </text> +  <text +   follows="left|top" +   font="SansSerifLargeBold" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left_pad="5" +   name="attachments_value" +   width="70"> +    12 +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   left="20" +   name="attachments_desc1" +   width="580"> +    These attachments contain scripts (embedded apps) that use memory. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="3" +   left="20" +   name="attachments_desc2" +   width="580"> +    If there are any you don't need, detaching them may improve graphics speed. +  </text> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_performance_troubleshooting.xml b/indra/newview/skins/default/xui/en/panel_performance_troubleshooting.xml new file mode 100644 index 0000000000..d942580880 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_performance_troubleshooting.xml @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bevel_style="none" + follows="left|top" + height="490" + width="580" + name="panel_performance_troubleshooting" + layout="topleft" + left="0" + top="0"> +  <button +    height="16" +    width="16" +    layout="topleft" +    mouse_opaque="true" +    follows="left|top" +    name="back_btn" +    top="10" +    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="13" +   name="back_lbl" +   width="40"> +    Back +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="PerformanceMid" +   height="20" +   layout="topleft" +   left="20" +   top_pad="10" +   name="troubleshooting_title" +   width="300"> +    Fixes for common problems +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   name="troubleshooting_desc" +   width="580"> +    Some problems result from the complexity of the location where you are. All you can do is leave. +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="White" +   height="20" +   layout="topleft" +   top_pad="30" +   name="rubberbanding_title" +   width="580"> +    Rubberbanding +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   name="rubberbanding_desc" +   width="580"> +    When you walk, your avatar may be pulled backward again and again. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="3" +   name="rubberbanding_fix" +   width="580"> +    Fix: XXXXXXX +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="White" +   height="20" +   layout="topleft" +   top_pad="25" +   name="tex_thrashing_title" +   width="580"> +    Texture thrashing +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   name="tex_thrashing_desc" +   width="580"> +    On objects near you, you may see their surfaces get blurry, then sharp, then blurry again. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="3" +   name="tex_thrashing_fix" +   width="580"> +    Fix: XXXXXXX +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="White" +   height="20" +   layout="topleft" +   top_pad="25" +   name="av_moving_title" +   width="580"> +    Avatars are not moving smoothly +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   name="av_moving_desc" +   width="580"> +    Lorem ipsum dolor sit amet. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="3" +   name="av_moving_fix" +   width="580"> +    Fix: XXXXXXX +  </text> +  <text +   follows="left|top" +   font="SansSerifLarge" +   text_color="White" +   height="20" +   layout="topleft" +   top_pad="25" +   name="av_moving_title" +   width="580"> +    Will a better graphics card or new computer help? +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="5" +   name="av_moving_desc" +   width="580"> +    Lorem ipsum dolor sit amet. +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   text_color="White" +   height="18" +   layout="topleft" +   top_pad="3" +   name="av_moving_fix" +   width="580"> +    Fix: XXXXXXX +  </text> +</panel>  | 
