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.
This commit is contained in:
Shyotl
2011-05-13 02:26:14 -05:00
parent 40d813699b
commit a3ac5a43b3
3 changed files with 15 additions and 5 deletions

View File

@@ -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"));

View File

@@ -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")))

View File

@@ -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") &&