From a3ac5a43b3104f6d5dc88b71df99c4d19922fdbb Mon Sep 17 00:00:00 2001 From: Shyotl Date: Fri, 13 May 2011 02:26:14 -0500 Subject: [PATCH] Changed how the enabled state for the deferred checkbox is handled in the graphics floater It now is disabled if: -Lacking hardware support for FBOs -RenderDeferred not permitted in gpu feature table -RenderAvatarVP not permitted in gpu feature table -VertexShaderEnable is enabled and permitted in gpu feature table -WindLightUseAtmosShaders is enabled and permitted in gpu feature table Enabling deferred now requires WindLightUseAtmosShaders to be on beforehand, instead of blindly enabling it. --- indra/newview/llpaneldisplay.cpp | 12 +++++++++++- indra/newview/llviewershadermgr.cpp | 7 +++---- indra/newview/pipeline.cpp | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpaneldisplay.cpp b/indra/newview/llpaneldisplay.cpp index 77ee2e2c7..c8906fc53 100644 --- a/indra/newview/llpaneldisplay.cpp +++ b/indra/newview/llpaneldisplay.cpp @@ -490,9 +490,19 @@ void LLPanelDisplay::refreshEnabledState() mCtrlAvatarCloth->setEnabled(true); } - BOOL can_defer = gSavedSettings.getBOOL("RenderUseFBO"); + //I actually recommend RenderUseFBO:FALSE for ati users when not using deferred, so RenderUseFBO shouldn't control visibility of the element. + // Instead, gGLManager.mHasFramebufferObject seems better as it is determined by hardware and not current user settings. -Shyotl + //Enabling deferred will force RenderUseFBO to TRUE. + BOOL can_defer = gGLManager.mHasFramebufferObject && + LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && //Ensure it's enabled in the gpu feature table + LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP") && //Hardware Skinning. Deferred forces RenderAvatarVP to true + LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable") && gSavedSettings.getBOOL("VertexShaderEnable") && //Basic Shaders + LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders") && gSavedSettings.getBOOL("WindLightUseAtmosShaders"); //Atmospheric Shaders + + mCtrlDeferred->setEnabled(can_defer); mCtrlSunShadow->setEnabled(can_defer && gSavedSettings.getBOOL("RenderDeferred")); + mCtrlAvatarCloth->setValue(gSavedSettings.getBOOL("RenderAvatarVP")); //Enabling RenderDeferred changes this setting behind this floaters back. // Vertex Shaders // mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 8ef475a24..00d89e45d 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -310,7 +310,9 @@ void LLViewerShaderMgr::setShaders() S32 deferred_class = 0; if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && - gSavedSettings.getBOOL("RenderDeferred")) + gSavedSettings.getBOOL("RenderDeferred") && + LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders") && + gSavedSettings.getBOOL("WindLightUseAtmosShaders")) { deferred_class = 1; @@ -319,9 +321,6 @@ void LLViewerShaderMgr::setShaders() //make sure hardware skinning is enabled gSavedSettings.setBOOL("RenderAvatarVP", TRUE); - - //make sure atmospheric shaders are enabled - gSavedSettings.setBOOL("WindLightUseAtmosShaders", TRUE); } if (!(LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders") && gSavedSettings.getBOOL("WindLightUseAtmosShaders"))) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e10b64409..3562733ea 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -563,6 +563,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) void LLPipeline::updateRenderDeferred() { sRenderDeferred = (gSavedSettings.getBOOL("RenderDeferred") && + LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && LLRenderTarget::sUseFBO && gSavedSettings.getBOOL("VertexShaderEnable") && gSavedSettings.getBOOL("RenderAvatarVP") &&