diff options
| author | Mnikolenko Productengine <mnikolenko@productengine.com> | 2021-06-15 19:25:08 +0300 | 
|---|---|---|
| committer | Mnikolenko Productengine <mnikolenko@productengine.com> | 2021-06-15 19:25:08 +0300 | 
| commit | 0914f5c48f777705bdc57188e7372707f7977e5a (patch) | |
| tree | ff08b44fc13fd666ea06955fcbe8bdeee81db3b6 | |
| parent | 10a770047d90045e882a65e5347da3530b189c42 (diff) | |
SL-15297 WIP Implement performance floater #2
| -rw-r--r-- | indra/newview/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterperformance.cpp | 36 | ||||
| -rw-r--r-- | indra/newview/llfloaterperformance.h | 5 | ||||
| -rw-r--r-- | indra/newview/llfloaterpreference.cpp | 409 | ||||
| -rw-r--r-- | indra/newview/llfloaterpreference.h | 31 | ||||
| -rw-r--r-- | indra/newview/llfloaterpreferencesgraphicsadvanced.cpp | 466 | ||||
| -rw-r--r-- | indra/newview/llfloaterpreferencesgraphicsadvanced.h | 63 | ||||
| -rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_performance_nearby.xml | 3 | 
9 files changed, 575 insertions, 441 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 1ec1e2cc24..888796015b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -290,6 +290,7 @@ set(viewer_SOURCE_FILES      llfloaterperms.cpp      llfloaterpostprocess.cpp      llfloaterpreference.cpp +    llfloaterpreferencesgraphicsadvanced.cpp      llfloaterpreferenceviewadvanced.cpp      llfloaterpreviewtrash.cpp      llfloaterproperties.cpp @@ -929,6 +930,7 @@ set(viewer_HEADER_FILES      llfloaterperms.h      llfloaterpostprocess.h      llfloaterpreference.h +    llfloaterpreferencesgraphicsadvanced.h      llfloaterpreferenceviewadvanced.h      llfloaterpreviewtrash.h      llfloaterproperties.h diff --git a/indra/newview/llfloaterperformance.cpp b/indra/newview/llfloaterperformance.cpp index 8024d1539c..a44c3a262d 100644 --- a/indra/newview/llfloaterperformance.cpp +++ b/indra/newview/llfloaterperformance.cpp @@ -27,11 +27,15 @@  #include "llfloaterperformance.h"  #include "llappearancemgr.h" +#include "llavataractions.h"  #include "llavatarrendernotifier.h"  #include "llfeaturemanager.h"  #include "llfloaterreg.h"  #include "llnamelistctrl.h" +#include "llfloaterpreference.h" // LLAvatarComplexityControls +#include "llsliderctrl.h"  #include "lltextbox.h" +#include "lltrans.h"  #include "llvoavatar.h" @@ -43,6 +47,7 @@ LLFloaterPerformance::LLFloaterPerformance(const LLSD& key)  LLFloaterPerformance::~LLFloaterPerformance()  { +    mComplexityChangedSignal.disconnect();  }  BOOL LLFloaterPerformance::postBuild() @@ -79,7 +84,11 @@ BOOL LLFloaterPerformance::postBuild()      mNearbyPanel->getChild<LLButton>("exceptions_btn")->setCommitCallback(boost::bind(&LLFloaterPerformance::onClickExceptions, this));      mNearbyList = mNearbyPanel->getChild<LLNameListCtrl>("nearby_list"); -  + +    updateComplexityText(); +    mComplexityChangedSignal = gSavedSettings.getControl("IndirectMaxComplexity")->getCommitSignal()->connect(boost::bind(&LLFloaterPerformance::updateComplexityText, this)); +    mNearbyPanel->getChild<LLSliderCtrl>("IndirectMaxComplexity")->setCommitCallback(boost::bind(&LLFloaterPerformance::updateMaxComplexity, this)); +      return TRUE;  } @@ -151,6 +160,7 @@ void LLFloaterPerformance::populateHUDList()          mHUDList->addElement(item);      } +    mHUDList->sortByColumnIndex(1, FALSE);      mHUDsPanel->getChild<LLTextBox>("huds_value")->setValue(std::to_string(complexity_list.size()));  } @@ -185,10 +195,19 @@ void LLFloaterPerformance::populateNearbyList()              row[2]["value"] = avatar->getFullname();              row[2]["font"]["name"] = "SANSSERIF"; -            mNearbyList->addElement(item); +            LLScrollListItem* av_item = mNearbyList->addElement(item); +            if(av_item && LLAvatarActions::isFriend(avatar->getID())) +            { +                LLScrollListText* name_text = dynamic_cast<LLScrollListText*>(av_item->getColumn(2)); +                if (name_text) +                { +                    name_text->setColor(LLUIColorTable::instance().getColor("ConversationFriendColor")); +                } +            }          }          char_iter++;      } +    mNearbyList->sortByColumnIndex(1, FALSE);  } @@ -213,4 +232,17 @@ void LLFloaterPerformance::onClickExceptions()      LLFloaterReg::showInstance("avatar_render_settings");  } +void LLFloaterPerformance::updateMaxComplexity() +{ +    LLAvatarComplexityControls::updateMax( +        mNearbyPanel->getChild<LLSliderCtrl>("IndirectMaxComplexity"), +        mNearbyPanel->getChild<LLTextBox>("IndirectMaxComplexityText")); +} + +void LLFloaterPerformance::updateComplexityText() +{ +    LLAvatarComplexityControls::setText(gSavedSettings.getU32("RenderAvatarMaxComplexity"), +        mNearbyPanel->getChild<LLTextBox>("IndirectMaxComplexityText", true)); +} +  // EOF diff --git a/indra/newview/llfloaterperformance.h b/indra/newview/llfloaterperformance.h index a70a328d3a..0cba07f21e 100644 --- a/indra/newview/llfloaterperformance.h +++ b/indra/newview/llfloaterperformance.h @@ -52,6 +52,9 @@ private:      void onClickRecommended();      void onClickExceptions(); +    void updateMaxComplexity(); +    void updateComplexityText(); +      LLPanel* mMainPanel;      LLPanel* mTroubleshootingPanel;      LLPanel* mNearbyPanel; @@ -60,6 +63,8 @@ private:      LLPanel* mPreferencesPanel;      LLNameListCtrl* mHUDList;      LLNameListCtrl* mNearbyList; + +    boost::signals2::connection	mComplexityChangedSignal;  };  #endif // LL_LLFLOATERPERFORMANCE_H diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 6bf2136f60..1ab6621c4c 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -50,6 +50,7 @@  #include "llfloaterreg.h"  #include "llfloaterabout.h"  #include "llfavoritesbar.h" +#include "llfloaterpreferencesgraphicsadvanced.h"  #include "llfloatersidepanelcontainer.h"  #include "llfloaterimsession.h"  #include "llkeyboard.h" @@ -74,7 +75,6 @@  #include "llviewereventrecorder.h"  #include "llviewermessage.h"  #include "llviewerwindow.h" -#include "llviewershadermgr.h"  #include "llviewerthrottle.h"  #include "llvoavatarself.h"  #include "llvotree.h" @@ -98,11 +98,9 @@  #include "lltextbox.h"  #include "llui.h"  #include "llviewerobjectlist.h" -#include "llvoavatar.h"  #include "llvovolume.h"  #include "llwindow.h"  #include "llworld.h" -#include "pipeline.h"  #include "lluictrlfactory.h"  #include "llviewermedia.h"  #include "llpluginclassmedia.h" @@ -115,8 +113,6 @@  #include "llpresetsmanager.h"  #include "llviewercontrol.h"  #include "llpresetsmanager.h" -#include "llfeaturemanager.h" -#include "llviewertexturelist.h"  #include "llsearchableui.h" @@ -751,33 +747,6 @@ void LLFloaterPreference::onRenderOptionEnable()  	refreshEnabledGraphics();  } -void LLFloaterPreferenceGraphicsAdvanced::onRenderOptionEnable() -{ -	LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); -	if (instance) -	{ -		instance->refresh(); -	} - -	refreshEnabledGraphics(); -} - -void LLFloaterPreferenceGraphicsAdvanced::onAdvancedAtmosphericsEnable() -{ -	LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); -	if (instance) -	{ -		instance->refresh(); -	} - -	refreshEnabledGraphics(); -} - -void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledGraphics() -{ -	refreshEnabledState(); -} -  void LLFloaterPreference::onAvatarImpostorsEnable()  {  	refreshEnabledGraphics(); @@ -1216,124 +1185,6 @@ void LLFloaterPreference::refreshEnabledState()  	getChildView("block_list")->setEnabled(LLLoginInstance::getInstance()->authSuccess());  } -void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState() -{ -	LLComboBox* ctrl_reflections = getChild<LLComboBox>("Reflections"); -	LLTextBox* reflections_text = getChild<LLTextBox>("ReflectionsText"); - -	// Reflections -    BOOL reflections = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps; -	ctrl_reflections->setEnabled(reflections); -	reflections_text->setEnabled(reflections); - -    // Transparent Water -    LLCheckBoxCtrl* transparent_water_ctrl = getChild<LLCheckBoxCtrl>("TransparentWater"); - -	// Bump & Shiny	 -	LLCheckBoxCtrl* bumpshiny_ctrl = getChild<LLCheckBoxCtrl>("BumpShiny"); -	bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump"); -	bumpshiny_ctrl->setEnabled(bumpshiny ? TRUE : FALSE); -     -	// Avatar Mode -	// Enable Avatar Shaders -	LLCheckBoxCtrl* ctrl_avatar_vp = getChild<LLCheckBoxCtrl>("AvatarVertexProgram"); -	// Avatar Render Mode -	LLCheckBoxCtrl* ctrl_avatar_cloth = getChild<LLCheckBoxCtrl>("AvatarCloth"); -	 -	bool avatar_vp_enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"); -	if (LLViewerShaderMgr::sInitialized) -	{ -		S32 max_avatar_shader = LLViewerShaderMgr::instance()->mMaxAvatarShaderLevel; -		avatar_vp_enabled = (max_avatar_shader > 0) ? TRUE : FALSE; -	} - -	ctrl_avatar_vp->setEnabled(avatar_vp_enabled); -	 -    if (gSavedSettings.getBOOL("RenderAvatarVP") == FALSE) -    { -        ctrl_avatar_cloth->setEnabled(FALSE); -    }  -    else -    { -        ctrl_avatar_cloth->setEnabled(TRUE); -    } - -    // Vertex Shaders, Global Shader Enable -    // SL-12594 Basic shaders are always enabled. DJH TODO clean up now-orphaned state handling code -    LLSliderCtrl* terrain_detail = getChild<LLSliderCtrl>("TerrainDetail");   // can be linked with control var -    LLTextBox* terrain_text = getChild<LLTextBox>("TerrainDetailText"); - -    terrain_detail->setEnabled(FALSE); -    terrain_text->setEnabled(FALSE); - -    // WindLight -    LLCheckBoxCtrl* ctrl_wind_light = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders"); -    LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail"); -    LLTextBox* sky_text = getChild<LLTextBox>("SkyMeshDetailText"); -    ctrl_wind_light->setEnabled(TRUE); -    sky->setEnabled(TRUE); -    sky_text->setEnabled(TRUE); - -    //Deferred/SSAO/Shadows -    LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders"); -     -    BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && -                        ((bumpshiny_ctrl && bumpshiny_ctrl->get()) ? TRUE : FALSE) && -                        ((transparent_water_ctrl && transparent_water_ctrl->get()) ? TRUE : FALSE) && -                        gGLManager.mHasFramebufferObject && -                        gSavedSettings.getBOOL("RenderAvatarVP") && -                        (ctrl_wind_light->get()) ? TRUE : FALSE; - -    ctrl_deferred->setEnabled(enabled); - -	LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO"); -	LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF"); -	LLComboBox* ctrl_shadow = getChild<LLComboBox>("ShadowDetail"); -	LLTextBox* shadow_text = getChild<LLTextBox>("RenderShadowDetailText"); - -	// note, okay here to get from ctrl_deferred as it's twin, ctrl_deferred2 will alway match it -	enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO") && (ctrl_deferred->get() ? TRUE : FALSE); -	 -	ctrl_deferred->set(gSavedSettings.getBOOL("RenderDeferred")); - -	ctrl_ssao->setEnabled(enabled); -	ctrl_dof->setEnabled(enabled); - -	enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"); - -	ctrl_shadow->setEnabled(enabled); -	shadow_text->setEnabled(enabled); - -	// Hardware settings -	F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple"); -	S32Megabytes min_tex_mem = LLViewerTextureList::getMinVideoRamSetting(); -	S32Megabytes max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(false, mem_multiplier); -	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem.value()); -	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem.value()); - -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") || -		!gGLManager.mHasVertexBufferObject) -	{ -		getChildView("vbo")->setEnabled(FALSE); -	} - -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderCompressTextures") || -		!gGLManager.mHasVertexBufferObject) -	{ -		getChildView("texture compression")->setEnabled(FALSE); -	} - -	// if no windlight shaders, turn off nighttime brightness, gamma, and fog distance -	LLUICtrl* gamma_ctrl = getChild<LLUICtrl>("gamma"); -	gamma_ctrl->setEnabled(!gPipeline.canUseWindLightShaders()); -	getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders()); -	getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders()); -	getChildView("antialiasing restart")->setVisible(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred")); - -	// now turn off any features that are unavailable -	disableUnavailableSettings(); -} -  // static  void LLAvatarComplexityControls::setIndirectControls()  { @@ -1376,118 +1227,6 @@ void LLAvatarComplexityControls::setIndirectMaxArc()  	gSavedSettings.setU32("IndirectMaxComplexity", indirect_max_arc);  } -void LLFloaterPreferenceGraphicsAdvanced::disableUnavailableSettings() -{	 -	LLComboBox* ctrl_reflections   = getChild<LLComboBox>("Reflections"); -	LLTextBox* reflections_text = getChild<LLTextBox>("ReflectionsText"); -	LLCheckBoxCtrl* ctrl_avatar_vp     = getChild<LLCheckBoxCtrl>("AvatarVertexProgram"); -	LLCheckBoxCtrl* ctrl_avatar_cloth  = getChild<LLCheckBoxCtrl>("AvatarCloth"); -	LLCheckBoxCtrl* ctrl_wind_light    = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders"); -	LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders"); -	LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail"); -	LLTextBox* shadows_text = getChild<LLTextBox>("RenderShadowDetailText"); -	LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO"); -	LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF"); -	LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail"); -	LLTextBox* sky_text = getChild<LLTextBox>("SkyMeshDetailText"); - -	// disabled windlight -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders")) -	{ -		ctrl_wind_light->setEnabled(FALSE); -		ctrl_wind_light->setValue(FALSE); - -		sky->setEnabled(FALSE); -		sky_text->setEnabled(FALSE); - -		//deferred needs windlight, disable deferred -		ctrl_shadows->setEnabled(FALSE); -		ctrl_shadows->setValue(0); -		shadows_text->setEnabled(FALSE); -		 -		ctrl_ssao->setEnabled(FALSE); -		ctrl_ssao->setValue(FALSE); - -		ctrl_dof->setEnabled(FALSE); -		ctrl_dof->setValue(FALSE); - -		ctrl_deferred->setEnabled(FALSE); -		ctrl_deferred->setValue(FALSE); -	} - -	// disabled deferred -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") || -		!gGLManager.mHasFramebufferObject) -	{ -		ctrl_shadows->setEnabled(FALSE); -		ctrl_shadows->setValue(0); -		shadows_text->setEnabled(FALSE); -		 -		ctrl_ssao->setEnabled(FALSE); -		ctrl_ssao->setValue(FALSE); - -		ctrl_dof->setEnabled(FALSE); -		ctrl_dof->setValue(FALSE); - -		ctrl_deferred->setEnabled(FALSE); -		ctrl_deferred->setValue(FALSE); -	} -	 -	// disabled deferred SSAO -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO")) -	{ -		ctrl_ssao->setEnabled(FALSE); -		ctrl_ssao->setValue(FALSE); -	} -	 -	// disabled deferred shadows -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail")) -	{ -		ctrl_shadows->setEnabled(FALSE); -		ctrl_shadows->setValue(0); -		shadows_text->setEnabled(FALSE); -	} - -	// disabled reflections -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail")) -	{ -		ctrl_reflections->setEnabled(FALSE); -		ctrl_reflections->setValue(FALSE); -		reflections_text->setEnabled(FALSE); -	} -	 -	// disabled av -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP")) -	{ -		ctrl_avatar_vp->setEnabled(FALSE); -		ctrl_avatar_vp->setValue(FALSE); -		 -		ctrl_avatar_cloth->setEnabled(FALSE); -		ctrl_avatar_cloth->setValue(FALSE); - -		//deferred needs AvatarVP, disable deferred -		ctrl_shadows->setEnabled(FALSE); -		ctrl_shadows->setValue(0); -		shadows_text->setEnabled(FALSE); -		 -		ctrl_ssao->setEnabled(FALSE); -		ctrl_ssao->setValue(FALSE); - -		ctrl_dof->setEnabled(FALSE); -		ctrl_dof->setValue(FALSE); - -		ctrl_deferred->setEnabled(FALSE); -		ctrl_deferred->setValue(FALSE); -	} - -	// disabled cloth -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth")) -	{ -		ctrl_avatar_cloth->setEnabled(FALSE); -		ctrl_avatar_cloth->setValue(FALSE); -	} -} -  void LLFloaterPreference::refresh()  {  	LLPanel::refresh(); @@ -1503,32 +1242,6 @@ void LLFloaterPreference::refresh()      updateClickActionViews();  } -void LLFloaterPreferenceGraphicsAdvanced::refresh() -{ -	getChild<LLUICtrl>("fsaa")->setValue((LLSD::Integer)  gSavedSettings.getU32("RenderFSAASamples")); - -	// sliders and their text boxes -	//	mPostProcess = gSavedSettings.getS32("RenderGlowResolutionPow"); -	// slider text boxes -	updateSliderText(getChild<LLSliderCtrl>("ObjectMeshDetail",		true), getChild<LLTextBox>("ObjectMeshDetailText",		true)); -	updateSliderText(getChild<LLSliderCtrl>("FlexibleMeshDetail",	true), getChild<LLTextBox>("FlexibleMeshDetailText",	true)); -	updateSliderText(getChild<LLSliderCtrl>("TreeMeshDetail",		true), getChild<LLTextBox>("TreeMeshDetailText",		true)); -	updateSliderText(getChild<LLSliderCtrl>("AvatarMeshDetail",		true), getChild<LLTextBox>("AvatarMeshDetailText",		true)); -	updateSliderText(getChild<LLSliderCtrl>("AvatarPhysicsDetail",	true), getChild<LLTextBox>("AvatarPhysicsDetailText",		true)); -	updateSliderText(getChild<LLSliderCtrl>("TerrainMeshDetail",	true), getChild<LLTextBox>("TerrainMeshDetailText",		true)); -	updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess",	true), getChild<LLTextBox>("PostProcessText",			true)); -	updateSliderText(getChild<LLSliderCtrl>("SkyMeshDetail",		true), getChild<LLTextBox>("SkyMeshDetailText",			true)); -	updateSliderText(getChild<LLSliderCtrl>("TerrainDetail",		true), getChild<LLTextBox>("TerrainDetailText",			true));	 -    LLAvatarComplexityControls::setIndirectControls(); -	setMaxNonImpostorsText( -        gSavedSettings.getU32("RenderAvatarMaxNonImpostors"), -        getChild<LLTextBox>("IndirectMaxNonImpostorsText", true)); -    LLAvatarComplexityControls::setText( -        gSavedSettings.getU32("RenderAvatarMaxComplexity"), -        getChild<LLTextBox>("IndirectMaxComplexityText", true)); -	refreshEnabledState(); -} -  void LLFloaterPreference::onCommitWindowedMode()  {  	refresh(); @@ -1742,63 +1455,6 @@ void LLFloaterPreference::refreshUI()  	refresh();  } -void LLFloaterPreferenceGraphicsAdvanced::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box) -{ -	if (text_box == NULL || ctrl== NULL) -		return; - -	// get range and points when text should change -	F32 value = (F32)ctrl->getValue().asReal(); -	F32 min = ctrl->getMinValue(); -	F32 max = ctrl->getMaxValue(); -	F32 range = max - min; -	llassert(range > 0); -	F32 midPoint = min + range / 3.0f; -	F32 highPoint = min + (2.0f * range / 3.0f); - -	// choose the right text -	if (value < midPoint) -	{ -		text_box->setText(LLTrans::getString("GraphicsQualityLow")); -	}  -	else if (value < highPoint) -	{ -		text_box->setText(LLTrans::getString("GraphicsQualityMid")); -	} -	else -	{ -		text_box->setText(LLTrans::getString("GraphicsQualityHigh")); -	} -} - -void LLFloaterPreferenceGraphicsAdvanced::updateMaxNonImpostors() -{ -	// Called when the IndirectMaxNonImpostors control changes -	// Responsible for fixing the slider label (IndirectMaxNonImpostorsText) and setting RenderAvatarMaxNonImpostors -	LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxNonImpostors",true); -	U32 value = ctrl->getValue().asInteger(); - -	if (0 == value || LLVOAvatar::NON_IMPOSTORS_MAX_SLIDER <= value) -	{ -		value=0; -	} -	gSavedSettings.setU32("RenderAvatarMaxNonImpostors", value); -	LLVOAvatar::updateImpostorRendering(value); // make it effective immediately -	setMaxNonImpostorsText(value, getChild<LLTextBox>("IndirectMaxNonImpostorsText")); -} - -void LLFloaterPreferenceGraphicsAdvanced::setMaxNonImpostorsText(U32 value, LLTextBox* text_box) -{ -	if (0 == value) -	{ -		text_box->setText(LLTrans::getString("no_limit")); -	} -	else -	{ -		text_box->setText(llformat("%d", value)); -	} -} -  void LLAvatarComplexityControls::updateMax(LLSliderCtrl* slider, LLTextBox* value_label)  {  	// Called when the IndirectMaxComplexity control changes @@ -1891,22 +1547,6 @@ bool LLFloaterPreference::loadFromFilename(const std::string& filename, std::map      return true;  } -void LLFloaterPreferenceGraphicsAdvanced::updateMaxComplexity() -{ -	// Called when the IndirectMaxComplexity control changes -    LLAvatarComplexityControls::updateMax( -        getChild<LLSliderCtrl>("IndirectMaxComplexity"), -        getChild<LLTextBox>("IndirectMaxComplexityText")); - -    LLFloaterPreference* floater_preferences = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); -    if (floater_preferences) -    { -        LLAvatarComplexityControls::updateMax( -            floater_preferences->getChild<LLSliderCtrl>("IndirectMaxComplexity"), -            floater_preferences->getChild<LLTextBox>("IndirectMaxComplexityText")); -    } -} -  void LLFloaterPreference::onChangeMaturity()  {  	U8 sim_access = gSavedSettings.getU32("PreferredMaturity"); @@ -3310,18 +2950,6 @@ void LLPanelPreferenceControls::onCancelKeyBind()      pControlsTable->deselectAllItems();  } -LLFloaterPreferenceGraphicsAdvanced::LLFloaterPreferenceGraphicsAdvanced(const LLSD& key) -	: LLFloater(key) -{ -    mCommitCallbackRegistrar.add("Pref.RenderOptionUpdate",            boost::bind(&LLFloaterPreferenceGraphicsAdvanced::onRenderOptionEnable, this)); -	mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxNonImpostors", boost::bind(&LLFloaterPreferenceGraphicsAdvanced::updateMaxNonImpostors,this)); -	mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxComplexity",   boost::bind(&LLFloaterPreferenceGraphicsAdvanced::updateMaxComplexity,this)); -} - -LLFloaterPreferenceGraphicsAdvanced::~LLFloaterPreferenceGraphicsAdvanced() -{ -} -  LLFloaterPreferenceProxy::LLFloaterPreferenceProxy(const LLSD& key)  	: LLFloater(key),  	  mSocksSettingsDirty(false) @@ -3331,41 +2959,6 @@ LLFloaterPreferenceProxy::LLFloaterPreferenceProxy(const LLSD& key)  	mCommitCallbackRegistrar.add("Proxy.Change",            boost::bind(&LLFloaterPreferenceProxy::onChangeSocksSettings, this));  } -BOOL LLFloaterPreferenceGraphicsAdvanced::postBuild() -{ -    // Don't do this on Mac as their braindead GL versioning -    // sets this when 8x and 16x are indeed available -    // -#if !LL_DARWIN -    if (gGLManager.mIsIntel || gGLManager.mGLVersion < 3.f) -    { //remove FSAA settings above "4x" -        LLComboBox* combo = getChild<LLComboBox>("fsaa"); -        combo->remove("8x"); -        combo->remove("16x"); -    } -	 -	LLCheckBoxCtrl *use_HiDPI = getChild<LLCheckBoxCtrl>("use HiDPI"); -	use_HiDPI->setVisible(FALSE); -#endif - -    return TRUE; -} - -void LLFloaterPreferenceGraphicsAdvanced::onOpen(const LLSD& key) -{ -    refresh(); -} - -void LLFloaterPreferenceGraphicsAdvanced::onClickCloseBtn(bool app_quitting) -{ -	LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); -	if (instance) -	{ -		instance->cancel(); -	} -	updateMaxComplexity(); -} -  LLFloaterPreferenceProxy::~LLFloaterPreferenceProxy()  {  } diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 1268935712..f86104ed99 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -109,9 +109,10 @@ public:  	// updates click/double-click action controls depending on values from settings.xml  	void updateClickActionViews(); +    void		onBtnOK(const LLSD& userdata); +    void		onBtnCancel(const LLSD& userdata); +  protected:	 -	void		onBtnOK(const LLSD& userdata); -	void		onBtnCancel(const LLSD& userdata);  	void		onClickClearCache();			// Clear viewer texture cache, vfs, and VO cache on next startup  	void		onClickBrowserClearCache();		// Clear web history and caches as well as viewer caches above @@ -347,32 +348,6 @@ private:  	S32 mEditingMode;  }; -class LLFloaterPreferenceGraphicsAdvanced : public LLFloater -{ -  public:  -	LLFloaterPreferenceGraphicsAdvanced(const LLSD& key); -	~LLFloaterPreferenceGraphicsAdvanced(); -	/*virtual*/ BOOL postBuild(); -	void onOpen(const LLSD& key); -	void onClickCloseBtn(bool app_quitting); -	void disableUnavailableSettings(); -	void refreshEnabledGraphics(); -	void refreshEnabledState(); -	void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box); -	void updateMaxNonImpostors(); -	void setMaxNonImpostorsText(U32 value, LLTextBox* text_box); -	void updateMaxComplexity(); -	void setMaxComplexityText(U32 value, LLTextBox* text_box); -	static void setIndirectControls(); -	static void setIndirectMaxNonImpostors(); -	static void setIndirectMaxArc(); -	void refresh(); -	// callback for when client modifies a render option -	void onRenderOptionEnable(); -    void onAdvancedAtmosphericsEnable(); -	LOG_CLASS(LLFloaterPreferenceGraphicsAdvanced); -}; -  class LLAvatarComplexityControls  {    public:  diff --git a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp new file mode 100644 index 0000000000..404cdf5280 --- /dev/null +++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp @@ -0,0 +1,466 @@ +/**  + * @file llfloaterpreferencesgraphicsadvanced.cpp + * @brief floater for adjusting camera position + * + * $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 "llfloaterpreferencesgraphicsadvanced.h" + +#include "llcheckboxctrl.h" +#include "llcombobox.h" +#include "llfeaturemanager.h" +#include "llfloaterpreference.h" +#include "llfloaterreg.h" +#include "llsliderctrl.h" +#include "lltextbox.h" +#include "lltrans.h" +#include "llviewershadermgr.h" +#include "llviewertexturelist.h" +#include "llvoavatar.h" +#include "pipeline.h" + + +LLFloaterPreferenceGraphicsAdvanced::LLFloaterPreferenceGraphicsAdvanced(const LLSD& key) +    : LLFloater(key) +{ +    mCommitCallbackRegistrar.add("Pref.RenderOptionUpdate",            boost::bind(&LLFloaterPreferenceGraphicsAdvanced::onRenderOptionEnable, this)); +    mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxNonImpostors", boost::bind(&LLFloaterPreferenceGraphicsAdvanced::updateMaxNonImpostors,this)); +    mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxComplexity",   boost::bind(&LLFloaterPreferenceGraphicsAdvanced::updateMaxComplexity,this)); + +    mCommitCallbackRegistrar.add("Pref.Cancel", boost::bind(&LLFloaterPreferenceGraphicsAdvanced::onBtnCancel, this, _2)); +    mCommitCallbackRegistrar.add("Pref.OK",     boost::bind(&LLFloaterPreferenceGraphicsAdvanced::onBtnOK, this, _2)); +} + +LLFloaterPreferenceGraphicsAdvanced::~LLFloaterPreferenceGraphicsAdvanced() +{ +} + +BOOL LLFloaterPreferenceGraphicsAdvanced::postBuild() +{ +    // Don't do this on Mac as their braindead GL versioning +    // sets this when 8x and 16x are indeed available +    // +#if !LL_DARWIN +    if (gGLManager.mIsIntel || gGLManager.mGLVersion < 3.f) +    { //remove FSAA settings above "4x" +        LLComboBox* combo = getChild<LLComboBox>("fsaa"); +        combo->remove("8x"); +        combo->remove("16x"); +    } + +    LLCheckBoxCtrl *use_HiDPI = getChild<LLCheckBoxCtrl>("use HiDPI"); +    use_HiDPI->setVisible(FALSE); +#endif + +    return TRUE; +} + +void LLFloaterPreferenceGraphicsAdvanced::onOpen(const LLSD& key) +{ +    refresh(); +} + +void LLFloaterPreferenceGraphicsAdvanced::onClickCloseBtn(bool app_quitting) +{ +    LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); +    if (instance) +    { +        instance->cancel(); +    } +    updateMaxComplexity(); +} + +void LLFloaterPreferenceGraphicsAdvanced::onRenderOptionEnable() +{ +    LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); +    if (instance) +    { +        instance->refresh(); +    } + +    refreshEnabledGraphics(); +} + +void LLFloaterPreferenceGraphicsAdvanced::onAdvancedAtmosphericsEnable() +{ +    LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); +    if (instance) +    { +        instance->refresh(); +    } + +    refreshEnabledGraphics(); +} + +void LLFloaterPreferenceGraphicsAdvanced::refresh() +{ +    getChild<LLUICtrl>("fsaa")->setValue((LLSD::Integer)  gSavedSettings.getU32("RenderFSAASamples")); + +    // sliders and their text boxes +    //	mPostProcess = gSavedSettings.getS32("RenderGlowResolutionPow"); +    // slider text boxes +    updateSliderText(getChild<LLSliderCtrl>("ObjectMeshDetail",		true), getChild<LLTextBox>("ObjectMeshDetailText",		true)); +    updateSliderText(getChild<LLSliderCtrl>("FlexibleMeshDetail",	true), getChild<LLTextBox>("FlexibleMeshDetailText",	true)); +    updateSliderText(getChild<LLSliderCtrl>("TreeMeshDetail",		true), getChild<LLTextBox>("TreeMeshDetailText",		true)); +    updateSliderText(getChild<LLSliderCtrl>("AvatarMeshDetail",		true), getChild<LLTextBox>("AvatarMeshDetailText",		true)); +    updateSliderText(getChild<LLSliderCtrl>("AvatarPhysicsDetail",	true), getChild<LLTextBox>("AvatarPhysicsDetailText",		true)); +    updateSliderText(getChild<LLSliderCtrl>("TerrainMeshDetail",	true), getChild<LLTextBox>("TerrainMeshDetailText",		true)); +    updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess",	true), getChild<LLTextBox>("PostProcessText",			true)); +    updateSliderText(getChild<LLSliderCtrl>("SkyMeshDetail",		true), getChild<LLTextBox>("SkyMeshDetailText",			true)); +    updateSliderText(getChild<LLSliderCtrl>("TerrainDetail",		true), getChild<LLTextBox>("TerrainDetailText",			true));	 +    LLAvatarComplexityControls::setIndirectControls(); +    setMaxNonImpostorsText( +        gSavedSettings.getU32("RenderAvatarMaxNonImpostors"), +        getChild<LLTextBox>("IndirectMaxNonImpostorsText", true)); +    LLAvatarComplexityControls::setText( +        gSavedSettings.getU32("RenderAvatarMaxComplexity"), +        getChild<LLTextBox>("IndirectMaxComplexityText", true)); +    refreshEnabledState(); +} + +void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledGraphics() +{ +    refreshEnabledState(); +} + +void LLFloaterPreferenceGraphicsAdvanced::updateMaxComplexity() +{ +    // Called when the IndirectMaxComplexity control changes +    LLAvatarComplexityControls::updateMax( +        getChild<LLSliderCtrl>("IndirectMaxComplexity"), +        getChild<LLTextBox>("IndirectMaxComplexityText")); + +    LLFloaterPreference* floater_preferences = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); +    if (floater_preferences) +    { +        LLAvatarComplexityControls::updateMax( +            floater_preferences->getChild<LLSliderCtrl>("IndirectMaxComplexity"), +            floater_preferences->getChild<LLTextBox>("IndirectMaxComplexityText")); +    } +} + +void LLFloaterPreferenceGraphicsAdvanced::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box) +{ +    if (text_box == NULL || ctrl== NULL) +        return; + +    // get range and points when text should change +    F32 value = (F32)ctrl->getValue().asReal(); +    F32 min = ctrl->getMinValue(); +    F32 max = ctrl->getMaxValue(); +    F32 range = max - min; +    llassert(range > 0); +    F32 midPoint = min + range / 3.0f; +    F32 highPoint = min + (2.0f * range / 3.0f); + +    // choose the right text +    if (value < midPoint) +    { +        text_box->setText(LLTrans::getString("GraphicsQualityLow")); +    }  +    else if (value < highPoint) +    { +        text_box->setText(LLTrans::getString("GraphicsQualityMid")); +    } +    else +    { +        text_box->setText(LLTrans::getString("GraphicsQualityHigh")); +    } +} + +void LLFloaterPreferenceGraphicsAdvanced::updateMaxNonImpostors() +{ +    // Called when the IndirectMaxNonImpostors control changes +    // Responsible for fixing the slider label (IndirectMaxNonImpostorsText) and setting RenderAvatarMaxNonImpostors +    LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxNonImpostors",true); +    U32 value = ctrl->getValue().asInteger(); + +    if (0 == value || LLVOAvatar::NON_IMPOSTORS_MAX_SLIDER <= value) +    { +        value=0; +    } +    gSavedSettings.setU32("RenderAvatarMaxNonImpostors", value); +    LLVOAvatar::updateImpostorRendering(value); // make it effective immediately +    setMaxNonImpostorsText(value, getChild<LLTextBox>("IndirectMaxNonImpostorsText")); +} + +void LLFloaterPreferenceGraphicsAdvanced::setMaxNonImpostorsText(U32 value, LLTextBox* text_box) +{ +    if (0 == value) +    { +        text_box->setText(LLTrans::getString("no_limit")); +    } +    else +    { +        text_box->setText(llformat("%d", value)); +    } +} + +void LLFloaterPreferenceGraphicsAdvanced::disableUnavailableSettings() +{	 +    LLComboBox* ctrl_reflections   = getChild<LLComboBox>("Reflections"); +    LLTextBox* reflections_text = getChild<LLTextBox>("ReflectionsText"); +    LLCheckBoxCtrl* ctrl_avatar_vp     = getChild<LLCheckBoxCtrl>("AvatarVertexProgram"); +    LLCheckBoxCtrl* ctrl_avatar_cloth  = getChild<LLCheckBoxCtrl>("AvatarCloth"); +    LLCheckBoxCtrl* ctrl_wind_light    = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders"); +    LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders"); +    LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail"); +    LLTextBox* shadows_text = getChild<LLTextBox>("RenderShadowDetailText"); +    LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO"); +    LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF"); +    LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail"); +    LLTextBox* sky_text = getChild<LLTextBox>("SkyMeshDetailText"); + +    // disabled windlight +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders")) +    { +        ctrl_wind_light->setEnabled(FALSE); +        ctrl_wind_light->setValue(FALSE); + +        sky->setEnabled(FALSE); +        sky_text->setEnabled(FALSE); + +        //deferred needs windlight, disable deferred +        ctrl_shadows->setEnabled(FALSE); +        ctrl_shadows->setValue(0); +        shadows_text->setEnabled(FALSE); + +        ctrl_ssao->setEnabled(FALSE); +        ctrl_ssao->setValue(FALSE); + +        ctrl_dof->setEnabled(FALSE); +        ctrl_dof->setValue(FALSE); + +        ctrl_deferred->setEnabled(FALSE); +        ctrl_deferred->setValue(FALSE); +    } + +    // disabled deferred +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") || +        !gGLManager.mHasFramebufferObject) +    { +        ctrl_shadows->setEnabled(FALSE); +        ctrl_shadows->setValue(0); +        shadows_text->setEnabled(FALSE); + +        ctrl_ssao->setEnabled(FALSE); +        ctrl_ssao->setValue(FALSE); + +        ctrl_dof->setEnabled(FALSE); +        ctrl_dof->setValue(FALSE); + +        ctrl_deferred->setEnabled(FALSE); +        ctrl_deferred->setValue(FALSE); +    } + +    // disabled deferred SSAO +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO")) +    { +        ctrl_ssao->setEnabled(FALSE); +        ctrl_ssao->setValue(FALSE); +    } + +    // disabled deferred shadows +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail")) +    { +        ctrl_shadows->setEnabled(FALSE); +        ctrl_shadows->setValue(0); +        shadows_text->setEnabled(FALSE); +    } + +    // disabled reflections +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail")) +    { +        ctrl_reflections->setEnabled(FALSE); +        ctrl_reflections->setValue(FALSE); +        reflections_text->setEnabled(FALSE); +    } + +    // disabled av +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP")) +    { +        ctrl_avatar_vp->setEnabled(FALSE); +        ctrl_avatar_vp->setValue(FALSE); + +        ctrl_avatar_cloth->setEnabled(FALSE); +        ctrl_avatar_cloth->setValue(FALSE); + +        //deferred needs AvatarVP, disable deferred +        ctrl_shadows->setEnabled(FALSE); +        ctrl_shadows->setValue(0); +        shadows_text->setEnabled(FALSE); + +        ctrl_ssao->setEnabled(FALSE); +        ctrl_ssao->setValue(FALSE); + +        ctrl_dof->setEnabled(FALSE); +        ctrl_dof->setValue(FALSE); + +        ctrl_deferred->setEnabled(FALSE); +        ctrl_deferred->setValue(FALSE); +    } + +    // disabled cloth +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth")) +    { +        ctrl_avatar_cloth->setEnabled(FALSE); +        ctrl_avatar_cloth->setValue(FALSE); +    } +} + +void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState() +{ +    LLComboBox* ctrl_reflections = getChild<LLComboBox>("Reflections"); +    LLTextBox* reflections_text = getChild<LLTextBox>("ReflectionsText"); + +    // Reflections +    BOOL reflections = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps; +    ctrl_reflections->setEnabled(reflections); +    reflections_text->setEnabled(reflections); + +    // Transparent Water +    LLCheckBoxCtrl* transparent_water_ctrl = getChild<LLCheckBoxCtrl>("TransparentWater"); + +    // Bump & Shiny	 +    LLCheckBoxCtrl* bumpshiny_ctrl = getChild<LLCheckBoxCtrl>("BumpShiny"); +    bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump"); +    bumpshiny_ctrl->setEnabled(bumpshiny ? TRUE : FALSE); + +    // Avatar Mode +    // Enable Avatar Shaders +    LLCheckBoxCtrl* ctrl_avatar_vp = getChild<LLCheckBoxCtrl>("AvatarVertexProgram"); +    // Avatar Render Mode +    LLCheckBoxCtrl* ctrl_avatar_cloth = getChild<LLCheckBoxCtrl>("AvatarCloth"); + +    bool avatar_vp_enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"); +    if (LLViewerShaderMgr::sInitialized) +    { +        S32 max_avatar_shader = LLViewerShaderMgr::instance()->mMaxAvatarShaderLevel; +        avatar_vp_enabled = (max_avatar_shader > 0) ? TRUE : FALSE; +    } + +    ctrl_avatar_vp->setEnabled(avatar_vp_enabled); + +    if (gSavedSettings.getBOOL("RenderAvatarVP") == FALSE) +    { +        ctrl_avatar_cloth->setEnabled(FALSE); +    }  +    else +    { +        ctrl_avatar_cloth->setEnabled(TRUE); +    } + +    // Vertex Shaders, Global Shader Enable +    // SL-12594 Basic shaders are always enabled. DJH TODO clean up now-orphaned state handling code +    LLSliderCtrl* terrain_detail = getChild<LLSliderCtrl>("TerrainDetail");   // can be linked with control var +    LLTextBox* terrain_text = getChild<LLTextBox>("TerrainDetailText"); + +    terrain_detail->setEnabled(FALSE); +    terrain_text->setEnabled(FALSE); + +    // WindLight +    LLCheckBoxCtrl* ctrl_wind_light = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders"); +    LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail"); +    LLTextBox* sky_text = getChild<LLTextBox>("SkyMeshDetailText"); +    ctrl_wind_light->setEnabled(TRUE); +    sky->setEnabled(TRUE); +    sky_text->setEnabled(TRUE); + +    //Deferred/SSAO/Shadows +    LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders"); + +    BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && +        ((bumpshiny_ctrl && bumpshiny_ctrl->get()) ? TRUE : FALSE) && +        ((transparent_water_ctrl && transparent_water_ctrl->get()) ? TRUE : FALSE) && +        gGLManager.mHasFramebufferObject && +        gSavedSettings.getBOOL("RenderAvatarVP") && +        (ctrl_wind_light->get()) ? TRUE : FALSE; + +    ctrl_deferred->setEnabled(enabled); + +    LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO"); +    LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF"); +    LLComboBox* ctrl_shadow = getChild<LLComboBox>("ShadowDetail"); +    LLTextBox* shadow_text = getChild<LLTextBox>("RenderShadowDetailText"); + +    // note, okay here to get from ctrl_deferred as it's twin, ctrl_deferred2 will alway match it +    enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO") && (ctrl_deferred->get() ? TRUE : FALSE); + +    ctrl_deferred->set(gSavedSettings.getBOOL("RenderDeferred")); + +    ctrl_ssao->setEnabled(enabled); +    ctrl_dof->setEnabled(enabled); + +    enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"); + +    ctrl_shadow->setEnabled(enabled); +    shadow_text->setEnabled(enabled); + +    // Hardware settings +    F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple"); +    S32Megabytes min_tex_mem = LLViewerTextureList::getMinVideoRamSetting(); +    S32Megabytes max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(false, mem_multiplier); +    getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem.value()); +    getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem.value()); + +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") || +        !gGLManager.mHasVertexBufferObject) +    { +        getChildView("vbo")->setEnabled(FALSE); +    } + +    if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderCompressTextures") || +        !gGLManager.mHasVertexBufferObject) +    { +        getChildView("texture compression")->setEnabled(FALSE); +    } + +    // if no windlight shaders, turn off nighttime brightness, gamma, and fog distance +    LLUICtrl* gamma_ctrl = getChild<LLUICtrl>("gamma"); +    gamma_ctrl->setEnabled(!gPipeline.canUseWindLightShaders()); +    getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders()); +    getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders()); +    getChildView("antialiasing restart")->setVisible(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred")); + +    // now turn off any features that are unavailable +    disableUnavailableSettings(); +} + +void LLFloaterPreferenceGraphicsAdvanced::onBtnOK(const LLSD& userdata) +{ +    LLFloaterPreference* instance = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences"); +    if (instance) +    { +        instance->onBtnOK(userdata); +    } +} + +void LLFloaterPreferenceGraphicsAdvanced::onBtnCancel(const LLSD& userdata) +{ +    LLFloaterPreference* instance = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences"); +    if (instance) +    { +        instance->onBtnCancel(userdata); +    } +} diff --git a/indra/newview/llfloaterpreferencesgraphicsadvanced.h b/indra/newview/llfloaterpreferencesgraphicsadvanced.h new file mode 100644 index 0000000000..3e9046eba9 --- /dev/null +++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.h @@ -0,0 +1,63 @@ +/**  + * @file llfloaterpreferencesgraphicsadvanced.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 LLFLOATERPREFERENCEGRAPHICSADVANCED_H +#define LLFLOATERPREFERENCEGRAPHICSADVANCED_H + +#include "llcontrol.h" +#include "llfloater.h" + +class LLSliderCtrl; +class LLTextBox; + +class LLFloaterPreferenceGraphicsAdvanced : public LLFloater +{ +public:  +    LLFloaterPreferenceGraphicsAdvanced(const LLSD& key); +    ~LLFloaterPreferenceGraphicsAdvanced(); +    /*virtual*/ BOOL postBuild(); +    void onOpen(const LLSD& key); +    void onClickCloseBtn(bool app_quitting); +    void disableUnavailableSettings(); +    void refreshEnabledGraphics(); +    void refreshEnabledState(); +    void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box); +    void updateMaxNonImpostors(); +    void setMaxNonImpostorsText(U32 value, LLTextBox* text_box); +    void updateMaxComplexity(); +    void setMaxComplexityText(U32 value, LLTextBox* text_box); +    void refresh(); +    // callback for when client modifies a render option +    void onRenderOptionEnable(); +    void onAdvancedAtmosphericsEnable(); +    LOG_CLASS(LLFloaterPreferenceGraphicsAdvanced); + +protected:	 +    void		onBtnOK(const LLSD& userdata); +    void		onBtnCancel(const LLSD& userdata); +}; + +#endif //LLFLOATERPREFERENCEGRAPHICSADVANCED_H + diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index eabdb67188..731a7e8ace 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -106,6 +106,7 @@  #include "llfloaterperms.h"  #include "llfloaterpostprocess.h"  #include "llfloaterpreference.h" +#include "llfloaterpreferencesgraphicsadvanced.h"  #include "llfloaterpreferenceviewadvanced.h"  #include "llfloaterpreviewtrash.h"  #include "llfloaterproperties.h" 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 ade5f99451..d71b5334cd 100644 --- a/indra/newview/skins/default/xui/en/panel_performance_nearby.xml +++ b/indra/newview/skins/default/xui/en/panel_performance_nearby.xml @@ -83,9 +83,6 @@      show_text="false"      top_pad="10"      width="300"> -    <slider.commit_callback -      function="Pref.UpdateIndirectMaxComplexity" -      parameter="IndirectMaxComlexityText" />    </slider>    <text      type="string" | 
