From 931ac307f4bab7958817557e8ce951dfa3daa380 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Mon, 6 Sep 2010 17:34:47 -0700 Subject: Added slider to control the number of avatar imposters (can't think of a better label) --- linden/indra/newview/llpaneldisplay.cpp | 29 +++++++++++++++++++++- linden/indra/newview/llpaneldisplay.h | 5 ++++ .../xui/en-us/panel_preferences_graphics1.xml | 23 ++++++++++++----- 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp index cbf6052..b2313f6 100644 --- a/linden/indra/newview/llpaneldisplay.cpp +++ b/linden/indra/newview/llpaneldisplay.cpp @@ -242,6 +242,8 @@ BOOL LLPanelDisplay::postBuild() // Avatar Render Mode mCtrlAvatarCloth = getChild("AvatarCloth"); mCtrlAvatarImpostors = getChild("AvatarImpostors"); + mCtrlAvatarImpostors->setCommitCallback(&LLPanelDisplay::onImpostorsEnable); + mCtrlAvatarImpostors->setCallbackUserData(this); //---------------------------------------------------------------------------- // radio set for lighting detail @@ -311,6 +313,10 @@ BOOL LLPanelDisplay::postBuild() mCtrlPostProcess->setCommitCallback(&LLPanelDisplay::updateSliderText); mCtrlPostProcess->setCallbackUserData(mPostProcessText); + // Avatar imposter count + mCtrlAvatarMaxVisible = getChild("AvatarMaxVisible"); + mAvatarCountText = getChild("AvatarCountText"); + // Text boxes (for enabling/disabling) mShaderText = getChild("ShadersText"); mReflectionText = getChild("ReflectionDetailText"); @@ -411,8 +417,12 @@ void LLPanelDisplay::refresh() mLightingDetail = gSavedSettings.getS32("RenderLightingDetail"); mTerrainDetail = gSavedSettings.getS32("RenderTerrainDetail"); + // windlight remote mWLControl = gSavedSettings.getBOOL("EnableWindlightRemote"); + // max avatar count + mAvatarMaxVisible = gSavedSettings.getS32("RenderAvatarMaxVisible"); + // slider text boxes updateSliderText(mCtrlLODFactor, mLODFactorText); updateSliderText(mCtrlFlexFactor, mFlexFactorText); @@ -572,6 +582,9 @@ void LLPanelDisplay::disableUnavailableSettings() mCtrlAvatarImpostors->setEnabled(FALSE); mCtrlAvatarImpostors->setValue(FALSE); } + + mCtrlAvatarMaxVisible->setEnabled(mCtrlAvatarImpostors->getValue().asBoolean()); + mAvatarCountText->setEnabled(mCtrlAvatarImpostors->getValue().asBoolean()); } void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) @@ -587,6 +600,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) llassert(mCtrlTerrainFactor != NULL); llassert(mCtrlSkyFactor != NULL); llassert(mCtrlMaxParticle != NULL); + llassert(mCtrlAvatarMaxVisible != NULL); llassert(mCtrlPostProcess != NULL); llassert(mLODFactorText != NULL); @@ -617,6 +631,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) llassert(mTerrainText != NULL); llassert(mDrawDistanceMeterText1 != NULL); llassert(mDrawDistanceMeterText2 != NULL); + llassert(mAvatarCountText != NULL); // enable/disable the states mGraphicsBorder->setVisible(!isHidden); @@ -664,6 +679,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) mTerrainText->setVisible(!isHidden); mDrawDistanceMeterText1->setVisible(!isHidden); mDrawDistanceMeterText2->setVisible(!isHidden); + mAvatarCountText->setVisible(!isHidden); // hide one meter text if we're making things visible if(!isHidden) @@ -672,6 +688,8 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) } mMeshDetailText->setVisible(!isHidden); + + mCtrlAvatarMaxVisible->setVisible(!isHidden); } void LLPanelDisplay::cancel() @@ -708,6 +726,8 @@ void LLPanelDisplay::cancel() gSavedSettings.setS32("RenderGlowResolutionPow", mPostProcess); gSavedSettings.setBOOL("EnableWindlightRemote", mWLControl); + + gSavedSettings.setS32("RenderAvatarMaxVisible", mAvatarMaxVisible); } void LLPanelDisplay::apply() @@ -987,5 +1007,12 @@ void LLPanelDisplay::updateMeterText(LLUICtrl* ctrl, void* user_data) m2->setVisible(!two_digits); } +// static +void LLPanelDisplay::onImpostorsEnable(LLUICtrl* ctrl, void* user_data) +{ + LLPanelDisplay* self = (LLPanelDisplay*)user_data; + LLCheckBoxCtrl* checkbox = (LLCheckBoxCtrl*)ctrl; - + self->mCtrlAvatarMaxVisible->setEnabled(checkbox->getValue().asBoolean()); + self->mAvatarCountText->setEnabled(checkbox->getValue().asBoolean()); +} diff --git a/linden/indra/newview/llpaneldisplay.h b/linden/indra/newview/llpaneldisplay.h index 1cbdbba..e92cd2f 100644 --- a/linden/indra/newview/llpaneldisplay.h +++ b/linden/indra/newview/llpaneldisplay.h @@ -104,6 +104,7 @@ protected: LLSliderCtrl *mCtrlSkyFactor; // LOD for terrain LLSliderCtrl *mCtrlMaxParticle; // Max Particle LLSliderCtrl *mCtrlPostProcess; // Max Particle + LLSliderCtrl *mCtrlAvatarMaxVisible; // Max avatars visible LLCheckBoxCtrl *mCtrlBumpShiny; LLCheckBoxCtrl *mCtrlReflections; @@ -138,6 +139,7 @@ protected: LLTextBox *mTerrainFactorText; LLTextBox *mSkyFactorText; LLTextBox *mPostProcessText; + LLTextBox *mAvatarCountText; BOOL mFSAutoDetectAspect; F32 mAspectRatio; @@ -171,6 +173,8 @@ protected: S32 mParticleCount; S32 mPostProcess; + S32 mAvatarMaxVisible; + BOOL mWLControl; static void setGraphicsSettings(LLControlGroup& group); @@ -191,6 +195,7 @@ protected: static void onApplyResolution(LLUICtrl* ctrl, void* data); static void updateSliderText(LLUICtrl* ctrl, void* user_data); static void updateMeterText(LLUICtrl* ctrl, void* user_data); + static void onImpostorsEnable(LLUICtrl* ctrl, void* user_data); /// callback for defaults static void setHardwareDefaults(void *data); diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml index 55af056..153a111 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml @@ -162,8 +162,8 @@ follows="left|top" font="SansSerifSmall" height="16" initial_value="true" label="Custom" left="385" mouse_opaque="true" name="CustomSettings" radio_style="false" width="256" /> - + + + Max. non-imposters: + + -