From 127dd659fa479a0b127938c54085f39beca9664a Mon Sep 17 00:00:00 2001 From: Shyotl Date: Sat, 21 May 2011 00:13:38 -0500 Subject: [PATCH] Updated graphical options panel to work with new setting configuration. --- indra/newview/llpaneldisplay.cpp | 81 ++++++++++++------- indra/newview/llpaneldisplay.h | 10 ++- indra/newview/llphysicsmotion.cpp | 5 +- .../xui/en-us/panel_preferences_graphics1.xml | 63 +++++++++++---- 4 files changed, 111 insertions(+), 48 deletions(-) diff --git a/indra/newview/llpaneldisplay.cpp b/indra/newview/llpaneldisplay.cpp index 4260e22b7..26b65f685 100644 --- a/indra/newview/llpaneldisplay.cpp +++ b/indra/newview/llpaneldisplay.cpp @@ -230,11 +230,10 @@ BOOL LLPanelDisplay::postBuild() //---------------------------------------------------------------------------- // Enable Reflections - mCtrlReflections = getChild("Reflections"); - mCtrlReflections->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); - mCtrlReflections->setCallbackUserData(this); mCtrlReflectionDetail = getChild("ReflectionDetailCombo"); - + mCtrlReflectionDetail->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); + mCtrlReflectionDetail->setCallbackUserData(this); + // WindLight mCtrlWindLight = getChild("WindLightUseAtmosShaders"); mCtrlWindLight->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); @@ -244,9 +243,12 @@ BOOL LLPanelDisplay::postBuild() mCtrlDeferred = getChild("RenderDeferred"); mCtrlDeferred->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); mCtrlDeferred->setCallbackUserData(this); - mCtrlSunShadow = getChild("RenderDeferredSunShadow"); - mCtrlSunShadow->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); - mCtrlSunShadow->setCallbackUserData(this); + mCtrlDeferredGI = getChild("RenderDeferredGI"); + mCtrlDeferredGI->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); + mCtrlDeferredGI->setCallbackUserData(this); + mCtrlShadowDetail = getChild("ShadowDetailCombo"); + mCtrlShadowDetail->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); + mCtrlShadowDetail->setCallbackUserData(this); //---------------------------------------------------------------------------- // Enable Avatar Shaders @@ -306,6 +308,12 @@ BOOL LLPanelDisplay::postBuild() mCtrlAvatarFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); mCtrlAvatarFactor->setCallbackUserData(mAvatarFactorText); + // Avatar physics detail slider + mCtrlAvatarPhysicsFactor = getChild("AvatarPhysicsDetail"); + mAvatarPhysicsFactorText = getChild("AvatarPhysicsDetailText"); + mCtrlAvatarPhysicsFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); + mCtrlAvatarPhysicsFactor->setCallbackUserData(mAvatarPhysicsFactorText); + // Terrain detail slider mCtrlTerrainFactor = getChild("TerrainMeshDetail"); mTerrainFactorText = getChild("TerrainMeshDetailText"); @@ -397,14 +405,15 @@ void LLPanelDisplay::refresh() mBumpShiny = gSavedSettings.getBOOL("RenderObjectBump"); mShaderEnable = gSavedSettings.getBOOL("VertexShaderEnable"); mWindLight = gSavedSettings.getBOOL("WindLightUseAtmosShaders"); - mReflections = gSavedSettings.getBOOL("RenderWaterReflections"); mAvatarVP = gSavedSettings.getBOOL("RenderAvatarVP"); mDeferred = gSavedSettings.getBOOL("RenderDeferred"); - mSunShadow = gSavedSettings.getBOOL("RenderDeferredSunShadow"); + mDeferredGI = gSavedSettings.getBOOL("RenderDeferredGI"); // reflection radio mReflectionDetail = gSavedSettings.getS32("RenderReflectionDetail"); + mShadowDetail = gSavedSettings.getS32("RenderShadowDetail"); + // avatar settings mAvatarImpostors = gSavedSettings.getBOOL("RenderUseImpostors"); mAvatarCloth = gSavedSettings.getBOOL("RenderAvatarCloth"); @@ -431,6 +440,7 @@ void LLPanelDisplay::refresh() updateSliderText(mCtrlFlexFactor, mFlexFactorText); updateSliderText(mCtrlTreeFactor, mTreeFactorText); updateSliderText(mCtrlAvatarFactor, mAvatarFactorText); + updateSliderText(mCtrlAvatarPhysicsFactor, mAvatarPhysicsFactorText); updateSliderText(mCtrlTerrainFactor, mTerrainFactorText); updateSliderText(mCtrlPostProcess, mPostProcessText); updateSliderText(mCtrlSkyFactor, mSkyFactorText); @@ -468,13 +478,11 @@ void LLPanelDisplay::refreshEnabledState() BOOL reflections = gSavedSettings.getBOOL("VertexShaderEnable") && gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps; - mCtrlReflections->setEnabled(reflections); + mCtrlReflectionDetail->setEnabled(reflections); // Bump & Shiny bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump"); mCtrlBumpShiny->setEnabled(bumpshiny ? TRUE : FALSE); - - mCtrlReflectionDetail->setEnabled(mCtrlReflections->get() && reflections); // Avatar Mode S32 max_avatar_shader = LLViewerShaderMgr::instance()->mMaxAvatarShaderLevel; @@ -501,8 +509,9 @@ void LLPanelDisplay::refreshEnabledState() 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. + mCtrlShadowDetail->setEnabled(can_defer && gSavedSettings.getBOOL("RenderDeferred")); + //GI won't do anything with shadows off, but disabling it here is less than intuitive. Ignore shadow setting for now. + mCtrlDeferredGI->setEnabled(mCtrlShadowDetail->getEnabled()/* && gSavedSettings.getS32("RenderShadowDetail") > 0*/); // Vertex Shaders // mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")); @@ -551,8 +560,8 @@ void LLPanelDisplay::disableUnavailableSettings() mCtrlWindLight->setEnabled(FALSE); mCtrlWindLight->setValue(FALSE); - mCtrlReflections->setEnabled(FALSE); - mCtrlReflections->setValue(FALSE); + mCtrlReflectionDetail->setEnabled(FALSE); + mCtrlReflectionDetail->setValue(FALSE); mCtrlAvatarVP->setEnabled(FALSE); mCtrlAvatarVP->setValue(FALSE); @@ -562,8 +571,10 @@ void LLPanelDisplay::disableUnavailableSettings() mCtrlDeferred->setEnabled(FALSE); mCtrlDeferred->setValue(FALSE); - mCtrlSunShadow->setEnabled(FALSE); - mCtrlSunShadow->setValue(FALSE); + mCtrlDeferredGI->setEnabled(FALSE); + mCtrlDeferredGI->setValue(FALSE); + mCtrlShadowDetail->setEnabled(FALSE); + mCtrlShadowDetail->setValue(FALSE); } // disabled windlight @@ -576,8 +587,8 @@ void LLPanelDisplay::disableUnavailableSettings() // disabled reflections if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderWaterReflections")) { - mCtrlReflections->setEnabled(FALSE); - mCtrlReflections->setValue(FALSE); + mCtrlReflectionDetail->setEnabled(FALSE); + mCtrlReflectionDetail->setValue(FALSE); } // disabled av @@ -606,8 +617,10 @@ void LLPanelDisplay::disableUnavailableSettings() { mCtrlDeferred->setEnabled(FALSE); mCtrlDeferred->setValue(FALSE); - mCtrlSunShadow->setEnabled(FALSE); - mCtrlSunShadow->setValue(FALSE); + mCtrlDeferredGI->setEnabled(FALSE); + mCtrlDeferredGI->setValue(FALSE); + mCtrlShadowDetail->setEnabled(FALSE); + mCtrlShadowDetail->setValue(FALSE); } } @@ -669,6 +682,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) mCtrlFlexFactor->setVisible(!isHidden); mCtrlTreeFactor->setVisible(!isHidden); mCtrlAvatarFactor->setVisible(!isHidden); + mCtrlAvatarPhysicsFactor->setVisible(!isHidden); mCtrlTerrainFactor->setVisible(!isHidden); mCtrlSkyFactor->setVisible(!isHidden); mCtrlMaxParticle->setVisible(!isHidden); @@ -678,12 +692,12 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) mFlexFactorText->setVisible(!isHidden); mTreeFactorText->setVisible(!isHidden); mAvatarFactorText->setVisible(!isHidden); + mAvatarPhysicsFactorText->setVisible(!isHidden); mTerrainFactorText->setVisible(!isHidden); mSkyFactorText->setVisible(!isHidden); mPostProcessText->setVisible(!isHidden); mCtrlBumpShiny->setVisible(!isHidden); - mCtrlReflections->setVisible(!isHidden); mCtrlWindLight->setVisible(!isHidden); mCtrlAvatarVP->setVisible(!isHidden); mCtrlShaderEnable->setVisible(!isHidden); @@ -695,7 +709,8 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) mCtrlReflectionDetail->setVisible(!isHidden); mCtrlDeferred->setVisible(!isHidden); - mCtrlSunShadow->setVisible(!isHidden); + mCtrlDeferredGI->setVisible(!isHidden); + mCtrlShadowDetail->setVisible(!isHidden); // text boxes mShaderText->setVisible(!isHidden); @@ -727,12 +742,13 @@ void LLPanelDisplay::cancel() gSavedSettings.setBOOL("RenderObjectBump", mBumpShiny); gSavedSettings.setBOOL("VertexShaderEnable", mShaderEnable); gSavedSettings.setBOOL("WindLightUseAtmosShaders", mWindLight); - gSavedSettings.setBOOL("RenderWaterReflections", mReflections); + gSavedSettings.setBOOL("RenderAvatarVP", mAvatarVP); gSavedSettings.setBOOL("RenderDeferred", mDeferred); - gSavedSettings.setBOOL("RenderDeferredSunShadow", mSunShadow); + gSavedSettings.setBOOL("RenderDeferredGI", mDeferredGI); gSavedSettings.setS32("RenderReflectionDetail", mReflectionDetail); + gSavedSettings.setS32("RenderShadowDetail", mShadowDetail); gSavedSettings.setBOOL("RenderUseImpostors", mAvatarImpostors); gSavedSettings.setBOOL("RenderAvatarCloth", mAvatarCloth); @@ -989,6 +1005,13 @@ void LLPanelDisplay::updateSliderText(LLUICtrl* ctrl, void* user_data) return; } + //Hack to display 'Off' for avatar physics slider. + if(slider->getName() == "AvatarPhysicsDetail" && !slider->getValueF32()) + { + text_box->setText(std::string("Off")); + return; + } + // get range and points when text should change F32 range = slider->getMaxValue() - slider->getMinValue(); llassert(range > 0); @@ -1004,10 +1027,14 @@ void LLPanelDisplay::updateSliderText(LLUICtrl* ctrl, void* user_data) { text_box->setText(std::string("Mid")); } - else + else if(slider->getValueF32() < slider->getMaxValue()) { text_box->setText(std::string("High")); } + else + { + text_box->setText(std::string("Max")); + } } void LLPanelDisplay::updateMeterText(LLUICtrl* ctrl, void* user_data) diff --git a/indra/newview/llpaneldisplay.h b/indra/newview/llpaneldisplay.h index 677f1086c..4938ec0f5 100644 --- a/indra/newview/llpaneldisplay.h +++ b/indra/newview/llpaneldisplay.h @@ -101,18 +101,19 @@ protected: LLSliderCtrl *mCtrlFlexFactor; // Timeslice for flexible objects LLSliderCtrl *mCtrlTreeFactor; // Control tree cutoff distance LLSliderCtrl *mCtrlAvatarFactor; // LOD for avatars + LLSliderCtrl *mCtrlAvatarPhysicsFactor; // Physics LOD for avatars LLSliderCtrl *mCtrlTerrainFactor; // LOD for terrain LLSliderCtrl *mCtrlSkyFactor; // LOD for terrain LLSliderCtrl *mCtrlMaxParticle; // Max Particle LLSliderCtrl *mCtrlPostProcess; // Max Particle LLCheckBoxCtrl *mCtrlBumpShiny; - LLCheckBoxCtrl *mCtrlReflections; LLCheckBoxCtrl *mCtrlWindLight; LLCheckBoxCtrl *mCtrlAvatarVP; LLCheckBoxCtrl *mCtrlShaderEnable; LLCheckBoxCtrl *mCtrlDeferred; - LLCheckBoxCtrl *mCtrlSunShadow; + LLCheckBoxCtrl *mCtrlDeferredGI; + LLComboBox *mCtrlShadowDetail; LLCheckBoxCtrl *mCtrlAvatarImpostors; LLCheckBoxCtrl *mCtrlAvatarCloth; LLRadioGroup *mRadioLightingDetail2; @@ -136,6 +137,7 @@ protected: LLTextBox *mFlexFactorText; LLTextBox *mTreeFactorText; LLTextBox *mAvatarFactorText; + LLTextBox *mAvatarPhysicsFactorText; LLTextBox *mTerrainFactorText; LLTextBox *mSkyFactorText; LLTextBox *mPostProcessText; @@ -151,12 +153,12 @@ protected: BOOL mBumpShiny; BOOL mShaderEnable; BOOL mWindLight; - BOOL mReflections; BOOL mDeferred; - BOOL mSunShadow; + BOOL mDeferredGI; BOOL mAvatarVP; S32 mReflectionDetail; + S32 mShadowDetail; BOOL mAvatarImpostors; BOOL mAvatarCloth; diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index d69ebd0b2..581043951 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -496,7 +496,9 @@ BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask) { // Skip if disabled globally. static const LLCachedControl avatar_physics("AvatarPhysics",false); - if (!avatar_physics || (!((LLVOAvatar*)mCharacter)->isSelf() && !((LLVOAvatar*)mCharacter)->mSupportsPhysics)) + bool supports_physics = !avatar_physics || (!((LLVOAvatar*)mCharacter)->isSelf() && !((LLVOAvatar*)mCharacter)->mSupportsPhysics); + //Treat lod 0 as AvatarPhyiscs:FALSE. AvatarPhyiscs setting is superfluous unless we decide to hook it into param sending. + if (supports_physics || !LLVOAvatar::sPhysicsLODFactor) { if(!mIsDefault) { @@ -507,6 +509,7 @@ BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask) } mCharacter->updateVisualParams(); } + if(!supports_physics) //Only use emerald physics if avatarphysiscs is really off, or the client doesn't seem to support new physics. ((LLVOAvatar*)mCharacter)->idleUpdateBoobEffect(); //Fall back to emerald physics return TRUE; } diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml index 08a5e8a5e..c49092d80 100644 --- a/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml @@ -191,37 +191,35 @@ initial_value="true" label="Deferred Shading" left_delta="0" mouse_opaque="true" name="RenderDeferred" radio_style="false" width="256" /> - - - Reflection Detail: + Water Reflections: - + + Disabled + + Terrain and Trees - + All Static Objects - + All Avatars and Objects - + Everything - + + + Deferred Shadows: + + + + Disabled + + + Sun shadows + + + Sun and spotlight shadows + + + + Low + + Off + @@ -398,7 +429,7 @@ Terrain Detail: