[Preferences Refactor] Further cleanup

Moves to visibility_control and enabled_control instead of using callbacks, this lightens the load on opening preferences, and makes them responsive even to debug settings changes
Removes the moving m for meter text with draw distance, I don't think anyone cares if it's a little to the side of the number.
Adjustment of tabs to spaces in xml.
Return early when disabling unavailable settings if shaders are unavailable.
Cuts back on single-call functions in favor of direct binds.
This commit is contained in:
Inusaito Sayori
2014-06-02 23:20:30 -04:00
parent 95106ca1c2
commit 3c6c7c4138
3 changed files with 181 additions and 444 deletions

View File

@@ -102,10 +102,12 @@ LLPanelDisplay::LLPanelDisplay()
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_graphics1.xml");
}
void updateSliderText(LLSliderCtrl* slider, LLTextBox* text_box);
BOOL LLPanelDisplay::postBuild()
{
// return to default values
getChild<LLButton>("Defaults")->setClickedCallback(boost::bind(&LLPanelDisplay::setHardwareDefaults));
getChild<LLButton>("Defaults")->setClickedCallback(boost::bind(&LLPanelDisplay::setHardwareDefaults, this));
//============================================================================
// Resolution
@@ -190,16 +192,16 @@ BOOL LLPanelDisplay::postBuild()
aspect_ratio_text = llformat("%.3f", mAspectRatio);
}
mCtrlAutoDetectAspect = getChild<LLCheckBoxCtrl>( "aspect_auto_detect");
mCtrlAutoDetectAspect->setCommitCallback(boost::bind(&LLPanelDisplay::onCommitAutoDetectAspect,this,_2));
mCtrlAspectRatio = getChild<LLComboBox>( "aspect_ratio");
mCtrlAspectRatio->setTextEntryCallback(boost::bind(&LLPanelDisplay::onKeystrokeAspectRatio,this));
mCtrlAspectRatio->setCommitCallback(boost::bind(&LLPanelDisplay::onSelectAspectRatio,this));
mCtrlAspectRatio->setTextEntryCallback(boost::bind(&LLUICtrl::setValue, mCtrlAutoDetectAspect, false));
mCtrlAspectRatio->setCommitCallback(boost::bind(&LLUICtrl::setValue, mCtrlAutoDetectAspect, false));
// add default aspect ratios
mCtrlAspectRatio->add(aspect_ratio_text, &mAspectRatio, ADD_TOP);
mCtrlAspectRatio->setCurrentByIndex(0);
mCtrlAutoDetectAspect = getChild<LLCheckBoxCtrl>( "aspect_auto_detect");
mCtrlAutoDetectAspect->setCommitCallback(boost::bind(&LLPanelDisplay::onCommitAutoDetectAspect,this,_2));
// radio performance box
mCtrlSliderQuality = getChild<LLSliderCtrl>("QualityPerformanceSelection");
mCtrlSliderQuality->setSliderMouseUpCallback(boost::bind(&LLPanelDisplay::onChangeQuality,this,_1));
@@ -207,11 +209,6 @@ BOOL LLPanelDisplay::postBuild()
mCtrlCustomSettings = getChild<LLCheckBoxCtrl>("CustomSettings");
mCtrlCustomSettings->setCommitCallback(boost::bind(&LLPanelDisplay::onChangeCustom));
//mGraphicsBorder = getChild<LLViewBorder>("GraphicsBorder");
// Enable Transparent Water
mCtrlTransparentWater = getChild<LLCheckBoxCtrl>("TransparentWater");
//----------------------------------------------------------------------------
// Enable Bump/Shiny
mCtrlBumpShiny = getChild<LLCheckBoxCtrl>("BumpShiny");
@@ -247,11 +244,6 @@ BOOL LLPanelDisplay::postBuild()
mCtrlAvatarCloth = getChild<LLCheckBoxCtrl>("AvatarCloth");
mCtrlAvatarImpostors = getChild<LLCheckBoxCtrl>("AvatarImpostors");
mCtrlAvatarImpostors->setCommitCallback(boost::bind(&LLPanelDisplay::onVertexShaderEnable));
mCtrlNonImpostors = getChild<LLSliderCtrl>("AvatarMaxVisible");
//----------------------------------------------------------------------------
// Checkbox for lighting detail
mCtrlLightingDetail2 = getChild<LLCheckBoxCtrl>("LightingDetailRadio");
//----------------------------------------------------------------------------
// Checkbox for ambient occlusion
@@ -269,69 +261,59 @@ BOOL LLPanelDisplay::postBuild()
//============================================================================
// Object detail slider
mCtrlDrawDistance = getChild<LLSliderCtrl>("DrawDistance");
mDrawDistanceMeterText1 = getChild<LLTextBox>("DrawDistanceMeterText1");
mDrawDistanceMeterText2 = getChild<LLTextBox>("DrawDistanceMeterText2");
mCtrlDrawDistance->setCommitCallback(boost::bind(&LLPanelDisplay::updateMeterText, this));
// Object detail slider
mCtrlLODFactor = getChild<LLSliderCtrl>("ObjectMeshDetail");
mLODFactorText = getChild<LLTextBox>("ObjectMeshDetailText");
mCtrlLODFactor->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText, _1,mLODFactorText));
LLSliderCtrl* ctrl_slider = getChild<LLSliderCtrl>("ObjectMeshDetail");
LLTextBox* slider_text = getChild<LLTextBox>("ObjectMeshDetailText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Flex object detail slider
mCtrlFlexFactor = getChild<LLSliderCtrl>("FlexibleMeshDetail");
mFlexFactorText = getChild<LLTextBox>("FlexibleMeshDetailText");
mCtrlFlexFactor->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText,_1, mFlexFactorText));
ctrl_slider = getChild<LLSliderCtrl>("FlexibleMeshDetail");
slider_text = getChild<LLTextBox>("FlexibleMeshDetailText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Tree detail slider
mCtrlTreeFactor = getChild<LLSliderCtrl>("TreeMeshDetail");
mTreeFactorText = getChild<LLTextBox>("TreeMeshDetailText");
mCtrlTreeFactor->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText, _1, mTreeFactorText));
ctrl_slider = getChild<LLSliderCtrl>("TreeMeshDetail");
slider_text = getChild<LLTextBox>("TreeMeshDetailText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Avatar detail slider
mCtrlAvatarFactor = getChild<LLSliderCtrl>("AvatarMeshDetail");
mAvatarFactorText = getChild<LLTextBox>("AvatarMeshDetailText");
mCtrlAvatarFactor->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText, _1, mAvatarFactorText));
ctrl_slider = getChild<LLSliderCtrl>("AvatarMeshDetail");
slider_text = getChild<LLTextBox>("AvatarMeshDetailText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Avatar physics detail slider
mCtrlAvatarPhysicsFactor = getChild<LLSliderCtrl>("AvatarPhysicsDetail");
mAvatarPhysicsFactorText = getChild<LLTextBox>("AvatarPhysicsDetailText");
mCtrlAvatarPhysicsFactor->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText, _1, mAvatarPhysicsFactorText));
ctrl_slider = getChild<LLSliderCtrl>("AvatarPhysicsDetail");
slider_text = getChild<LLTextBox>("AvatarPhysicsDetailText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Terrain detail slider
mCtrlTerrainFactor = getChild<LLSliderCtrl>("TerrainMeshDetail");
mTerrainFactorText = getChild<LLTextBox>("TerrainMeshDetailText");
mCtrlTerrainFactor->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText, _1, mTerrainFactorText));
ctrl_slider = getChild<LLSliderCtrl>("TerrainMeshDetail");
slider_text = getChild<LLTextBox>("TerrainMeshDetailText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Terrain detail slider
mCtrlSkyFactor = getChild<LLSliderCtrl>("SkyMeshDetail");
mSkyFactorText = getChild<LLTextBox>("SkyMeshDetailText");
mCtrlSkyFactor->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText, _1, mSkyFactorText));
// Particle detail slider
mCtrlMaxParticle = getChild<LLSliderCtrl>("MaxParticleCount");
ctrl_slider = getChild<LLSliderCtrl>("SkyMeshDetail");
slider_text = getChild<LLTextBox>("SkyMeshDetailText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Glow detail slider
mCtrlPostProcess = getChild<LLSliderCtrl>("RenderPostProcess");
mPostProcessText = getChild<LLTextBox>("PostProcessText");
mCtrlPostProcess->setCommitCallback(boost::bind(&LLPanelDisplay::updateSliderText, _1, mPostProcessText));
ctrl_slider = getChild<LLSliderCtrl>("RenderPostProcess");
slider_text = getChild<LLTextBox>("PostProcessText");
ctrl_slider->setCommitCallback(boost::bind(updateSliderText, ctrl_slider, slider_text));
updateSliderText(ctrl_slider, slider_text);
// Text boxes (for enabling/disabling)
mShaderText = getChild<LLTextBox>("ShadersText");
mReflectionText = getChild<LLTextBox>("ReflectionDetailText");
mAvatarText = getChild<LLTextBox>("AvatarRenderingText");
mTerrainText = getChild<LLTextBox>("TerrainDetailText");
mMeshDetailText = getChild<LLTextBox>("MeshDetailText");
mShadowDetailText = getChild<LLTextBox>("ShadowDetailText");
mTerrainScaleText = getChild<LLTextBox>("TerrainScaleText");
// Hardware tab
mVBO = getChild<LLCheckBoxCtrl>("vbo");
mVBO->setCommitCallback(boost::bind(&LLPanelDisplay::onVertexShaderEnable));
mVBOStream = getChild<LLCheckBoxCtrl>("vbo_stream");
if(gGLManager.mIsATI) //AMD gpus don't go beyond 8x fsaa.
{
LLComboBox* fsaa = getChild<LLComboBox>("fsaa");
@@ -397,16 +379,6 @@ void LLPanelDisplay::refresh()
mLocalLights = gSavedSettings.getBOOL("RenderLocalLights");
mTerrainDetail = gSavedSettings.getS32("RenderTerrainDetail");
// slider text boxes
updateSliderText(mCtrlLODFactor, mLODFactorText);
updateSliderText(mCtrlFlexFactor, mFlexFactorText);
updateSliderText(mCtrlTreeFactor, mTreeFactorText);
updateSliderText(mCtrlAvatarFactor, mAvatarFactorText);
updateSliderText(mCtrlAvatarPhysicsFactor, mAvatarPhysicsFactorText);
updateSliderText(mCtrlTerrainFactor, mTerrainFactorText);
updateSliderText(mCtrlPostProcess, mPostProcessText);
updateSliderText(mCtrlSkyFactor, mSkyFactorText);
// Hardware tab
mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable");
mUseFBO = gSavedSettings.getBOOL("RenderUseFBO");
@@ -442,12 +414,7 @@ void LLPanelDisplay::refreshEnabledState()
!gGLManager.mHasVertexBufferObject)
{
mVBO->setEnabled(false);
//Streaming VBOs -Shyotl
mVBOStream->setEnabled(false);
}
else
{
mVBOStream->setEnabled(gSavedSettings.getBOOL("RenderVBOEnable"));
mVBO->setValue(false);
}
static LLCachedControl<bool> wlatmos("WindLightUseAtmosShaders",false);
@@ -457,17 +424,7 @@ void LLPanelDisplay::refreshEnabledState()
getChildView("note")->setVisible(wlatmos);
// disable graphics settings and exit if it's not set to custom
if(!gSavedSettings.getBOOL("RenderCustomSettings"))
{
setHiddenGraphicsState(true);
return;
}
// otherwise turn them all on and selectively turn off others
else
{
setHiddenGraphicsState(false);
}
if (!gSavedSettings.getBOOL("RenderCustomSettings")) return;
// Reflections
BOOL reflections = gSavedSettings.getBOOL("VertexShaderEnable")
@@ -477,17 +434,9 @@ void LLPanelDisplay::refreshEnabledState()
// Bump & Shiny
bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump");
mCtrlBumpShiny->setEnabled(bumpshiny ? TRUE : FALSE);
mCtrlBumpShiny->setEnabled(bumpshiny);
if (gSavedSettings.getBOOL("VertexShaderEnable") == FALSE ||
gSavedSettings.getBOOL("RenderAvatarVP") == FALSE)
{
mCtrlAvatarCloth->setEnabled(false);
}
else
{
mCtrlAvatarCloth->setEnabled(true);
}
mCtrlAvatarCloth->setEnabled(gSavedSettings.getBOOL("VertexShaderEnable") && gSavedSettings.getBOOL("RenderAvatarVP"));
//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
@@ -505,9 +454,6 @@ void LLPanelDisplay::refreshEnabledState()
mCtrlAmbientOcc->setEnabled(can_defer && render_deferred);
mCtrlDeferredDoF->setEnabled(can_defer && render_deferred);
// Disable max non-impostors slider if avatar impostors are off
mCtrlNonImpostors->setEnabled(gSavedSettings.getBOOL("RenderUseImpostors"));
// Vertex Shaders
// mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"));
// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0a
@@ -536,39 +482,43 @@ void LLPanelDisplay::refreshEnabledState()
mCtrlWindLight->setEnabled(fCtrlWindLightEnable && (!gRlvHandler.hasBehaviour(RLV_BHVR_SETENV) || !mWindLight));
// [/RLVa:KB]
// turn off sky detail if atmospherics isn't on
mCtrlSkyFactor->setEnabled(wlatmos);
mSkyFactorText->setEnabled(wlatmos);
// Avatar Mode and FBO
if (render_deferred && wlatmos && shaders)
{
childSetEnabled("fbo", false);
childSetValue("fbo", true);
getChildView("fbo")->setEnabled(false);
getChildView("fbo")->setValue(true);
mCtrlAvatarVP->setEnabled(false);
gSavedSettings.setBOOL("RenderAvatarVP", true);
}
else if (!shaders)
{
childSetEnabled("fbo", gGLManager.mHasFramebufferObject);
mCtrlAvatarVP->setEnabled(false);
gSavedSettings.setBOOL("RenderAvatarVP", false);
}
else
{
childSetEnabled("fbo", gGLManager.mHasFramebufferObject);
mCtrlAvatarVP->setEnabled(true);
getChildView("fbo")->setEnabled(gGLManager.mHasFramebufferObject);
mCtrlAvatarVP->setEnabled(shaders);
if (!shaders) gSavedSettings.setBOOL("RenderAvatarVP", false);
}
// now turn off any features that are unavailable
disableUnavailableSettings();
}
void LLPanelDisplay::disableUnavailableSettings()
{
// disabled terrain scale
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderTerrainScale"))
{
mCtrlTerrainScale->setEnabled(false);
mCtrlTerrainScale->setValue(false);
}
// disabled impostors
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
{
mCtrlAvatarImpostors->setEnabled(false);
mCtrlAvatarImpostors->setValue(false);
}
// if vertex shaders off, disable all shader related products
if(!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
// Singu Note: Returns early this, place all unrelated checks above now.
if (!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
{
mCtrlShaderEnable->setEnabled(FALSE);
mCtrlShaderEnable->setValue(FALSE);
@@ -593,6 +543,7 @@ void LLPanelDisplay::disableUnavailableSettings()
mCtrlDeferredDoF->setValue(FALSE);
mCtrlShadowDetail->setEnabled(FALSE);
mCtrlShadowDetail->setValue(FALSE);
return;
}
// disabled windlight
@@ -609,13 +560,6 @@ void LLPanelDisplay::disableUnavailableSettings()
mCtrlReflectionDetail->setValue(FALSE);
}
// disabled terrain scale
if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderTerrainScale"))
{
mCtrlTerrainScale->setEnabled(false);
mCtrlTerrainScale->setValue(false);
}
// disabled av
if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"))
{
@@ -626,18 +570,11 @@ void LLPanelDisplay::disableUnavailableSettings()
mCtrlAvatarCloth->setValue(FALSE);
}
// disabled cloth
if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
else if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
{
mCtrlAvatarCloth->setEnabled(FALSE);
mCtrlAvatarCloth->setValue(FALSE);
}
// disabled impostors
if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
{
mCtrlAvatarImpostors->setEnabled(FALSE);
mCtrlAvatarImpostors->setValue(FALSE);
mCtrlNonImpostors->setEnabled(FALSE);
}
// disabled deferred
if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred"))
{
@@ -653,119 +590,6 @@ void LLPanelDisplay::disableUnavailableSettings()
}
void LLPanelDisplay::setHiddenGraphicsState(bool isHidden)
{
// quick check
//llassert(mGraphicsBorder != NULL);
llassert(mCtrlDrawDistance != NULL);
llassert(mCtrlLODFactor != NULL);
llassert(mCtrlFlexFactor != NULL);
llassert(mCtrlTreeFactor != NULL);
llassert(mCtrlAvatarFactor != NULL);
llassert(mCtrlTerrainFactor != NULL);
llassert(mCtrlSkyFactor != NULL);
llassert(mCtrlMaxParticle != NULL);
llassert(mCtrlPostProcess != NULL);
llassert(mLODFactorText != NULL);
llassert(mFlexFactorText != NULL);
llassert(mTreeFactorText != NULL);
llassert(mAvatarFactorText != NULL);
llassert(mTerrainFactorText != NULL);
llassert(mSkyFactorText != NULL);
llassert(mPostProcessText != NULL);
llassert(mCtrlTransparentWater != NULL);
llassert(mCtrlBumpShiny != NULL);
llassert(mCtrlWindLight != NULL);
llassert(mCtrlAvatarVP != NULL);
llassert(mCtrlShaderEnable != NULL);
llassert(mCtrlAvatarImpostors != NULL);
llassert(mCtrlNonImpostors != NULL);
llassert(mCtrlAvatarCloth != NULL);
llassert(mCtrlLightingDetail2 != NULL);
llassert(mCtrlAmbientOcc != NULL);
llassert(mRadioTerrainDetail != NULL);
llassert(mCtrlReflectionDetail != NULL);
llassert(mCtrlTerrainScale != NULL);
llassert(mMeshDetailText != NULL);
llassert(mShaderText != NULL);
llassert(mReflectionText != NULL);
llassert(mTerrainScaleText != NULL);
llassert(mAvatarText != NULL);
llassert(mTerrainText != NULL);
llassert(mDrawDistanceMeterText1 != NULL);
llassert(mDrawDistanceMeterText2 != NULL);
// enable/disable the states
//mGraphicsBorder->setVisible(!isHidden);
/*
LLColor4 light(.45098f, .51765f, .6078f, 1.0f);
LLColor4 dark(.10196f, .10196f, .10196f, 1.0f);
b ? mGraphicsBorder->setColors(dark, light) : mGraphicsBorder->setColors(dark, dark);
*/
mCtrlDrawDistance->setVisible(!isHidden);
mCtrlLODFactor->setVisible(!isHidden);
mCtrlFlexFactor->setVisible(!isHidden);
mCtrlTreeFactor->setVisible(!isHidden);
mCtrlAvatarFactor->setVisible(!isHidden);
mCtrlAvatarPhysicsFactor->setVisible(!isHidden);
mCtrlTerrainFactor->setVisible(!isHidden);
mCtrlSkyFactor->setVisible(!isHidden);
mCtrlMaxParticle->setVisible(!isHidden);
mCtrlPostProcess->setVisible(!isHidden);
mLODFactorText->setVisible(!isHidden);
mFlexFactorText->setVisible(!isHidden);
mTreeFactorText->setVisible(!isHidden);
mAvatarFactorText->setVisible(!isHidden);
mAvatarPhysicsFactorText->setVisible(!isHidden);
mTerrainFactorText->setVisible(!isHidden);
mSkyFactorText->setVisible(!isHidden);
mPostProcessText->setVisible(!isHidden);
mCtrlTransparentWater->setVisible(!isHidden);
mCtrlBumpShiny->setVisible(!isHidden);
mCtrlWindLight->setVisible(!isHidden);
mCtrlAvatarVP->setVisible(!isHidden);
mCtrlShaderEnable->setVisible(!isHidden);
mCtrlAvatarImpostors->setVisible(!isHidden);
mCtrlNonImpostors->setVisible(!isHidden);
mCtrlAvatarCloth->setVisible(!isHidden);
mCtrlLightingDetail2->setVisible(!isHidden);
mCtrlAmbientOcc->setVisible(!isHidden);
mRadioTerrainDetail->setVisible(!isHidden);
mCtrlReflectionDetail->setVisible(!isHidden);
mCtrlTerrainScale->setVisible(!isHidden);
mCtrlDeferred->setVisible(!isHidden);
mCtrlDeferredDoF->setVisible(!isHidden);
mCtrlShadowDetail->setVisible(!isHidden);
// text boxes
mShaderText->setVisible(!isHidden);
mReflectionText->setVisible(!isHidden);
mAvatarText->setVisible(!isHidden);
mTerrainText->setVisible(!isHidden);
mDrawDistanceMeterText1->setVisible(!isHidden);
mDrawDistanceMeterText2->setVisible(!isHidden);
mShadowDetailText->setVisible(!isHidden);
mTerrainScaleText->setVisible(!isHidden);
// hide one meter text if we're making things visible
if(!isHidden)
{
updateMeterText();
}
mMeshDetailText->setVisible(!isHidden);
}
void LLPanelDisplay::cancel()
{
gSavedSettings.setBOOL("FullScreenAutoDetectAspectRatio", mFSAutoDetectAspect);
@@ -860,19 +684,10 @@ void LLPanelDisplay::apply()
}
}
void LLPanelDisplay::onChangeQuality(LLUICtrl* caller)
void LLPanelDisplay::onChangeQuality(LLUICtrl* ctrl)
{
LLSlider* sldr = dynamic_cast<LLSlider*>(caller);
if(sldr == NULL)
{
return;
}
U32 set = (U32)sldr->getValueF32();
LLFeatureManager::getInstance()->setGraphicsLevel(set, true);
LLFloaterPreference::refreshEnabledGraphics();
LLFeatureManager::getInstance()->setGraphicsLevel(ctrl->getValue(), true);
refresh();
}
@@ -979,16 +794,6 @@ void LLPanelDisplay::onCommitAutoDetectAspect(const LLSD& value)
}
}
void LLPanelDisplay::onKeystrokeAspectRatio()
{
mCtrlAutoDetectAspect->set(FALSE);
}
void LLPanelDisplay::onSelectAspectRatio()
{
mCtrlAutoDetectAspect->set(FALSE);
}
//static
void LLPanelDisplay::fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator)
{
@@ -1010,51 +815,38 @@ void LLPanelDisplay::onVertexShaderEnable()
LLFloaterPreference::refreshEnabledGraphics();
}
//static
void LLPanelDisplay::setHardwareDefaults()
{
LLFeatureManager::getInstance()->applyRecommendedSettings();
LLControlVariable* controlp = gSavedSettings.getControl("RenderAvatarMaxVisible");
if (controlp)
if (LLControlVariable* controlp = gSavedSettings.getControl("RenderAvatarMaxVisible"))
{
controlp->resetToDefault(true);
}
LLFloaterPreference::refreshEnabledGraphics();
}
//static
void LLPanelDisplay::updateSliderText(LLUICtrl* ctrl, LLTextBox* text_box)
void updateSliderText(LLSliderCtrl* slider, LLTextBox* text_box)
{
// get our UI widgets
LLSliderCtrl* slider = dynamic_cast<LLSliderCtrl*>(ctrl);
if(text_box == NULL || slider == NULL)
{
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);
F32 midPoint = slider->getMinValue() + range / 3.0f;
F32 highPoint = slider->getMinValue() + (2.0f * range / 3.0f);
const F32 value = slider->getValue().asFloat();
const F32 min_val = slider->getMinValue();
const F32 max_val = slider->getMaxValue();
const F32 range = (max_val - min_val)/3.f;
// choose the right text
if(slider->getValueF32() < midPoint)
if (value < min_val + range)
{
text_box->setText(std::string("Low"));
//Hack to display 'Off' for avatar physics slider.
if (!value && slider->getName() == "AvatarPhysicsDetail")
text_box->setText(std::string("Off"));
else
text_box->setText(std::string("Low"));
}
else if (slider->getValueF32() < highPoint)
else if (value < min_val + 2.0f * range)
{
text_box->setText(std::string("Mid"));
}
else if(slider->getValueF32() < slider->getMaxValue())
else if (value < max_val)
{
text_box->setText(std::string("High"));
}
@@ -1064,14 +856,3 @@ void LLPanelDisplay::updateSliderText(LLUICtrl* ctrl, LLTextBox* text_box)
}
}
void LLPanelDisplay::updateMeterText()
{
// toggle the two text boxes based on whether we have 2 or 3 digits
F32 val = mCtrlDrawDistance->getValueF32();
bool two_digits = val < 100;
mDrawDistanceMeterText1->setVisible(two_digits);
mDrawDistanceMeterText2->setVisible(!two_digits);
}

View File

@@ -70,14 +70,11 @@ public:
void refresh(); // Refresh enable/disable
void refreshEnabledState();
void disableUnavailableSettings();
void setHiddenGraphicsState(bool isHidden);
void apply(); // Apply the changed values.
void applyResolution();
void cancel();
protected:
void initWindowSizeControls();
bool extractWindowSizeFromString(const std::string& instr, U32 &width, U32 &height);
// aspect ratio sliders and boxes
LLComboBox *mCtrlFullScreen; // Fullscreen resolution
@@ -90,22 +87,6 @@ protected:
LLSliderCtrl *mCtrlSliderQuality;
LLCheckBoxCtrl *mCtrlCustomSettings;
// performance sliders and boxes
//LLViewBorder *mGraphicsBorder;
LLSliderCtrl *mCtrlDrawDistance; // the draw distance slider
LLSliderCtrl *mCtrlLODFactor; // LOD for volume objects
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
LLSliderCtrl *mCtrlNonImpostors; // Max non-impostors
LLCheckBoxCtrl *mCtrlTransparentWater;
LLCheckBoxCtrl *mCtrlBumpShiny;
LLCheckBoxCtrl *mCtrlWindLight;
LLCheckBoxCtrl *mCtrlAvatarVP;
@@ -117,34 +98,13 @@ protected:
LLComboBox *mCtrlTerrainScale;
LLCheckBoxCtrl *mCtrlAvatarImpostors;
LLCheckBoxCtrl *mCtrlAvatarCloth;
LLCheckBoxCtrl *mCtrlLightingDetail2;
LLCheckBoxCtrl *mCtrlAmbientOcc;
LLRadioGroup *mRadioTerrainDetail;
LLTextBox *mAspectRatioLabel1;
LLTextBox *mDisplayResLabel;
LLTextBox *mShaderText;
LLTextBox *mReflectionText;
LLTextBox *mAvatarText;
LLTextBox *mTerrainText;
LLTextBox *mDrawDistanceMeterText1;
LLTextBox *mDrawDistanceMeterText2;
LLTextBox *mMeshDetailText;
LLTextBox *mLODFactorText;
LLTextBox *mFlexFactorText;
LLTextBox *mTreeFactorText;
LLTextBox *mAvatarFactorText;
LLTextBox *mAvatarPhysicsFactorText;
LLTextBox *mTerrainFactorText;
LLTextBox *mSkyFactorText;
LLTextBox *mPostProcessText;
LLTextBox *mShadowDetailText;
LLTextBox *mTerrainScaleText;
LLCheckBoxCtrl *mVBO;
LLCheckBoxCtrl *mVBOStream;
BOOL mFSAutoDetectAspect;
F32 mAspectRatio;
@@ -200,14 +160,11 @@ protected:
static void onChangeCustom();
void onCommitAutoDetectAspect(const LLSD& value);
void onKeystrokeAspectRatio();
void onSelectAspectRatio();
void onCommitWindowedMode();
static void updateSliderText(LLUICtrl* ctrl, LLTextBox* text_box);
void updateMeterText();
/// callback for defaults
static void setHardwareDefaults();
void setHardwareDefaults();
// callback for when client turns on shaders
static void onVertexShaderEnable();

View File

@@ -1,103 +1,102 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel border="true" bottom="-449" height="438" label="Graphics" name="Display panel" width="517">
<check_box bottom="-23" height="16" initial_value="false" label="Run viewer in a window" left="10" name="windowed mode" width="120" tool_tip="If unchecked, viewer will display full-screen when logged in."/>
<button bottom_delta="4" height="20" left="-210" label="Reset to Defaults" tool_tip="Reset to recommended graphics settings" name="Defaults" width="200"/>
<text bottom="-62" height="12" left="10" name="DisplayResLabel">Display Resolution:</text>
<combo_box bottom="-67" height="18" left="165" name="fullscreen combo" width="150"/>
<text bottom="-39" height="12" left="10" name="AspectRatioLabel1">Aspect Ratio:</text>
<combo_box bottom="-43" height="16" left="165" name="aspect_ratio" width="150" tool_tip="width / height">
<combo_item name="4:3(StandardCRT)" value="1.333333">4:3 (Standard CRT)</combo_item>
<combo_item name="5:4(1280x1024LCD)" value="1.25">5:4 (1280x1024 LCD)</combo_item>
<combo_item name="8:5(Widescreen)" value="1.6">16:10 (Widescreen PC)</combo_item>
<combo_item name="16:9(Widescreen)" value="1.7777777">16:9 (Widescreen TV)</combo_item>
</combo_box>
<check_box bottom="-44" control_name="FullScreenAutoDetectAspectRatio" height="16" initial_value="false" label="Auto-detect ratio" left="350" name="aspect_auto_detect" width="256"/>
<check_box bottom="-23" height="16" initial_value="false" label="Run viewer in a window" left="10" name="windowed mode" width="120" tool_tip="If unchecked, viewer will display full-screen when logged in."/>
<button bottom_delta="4" height="20" left="-210" label="Reset to Defaults" tool_tip="Reset to recommended graphics settings" name="Defaults" width="200"/>
<text bottom="-62" height="12" left="10" name="DisplayResLabel">Display Resolution:</text>
<combo_box bottom="-67" height="18" left="165" name="fullscreen combo" width="150"/>
<text bottom="-39" height="12" left="10" name="AspectRatioLabel1">Aspect Ratio:</text>
<combo_box bottom="-43" height="16" left="165" name="aspect_ratio" width="150" tool_tip="width / height">
<combo_item name="4:3(StandardCRT)" value="1.333333">4:3 (Standard CRT)</combo_item>
<combo_item name="5:4(1280x1024LCD)" value="1.25">5:4 (1280x1024 LCD)</combo_item>
<combo_item name="8:5(Widescreen)" value="1.6">16:10 (Widescreen PC)</combo_item>
<combo_item name="16:9(Widescreen)" value="1.7777777">16:9 (Widescreen TV)</combo_item>
</combo_box>
<check_box bottom="-44" control_name="FullScreenAutoDetectAspectRatio" height="16" label="Auto-detect ratio" left="350" name="aspect_auto_detect" width="256"/>
<tab_container follows="all" bottom="0" border="false" left="2" height="360" right="-2" name="graphics_tab" tab_position="bottom">
<panel border="true" bottom="-439" height="438" label="Main" left="102" name="Main" width="517">
<text bottom="330" height="12" left="10" name="QualityText">Quality &amp; Performance:</text>
<text bottom_delta="0" height="12" left="135" name="FasterText">Faster</text>
<text bottom_delta="-16" height="12" left_delta="23" name="ShadersPrefText">Low</text>
<text bottom_delta="0" height="12" left_delta="47" name="ShadersPrefText2">Mid</text>
<text bottom_delta="0" height="12" left_delta="47" name="ShadersPrefText3">High</text>
<text bottom_delta="0" height="12" left_delta="47" name="ShadersPrefText4">Ultra</text>
<text bottom_delta="16" height="12" left_delta="23" name="QualityText2">Higher Quality</text>
<panel border="true" bottom="-439" height="438" label="Main" left="102" name="Main" width="517">
<text bottom="330" height="12" left="10" name="QualityText">Quality &amp; Performance:</text>
<text bottom_delta="0" height="12" left="135" name="FasterText">Faster</text>
<text bottom_delta="-16" height="12" left_delta="23" name="ShadersPrefText">Low</text>
<text bottom_delta="0" height="12" left_delta="47" name="ShadersPrefText2">Mid</text>
<text bottom_delta="0" height="12" left_delta="47" name="ShadersPrefText3">High</text>
<text bottom_delta="0" height="12" left_delta="47" name="ShadersPrefText4">Ultra</text>
<text bottom_delta="16" height="12" left_delta="23" name="QualityText2">Higher Quality</text>
<!-- Are these icons really necessary?
<icon bottom="-89" height="14" image_name="rounded_square.tga" left="173" name="LowDivet" width="2"/>
<icon bottom="-89" height="14" image_name="rounded_square.tga" left_delta="44" name="MidDivet" width="2"/>
<icon bottom="-89" height="14" image_name="rounded_square.tga" left_delta="44" name="HighDivet" width="2"/>
<icon bottom="-89" height="14" image_name="rounded_square.tga" left_delta="44" name="UltraDivet" width="2"/>
<icon bottom="-89" height="14" image_name="rounded_square.tga" left="173" name="LowDivet" width="2"/>
<icon bottom="-89" height="14" image_name="rounded_square.tga" left_delta="44" name="MidDivet" width="2"/>
<icon bottom="-89" height="14" image_name="rounded_square.tga" left_delta="44" name="HighDivet" width="2"/>
<icon bottom="-89" height="14" image_name="rounded_square.tga" left_delta="44" name="UltraDivet" width="2"/>
-->
<slider bottom_delta="0" control_name="RenderQualityPerformance" increment="1" initial_val="0" left="165" max_val="3" min_val="0" name="QualityPerformanceSelection" show_text="false" width="150" />
<check_box bottom_delta="-10" control_name="RenderCustomSettings" label="Custom" left="410" initial_value="true" name="CustomSettings"/>
<!--view_border bevel_style="none" bottom="-395" height="280" left="5" name="GraphicsBorder" width="485"/-->
<text bottom="300" height="12" left="10" name="ShadersText">Shaders:</text>
<check_box bottom_delta="-23" control_name="RenderTransparentWater" height="16" initial_value="true" label="Transparent water" left="10" name="TransparentWater"/>
<check_box bottom_delta="-17" control_name="RenderObjectBump" height="16" initial_value="true" label="Bump mapping and shiny" left="10" name="BumpShiny"/>
<check_box bottom_delta="-17" control_name="RenderLocalLights" height="16" label="Local Lights" name="LightingDetailRadio"/>
<check_box bottom_delta="-17" control_name="VertexShaderEnable" height="16" initial_value="true" label="Basic shaders" left_delta="0" name="BasicShaders" tool_tip="Disabling this option may prevent some graphics card drivers from crashing."/>
<check_box bottom_delta="-17" control_name="WindLightUseAtmosShaders" initial_value="true" label="Atmospheric shaders" left_delta="0" name="WindLightUseAtmosShaders"/>
<check_box bottom_delta="-17" control_name="RenderDeferred" initial_value="true" label="Advanced Lighting Model" tool_tip="Deferred Shading" left_delta="0" name="RenderDeferred"/>
<check_box bottom_delta="-17" control_name="RenderDeferredSSAO" height="16" initial_value="true" label="Ambient Occlusion" left_delta="0" name="UseSSAO"/>
<text bottom_delta="-17" height="12" left="15" name="TerrainScaleText">Terrain Scale:</text>
<combo_box bottom_delta="-22" control_name="RenderTerrainScale" label="Terrain Scale" left_delta="-2" name="TerrainScaleCombo" width="160" height="16">
<combo_item name="Low" value="12">Low</combo_item>
<combo_item name="Medium" value="9">Medium</combo_item>
<combo_item name="High" value="7">High</combo_item>
<combo_item name="Ultra" value="5">Ultra</combo_item>
</combo_box>
<text bottom_delta="-17" height="12" left="15" name="ShadowDetailText">Shadows:</text>
<combo_box bottom_delta="-22" control_name="RenderShadowDetail" label="Shadow Detail" left_delta="-2" name="ShadowDetailCombo" width="160" height="16">
<combo_item name="0" value="0">Disabled</combo_item>
<combo_item name="1" value="1">Sun/Moon</combo_item>
<combo_item name="2" value="2">Sun/Moon + Projectors</combo_item>
</combo_box>
<text bottom_delta="-17" height="12" left="15" name="ReflectionDetailText">Water Reflections:</text>
<combo_box bottom_delta="-22" control_name="RenderReflectionDetail" label="Reflection Detail" left_delta="-2" name="ReflectionDetailCombo" width="160" height="16">
<combo_item name="0" value="0">Minimal</combo_item>
<combo_item name="1" value="1">Terrain and trees</combo_item>
<combo_item name="2" value="2">All static objects</combo_item>
<combo_item name="3" value="3">All avatars and objects</combo_item>
<combo_item name="4" value="4">Everything</combo_item>
</combo_box>
<slider bottom_delta="0" control_name="RenderQualityPerformance" increment="1" initial_val="0" left="165" max_val="3" min_val="0" name="QualityPerformanceSelection" show_text="false" width="150" />
<check_box bottom_delta="-10" control_name="RenderCustomSettings" visibility_control="RenderCustomSettings" label="Custom" left="410" name="CustomSettings"/>
<!--view_border bevel_style="none" bottom="-395" height="280" left="5" visibility_control="RenderCustomSettings" name="GraphicsBorder" width="485"/-->
<text bottom="300" height="12" left="10" visibility_control="RenderCustomSettings" name="ShadersText">Shaders:</text>
<check_box bottom_delta="-23" control_name="RenderTransparentWater" visibility_control="RenderCustomSettings" height="16" label="Transparent water" left="10" name="TransparentWater"/>
<check_box bottom_delta="-17" control_name="RenderObjectBump" visibility_control="RenderCustomSettings" height="16" label="Bump mapping and shiny" left="10" name="BumpShiny"/>
<check_box bottom_delta="-17" control_name="RenderLocalLights" visibility_control="RenderCustomSettings" height="16" label="Local Lights" name="LightingDetailRadio"/>
<check_box bottom_delta="-17" control_name="VertexShaderEnable" visibility_control="RenderCustomSettings" height="16" label="Basic shaders" left_delta="0" name="BasicShaders" tool_tip="Disabling this option may prevent some graphics card drivers from crashing."/>
<check_box bottom_delta="-17" control_name="WindLightUseAtmosShaders" visibility_control="RenderCustomSettings" label="Atmospheric shaders" left_delta="0" name="WindLightUseAtmosShaders"/>
<check_box bottom_delta="-17" control_name="RenderDeferred" visibility_control="RenderCustomSettings" label="Advanced Lighting Model" tool_tip="Deferred Shading" left_delta="0" name="RenderDeferred"/>
<check_box bottom_delta="-17" control_name="RenderDeferredSSAO" visibility_control="RenderCustomSettings" height="16" label="Ambient Occlusion" left_delta="0" name="UseSSAO"/>
<text bottom_delta="-17" height="12" left="15" visibility_control="RenderCustomSettings" name="TerrainScaleText">Terrain Scale:</text>
<combo_box bottom_delta="-22" control_name="RenderTerrainScale" visibility_control="RenderCustomSettings" label="Terrain Scale" left_delta="-2" name="TerrainScaleCombo" width="160" height="16">
<combo_item name="Low" value="12">Low</combo_item>
<combo_item name="Medium" value="9">Medium</combo_item>
<combo_item name="High" value="7">High</combo_item>
<combo_item name="Ultra" value="5">Ultra</combo_item>
</combo_box>
<text bottom_delta="-17" height="12" left="15" visibility_control="RenderCustomSettings" name="ShadowDetailText">Shadows:</text>
<combo_box bottom_delta="-22" control_name="RenderShadowDetail" visibility_control="RenderCustomSettings" label="Shadow Detail" left_delta="-2" name="ShadowDetailCombo" width="160" height="16">
<combo_item name="0" value="0">Disabled</combo_item>
<combo_item name="1" value="1">Sun/Moon</combo_item>
<combo_item name="2" value="2">Sun/Moon + Projectors</combo_item>
</combo_box>
<text bottom_delta="-17" height="12" left="15" visibility_control="RenderCustomSettings" name="ReflectionDetailText">Water Reflections:</text>
<combo_box bottom_delta="-22" control_name="RenderReflectionDetail" visibility_control="RenderCustomSettings" label="Reflection Detail" left_delta="-2" name="ReflectionDetailCombo" width="160" height="16">
<combo_item name="0" value="0">Minimal</combo_item>
<combo_item name="1" value="1">Terrain and trees</combo_item>
<combo_item name="2" value="2">All static objects</combo_item>
<combo_item name="3" value="3">All avatars and objects</combo_item>
<combo_item name="4" value="4">Everything</combo_item>
</combo_box>
<slider bottom_delta="-20" left="5" control_name="RenderAvatarPhysicsLODFactor" increment="0.1" label=" Avatar Physics:" label_width="79" max_val="1" min_val="0" name="AvatarPhysicsDetail" show_text="false" width="160"/>
<text bottom_delta="-2" left="170" height="12" name="AvatarPhysicsDetailText">Off</text>
<text bottom="284" left="460" height="12" name="DrawDistanceMeterText1">m</text>
<text bottom="284" left="470" height="12" name="DrawDistanceMeterText2">m</text>
<slider bottom="280" left="215" control_name="RenderFarClip" decimal_digits="0" height="16" increment="8" initial_val="160" label="Draw Distance:" label_width="101" max_val="1024" min_val="24" name="DrawDistance" width="262"/>
<slider bottom_delta="-18" control_name="RenderMaxPartCount" decimal_digits="0" height="16" increment="256" initial_val="4096" label="Max. Particle Count:" label_width="101" max_val="8192" min_val="0" name="MaxParticleCount" width="262"/>
<slider bottom_delta="-18" control_name="RenderAvatarMaxVisible" decimal_digits="0" height="16" increment="1" initial_val="35" label="Max. non-impostors:" label_width="101" max_val="50" min_val="1" name="AvatarMaxVisible" width="250"/>
<slider bottom_delta="-18" control_name="RenderGlowResolutionPow" decimal_digits="0" height="16" increment="1" initial_val="8" label="Post Process Quality:" label_width="101" max_val="9" min_val="8" name="RenderPostProcess" show_text="false" width="226"/>
<text bottom_delta="4" height="12" left="444" name="PostProcessText">Low</text>
<text bottom_delta="-25" height="12" left="215" name="MeshDetailText">Level of Detail:</text>
<slider bottom_delta="-22" control_name="RenderVolumeLODFactor" height="16" increment="0.09375" label=" Objects:" label_width="79" max_val="2" min_val="0.5" name="ObjectMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderFlexTimeFactor" height="16" increment="0.1" label=" Flexiprims:" label_width="79" max_val="1" min_val="0" name="FlexibleMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderTreeLODFactor" height="16" increment="0.125" label=" Trees:" label_width="79" max_val="2" min_val="0" name="TreeMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderAvatarLODFactor" height="16" increment="0.125" label=" Avatars:" label_width="79" max_val="1" min_val="0" name="AvatarMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderTerrainLODFactor" height="16" increment="0.125" label=" Terrain:" label_width="79" max_val="2" min_val="1" name="TerrainMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="WLSkyDetail" height="16" decimal_digits="0" increment="8" label=" Sky:" label_width="79" max_val="128" min_val="16" name="SkyMeshDetail" show_text="false" width="223"/>
<text bottom_delta="90" left_delta="229" height="12" name="ObjectMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" name="FlexibleMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" name="TreeMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" name="AvatarMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" name="TerrainMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" name="SkyMeshDetailText">Low</text>
<text bottom_delta="-25" height="12" left="230" name="AvatarRenderingText">Avatar Rendering:</text>
<check_box bottom_delta="-20" control_name="RenderUseImpostors" initial_value="true" label="Avatar impostors" name="AvatarImpostors"/>
<check_box bottom_delta="-16" control_name="RenderAvatarVP" initial_value="true" label="Hardware skinning" name="AvatarVertexProgram"/>
<check_box bottom_delta="-16" control_name="RenderAvatarCloth" initial_value="true" label="Avatar cloth" name="AvatarCloth"/>
<text bottom_delta="50" height="12" left="395" name="TerrainDetailText">Terrain detail:</text>
<radio_group bottom_delta="-44" control_name="RenderTerrainDetail" draw_border="false" height="38" name="TerrainDetailRadio" width="321">
<radio_item bottom="-15" height="16" left="3" name="0" width="315">Low</radio_item>
<radio_item bottom="-31" height="16" name="2" width="315">High</radio_item>
<slider bottom_delta="-20" left="5" control_name="RenderAvatarPhysicsLODFactor" visibility_control="RenderCustomSettings" increment="0.1" label=" Avatar Physics:" label_width="79" max_val="1" min_val="0" name="AvatarPhysicsDetail" show_text="false" width="160"/>
<text bottom_delta="-2" left="170" height="12" visibility_control="RenderCustomSettings" name="AvatarPhysicsDetailText">Off</text>
<text bottom="284" left="470" height="12" visibility_control="RenderCustomSettings" name="DrawDistanceMeterText">m</text>
<slider bottom="280" left="215" control_name="RenderFarClip" visibility_control="RenderCustomSettings" decimal_digits="0" height="16" increment="8" initial_val="160" label="Draw Distance:" label_width="101" max_val="1024" min_val="24" name="DrawDistance" width="262"/>
<slider bottom_delta="-18" control_name="RenderMaxPartCount" visibility_control="RenderCustomSettings" decimal_digits="0" height="16" increment="256" initial_val="4096" label="Max. Particle Count:" label_width="101" max_val="8192" min_val="0" name="MaxParticleCount" width="262"/>
<slider bottom_delta="-18" control_name="RenderAvatarMaxVisible" visibility_control="RenderCustomSettings" enabled_control="RenderUseImpostors" decimal_digits="0" height="16" increment="1" initial_val="35" label="Max. non-impostors:" label_width="101" max_val="50" min_val="1" name="AvatarMaxVisible" width="250"/>
<slider bottom_delta="-18" control_name="RenderGlowResolutionPow" visibility_control="RenderCustomSettings" decimal_digits="0" height="16" increment="1" initial_val="8" label="Post Process Quality:" label_width="101" max_val="9" min_val="8" name="RenderPostProcess" show_text="false" width="226"/>
<text bottom_delta="4" height="12" left="444" visibility_control="RenderCustomSettings" name="PostProcessText">Low</text>
<text bottom_delta="-25" height="12" left="215" visibility_control="RenderCustomSettings" name="MeshDetailText">Level of Detail:</text>
<slider bottom_delta="-22" control_name="RenderVolumeLODFactor" visibility_control="RenderCustomSettings" height="16" increment="0.09375" label=" Objects:" label_width="79" max_val="2" min_val="0.5" name="ObjectMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderFlexTimeFactor" visibility_control="RenderCustomSettings" height="16" increment="0.1" label=" Flexiprims:" label_width="79" max_val="1" min_val="0" name="FlexibleMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderTreeLODFactor" visibility_control="RenderCustomSettings" height="16" increment="0.125" label=" Trees:" label_width="79" max_val="2" min_val="0" name="TreeMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderAvatarLODFactor" visibility_control="RenderCustomSettings" height="16" increment="0.125" label=" Avatars:" label_width="79" max_val="1" min_val="0" name="AvatarMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="RenderTerrainLODFactor" visibility_control="RenderCustomSettings" height="16" increment="0.125" label=" Terrain:" label_width="79" max_val="2" min_val="1" name="TerrainMeshDetail" show_text="false" width="223"/>
<slider bottom_delta="-18" control_name="WLSkyDetail" visibility_control="RenderCustomSettings" enabled_control="WindLightUseAtmosShaders" height="16" decimal_digits="0" increment="8" label=" Sky:" label_width="79" max_val="128" min_val="16" name="SkyMeshDetail" show_text="false" width="223"/>
<text bottom_delta="90" left_delta="229" height="12" visibility_control="RenderCustomSettings" name="ObjectMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" visibility_control="RenderCustomSettings" name="FlexibleMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" visibility_control="RenderCustomSettings" name="TreeMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" visibility_control="RenderCustomSettings" name="AvatarMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" visibility_control="RenderCustomSettings" name="TerrainMeshDetailText">Low</text>
<text bottom_delta="-18" height="12" visibility_control="RenderCustomSettings" enabled_control="WindLightUseAtmosShaders" name="SkyMeshDetailText">Low</text>
<text bottom_delta="-25" height="12" left="230" visibility_control="RenderCustomSettings" name="AvatarRenderingText">Avatar Rendering:</text>
<check_box bottom_delta="-20" control_name="RenderUseImpostors" visibility_control="RenderCustomSettings" label="Avatar impostors" name="AvatarImpostors"/>
<check_box bottom_delta="-16" control_name="RenderAvatarVP" visibility_control="RenderCustomSettings" label="Hardware skinning" name="AvatarVertexProgram"/>
<check_box bottom_delta="-16" control_name="RenderAvatarCloth" visibility_control="RenderCustomSettings" label="Avatar cloth" name="AvatarCloth"/>
<text bottom_delta="50" height="12" left="395" visibility_control="RenderCustomSettings" name="TerrainDetailText">Terrain detail:</text>
<radio_group bottom_delta="-44" control_name="RenderTerrainDetail" visibility_control="RenderCustomSettings" draw_border="false" height="38" name="TerrainDetailRadio" width="321">
<radio_item bottom="-15" height="16" left="3" name="0" width="315">Low</radio_item>
<radio_item bottom="-31" height="16" name="2" width="315">High</radio_item>
</radio_group>
</panel>
<panel border="true" bottom="-400" height="244" left="50" name="Hardware" label="Hardware" width="500">
<check_box bottom="-22" control_name="RenderAnisotropic" height="16" initial_value="false" label="Anisotropic Filtering (slower when enabled)" left="5" name="ani" width="256"/>
<check_box bottom="-22" control_name="RenderAnisotropic" height="16" label="Anisotropic Filtering (slower when enabled)" left="5" name="ani" width="256"/>
<text bottom="-37" height="12" left="10" name="Antialiasing:" width="128">Antialiasing:</text>
<combo_box bottom="-41" height="16" initial_value="false" label="Antialiasing" left="148" name="fsaa" width="64">
<combo_item name="FSAADisabled" value="0">Disabled</combo_item>
<combo_item name="2x" value="2">2x</combo_item>
<combo_item name="2x" value="2">2x</combo_item>
<combo_item name="4x" value="4">4x</combo_item>
<combo_item name="8x" value="8">8x</combo_item>
<combo_item name="16x" value="16">16x</combo_item>
@@ -108,20 +107,20 @@
<combo_item name="VSyncStandard" value="1">Standard</combo_item>
<combo_item name="VSyncAdaptive" value="-1">Adaptive</combo_item>
</combo_box>
<spinner bottom_delta="70" control_name="TextureMemory" decimal_digits="0" height="16" increment="16" initial_val="32" label="Texture Memory (MB):" label_width="138" left="10" max_val="4096" min_val="0" name="GrapicsCardTextureMemory" tool_tip="Amount of memory to allocate for textures. Defaults to Video Card Memory. Reducing this may improve performance but may also make textures blurry." width="202"/>
<check_box bottom_delta="-25" control_name="RenderVBOEnable" height="16" initial_value="true" label="Enable OpenGL Vertex Buffer Objects" left="5" name="vbo"
tool_tip="Enabling this on modern hardware gives a performance gain. However, older hardware often has poor implementations of VBOs and you may get crashes when this is enabled."/>
<check_box bottom_delta="-18" control_name="ShyotlRenderUseStreamVBO" height="16" initial_value="false" label="Enable Streamed VBOs" left="14" name="vbo_stream"
tool_tip="Disabling this may improve performance when VBOs are enabled. Disabling produced observable improvement on various AMD GPUs."/>
<check_box bottom_delta="-25" control_name="RenderUseFBO" height="16" initial_value="true" label="Enable OpenGL Frame Buffer Objects" left="5" name="fbo"
tool_tip="Enabling this on modern hardware can provide a performance gain. However, enabling this when combined with antialiasing on AMD GPUs may cause edge artifacts. This setting is required for deferred rendering."/>
<spinner bottom="-41" control_name="RenderGamma" decimal_digits="2" height="16" increment="0.01" initial_val="1" label="Gamma:" label_width="138" left="250" max_val="2" min_val="0.0" name="gamma" width="202" tool_tip="(brightness, lower is brighter)"/>
<spinner bottom_delta="70" control_name="RenderFogRatio" decimal_digits="1" height="16" increment="0.1" initial_val="4" label="Fog Distance Ratio:" label_width="138" max_val="10" min_val="0.5" name="fog" width="202"/>
<text bottom_delta="-50" height="40" name="note">
<spinner bottom_delta="70" control_name="TextureMemory" decimal_digits="0" height="16" increment="16" initial_val="32" label="Texture Memory (MB):" label_width="138" left="10" max_val="4096" min_val="0" name="GrapicsCardTextureMemory" tool_tip="Amount of memory to allocate for textures. Defaults to Video Card Memory. Reducing this may improve performance but may also make textures blurry." width="202"/>
<check_box bottom_delta="-25" control_name="RenderVBOEnable" height="16" label="Enable OpenGL Vertex Buffer Objects" left="5" name="vbo"
tool_tip="Enabling this on modern hardware gives a performance gain. However, older hardware often has poor implementations of VBOs and you may get crashes when this is enabled."/>
<check_box bottom_delta="-18" control_name="ShyotlRenderUseStreamVBO" enabled_control="RenderVBOEnable" height="16" label="Enable Streamed VBOs" left="14" name="vbo_stream"
tool_tip="Disabling this may improve performance when VBOs are enabled. Disabling produced observable improvement on various AMD GPUs."/>
<check_box bottom_delta="-25" control_name="RenderUseFBO" height="16" label="Enable OpenGL Frame Buffer Objects" left="5" name="fbo"
tool_tip="Enabling this on modern hardware can provide a performance gain. However, enabling this when combined with antialiasing on AMD GPUs may cause edge artifacts. This setting is required for deferred rendering."/>
<spinner bottom="-41" control_name="RenderGamma" decimal_digits="2" height="16" increment="0.01" initial_val="1" label="Gamma:" label_width="138" left="250" max_val="2" min_val="0.0" name="gamma" width="202" tool_tip="(brightness, lower is brighter)"/>
<spinner bottom_delta="70" control_name="RenderFogRatio" decimal_digits="1" height="16" increment="0.1" initial_val="4" label="Fog Distance Ratio:" label_width="138" max_val="10" min_val="0.5" name="fog" width="202"/>
<text bottom_delta="-50" height="40" name="note">
Note: The Gamma and Fog Distance Ratio
settings are unavailable (since useless)
when the Atmospheric Shaders are enabled.
</text>
</text>
</panel>
</tab_container>
<string name="resolution_format">[RES_X] x [RES_Y]</string>