From 15ef8ee9d1cb47d090d56b9fe83b5fc5a402ba0b Mon Sep 17 00:00:00 2001 From: Ansariel Date: Mon, 19 Nov 2012 11:51:58 +0100 Subject: [PATCH] Added more rendering feature and dependency checks for phototools --- indra/newview/quickprefs.cpp | 121 +++++++++++++++++++++++++++++++++++ indra/newview/quickprefs.h | 4 ++ 2 files changed, 125 insertions(+) diff --git a/indra/newview/quickprefs.cpp b/indra/newview/quickprefs.cpp index 4dac8f4286..77cfd116a4 100644 --- a/indra/newview/quickprefs.cpp +++ b/indra/newview/quickprefs.cpp @@ -44,6 +44,7 @@ #include "llfeaturemanager.h" #include "rlvhandler.h" #include "llcheckboxctrl.h" +#include "llcubemap.h" // Ansariel: Copied from llviewercontrol.cpp, handleSetShaderChanged() static void handleShaderChanged() @@ -88,6 +89,7 @@ void FloaterQuickPrefs::initCallbacks(void) gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&FloaterQuickPrefs::refreshSettings, this)); gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&FloaterQuickPrefs::refreshSettings, this)); gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&FloaterQuickPrefs::refreshSettings, this)); + gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&FloaterQuickPrefs::refreshSettings, this)); } BOOL FloaterQuickPrefs::postBuild() @@ -96,6 +98,10 @@ BOOL FloaterQuickPrefs::postBuild() mCtrlShaderEnable = getChild("BasicShaders"); mCtrlWindLight = getChild("WindLightUseAtmosShaders"); mCtrlDeferred = getChild("RenderDeferred"); + mCtrlUseSSAO = getChild("UseSSAO"); + mCtrlUseDoF = getChild("UseDoF"); + mCtrlShadowDetail = getChild("ShadowDetail"); + mCtrlReflectionDetail = getChild("Reflections"); refreshSettings(); mWaterPresetsCombo = getChild("WaterPresetsCombo"); @@ -382,6 +388,11 @@ void FloaterQuickPrefs::onClickRegionWL() // Phototools additions void FloaterQuickPrefs::refreshSettings() { + BOOL reflections = gSavedSettings.getBOOL("VertexShaderEnable") + && gGLManager.mHasCubeMap + && LLCubeMap::sUseCubeMaps; + mCtrlReflectionDetail->setEnabled(reflections); + bool fCtrlShaderEnable = LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"); mCtrlShaderEnable->setEnabled( fCtrlShaderEnable && ((!gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) || (!gSavedSettings.getBOOL("VertexShaderEnable"))) ); @@ -398,4 +409,114 @@ void FloaterQuickPrefs::refreshSettings() (mCtrlWindLight->get()) ? TRUE : FALSE; mCtrlDeferred->setEnabled(enabled); + + enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO") && (mCtrlDeferred->get() ? TRUE : FALSE); + + mCtrlUseSSAO->setEnabled(enabled); + mCtrlUseDoF->setEnabled(enabled); + + enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"); + + mCtrlShadowDetail->setEnabled(enabled); + + + // if vertex shaders off, disable all shader related products + if (!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")) + { + mCtrlShaderEnable->setEnabled(FALSE); + mCtrlShaderEnable->setValue(FALSE); + + mCtrlWindLight->setEnabled(FALSE); + mCtrlWindLight->setValue(FALSE); + + mCtrlReflectionDetail->setEnabled(FALSE); + mCtrlReflectionDetail->setValue(0); + + mCtrlShadowDetail->setEnabled(FALSE); + mCtrlShadowDetail->setValue(0); + + mCtrlUseSSAO->setEnabled(FALSE); + mCtrlUseSSAO->setValue(FALSE); + + mCtrlUseDoF->setEnabled(FALSE); + mCtrlUseDoF->setValue(FALSE); + + mCtrlDeferred->setEnabled(FALSE); + mCtrlDeferred->setValue(FALSE); + } + + // disabled windlight + if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders")) + { + mCtrlWindLight->setEnabled(FALSE); + mCtrlWindLight->setValue(FALSE); + + //deferred needs windlight, disable deferred + mCtrlShadowDetail->setEnabled(FALSE); + mCtrlShadowDetail->setValue(0); + + mCtrlUseSSAO->setEnabled(FALSE); + mCtrlUseSSAO->setValue(FALSE); + + mCtrlUseDoF->setEnabled(FALSE); + mCtrlUseDoF->setValue(FALSE); + + mCtrlDeferred->setEnabled(FALSE); + mCtrlDeferred->setValue(FALSE); + } + + // disabled deferred + if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") || + !gGLManager.mHasFramebufferObject) + { + mCtrlShadowDetail->setEnabled(FALSE); + mCtrlShadowDetail->setValue(0); + + mCtrlUseSSAO->setEnabled(FALSE); + mCtrlUseSSAO->setValue(FALSE); + + mCtrlUseDoF->setEnabled(FALSE); + mCtrlUseDoF->setValue(FALSE); + + mCtrlDeferred->setEnabled(FALSE); + mCtrlDeferred->setValue(FALSE); + } + + // disabled deferred SSAO + if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO")) + { + mCtrlUseSSAO->setEnabled(FALSE); + mCtrlUseSSAO->setValue(FALSE); + } + + // disabled deferred shadows + if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail")) + { + mCtrlShadowDetail->setEnabled(FALSE); + mCtrlShadowDetail->setValue(0); + } + + // disabled reflections + if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail")) + { + mCtrlReflectionDetail->setEnabled(FALSE); + mCtrlReflectionDetail->setValue(FALSE); + } + + // disabled av + if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP")) + { + //deferred needs AvatarVP, disable deferred + mCtrlShadowDetail->setEnabled(FALSE); + mCtrlShadowDetail->setValue(0); + + mCtrlUseSSAO->setEnabled(FALSE); + mCtrlUseSSAO->setValue(FALSE); + + mCtrlUseDoF->setEnabled(FALSE); + mCtrlUseDoF->setValue(FALSE); + + mCtrlDeferred->setEnabled(FALSE); + mCtrlDeferred->setValue(FALSE); + } } \ No newline at end of file diff --git a/indra/newview/quickprefs.h b/indra/newview/quickprefs.h index 1b170bae09..87375ac0fc 100644 --- a/indra/newview/quickprefs.h +++ b/indra/newview/quickprefs.h @@ -71,5 +71,9 @@ private: LLCheckBoxCtrl* mCtrlShaderEnable; LLCheckBoxCtrl* mCtrlWindLight; LLCheckBoxCtrl* mCtrlDeferred; + LLCheckBoxCtrl* mCtrlUseSSAO; + LLCheckBoxCtrl* mCtrlUseDoF; + LLComboBox* mCtrlShadowDetail; + LLComboBox* mCtrlReflectionDetail; }; #endif \ No newline at end of file