summaryrefslogtreecommitdiff
path: root/indra/newview/llviewercontrol.cpp
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2026-07-24 11:24:12 +0800
committerErik Kundiman <erik@megapahit.org>2026-07-24 11:24:12 +0800
commitfc46ce4c0c7d81349d55933fb4bef3260f79ac8b (patch)
tree42b81558404432b253684661136dcd38722f59a7 /indra/newview/llviewercontrol.cpp
parentffd174763119879d8be376c7c94b58e1961a7ebd (diff)
parentbcfda3b68a95bbbfb8b53f6313929fc5aeaa591c (diff)
Merge tag 'Second_Life_Release#bcfda3b6-26.3' into 26.3
Diffstat (limited to 'indra/newview/llviewercontrol.cpp')
-rw-r--r--indra/newview/llviewercontrol.cpp59
1 files changed, 1 insertions, 58 deletions
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 8a1c0cf476..6d42cf2347 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -113,63 +113,6 @@ static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue)
return true;
}
-// Per-tier texture quality preset. Data-driven so adding a setting is
-// "add a column", and the tier values are visible side-by-side. Index is
-// RenderTextureQuality: 0=Low, 1=Medium, 2=High, 3=Ultra.
-namespace
-{
- struct TexturePreset
- {
- const char* name;
- U32 max_resolution;
- F32 pixel_to_texel_ratio; // TexturePixelToTexelRatio (R_max, texels per pixel)
- F32 pressure_tighten_rate; // TexturePressureTightenRate (ratio units/sec)
- F32 pressure_relax_rate; // TexturePressureRelaxRate (ratio units/sec)
- F32 channel_ratio_normal; // TextureChannelRatioNormal
- F32 channel_ratio_basecolor; // TextureChannelRatioBaseColor
- F32 channel_ratio_specular; // TextureChannelRatioSpecular
- F32 channel_ratio_emissive; // TextureChannelRatioEmissive
- };
-
- // Tier values: Low (2-4GB), Medium (4-8GB), High (8-16GB), Ultra (16+GB).
- // Quality ladder, expressed in pixel:texel (texels per pixel):
- // - pixel_to_texel_ratio is the baseline quality: how many texels per
- // screen pixel the tier allocates when VRAM is comfortable (1.0 = 1:1).
- // Under pressure the runtime drives the global ratio below this with no
- // floor (down to 0 = deepest mips), so there is no per-tier minimum.
- // - the channel ratios coarsen specular/emissive/normal relative to base
- // color (each is a multiplier on the global ratio).
- // The pressure water marks (TexturePressureHighWater/LowWater) are NOT tiered - they're a
- // physical "crossed the budget" threshold (0.90 / 0.70), constant across
- // tiers. Lower tiers start blurrier (lower R_max) and tighten faster.
- // max_res Rmax tight relax N BC S E
- static constexpr TexturePreset TEXTURE_PRESETS[4] = {
- /* 0 Low */ { "Low", 1024, 0.10f, 0.50f, 0.05f, 0.50f, 1.00f, 0.25f, 0.25f },
- /* 1 Medium */ { "Medium", 2048, 0.40f, 0.35f, 0.08f, 1.00f, 1.00f, 0.50f, 0.50f },
- /* 2 High */ { "High", 2048, 0.80f, 0.25f, 0.10f, 1.00f, 1.00f, 0.50f, 1.00f },
- /* 3 Ultra */ { "Ultra", 2048, 1.00f, 0.15f, 0.12f, 1.00f, 1.00f, 1.00f, 1.00f },
- };
-}
-
-static bool handleRenderTextureQualityChanged(const LLSD& newvalue)
-{
- U32 quality = (U32)newvalue.asInteger();
- if (quality > 3) quality = 3;
- const TexturePreset& p = TEXTURE_PRESETS[quality];
-
- gSavedSettings.setU32("RenderMaxTextureResolution", p.max_resolution);
- gSavedSettings.setF32("TexturePixelToTexelRatio", p.pixel_to_texel_ratio);
- gSavedSettings.setF32("TexturePressureTightenRate", p.pressure_tighten_rate);
- gSavedSettings.setF32("TexturePressureRelaxRate", p.pressure_relax_rate);
- gSavedSettings.setF32("TextureChannelRatioNormal", p.channel_ratio_normal);
- gSavedSettings.setF32("TextureChannelRatioBaseColor", p.channel_ratio_basecolor);
- gSavedSettings.setF32("TextureChannelRatioSpecular", p.channel_ratio_specular);
- gSavedSettings.setF32("TextureChannelRatioEmissive", p.channel_ratio_emissive);
-
- LL_INFOS("TextureStream") << "Applied texture quality preset: " << p.name << LL_ENDL;
- return true;
-}
-
static bool handleRenderFarClipChanged(const LLSD& newvalue)
{
if (LLStartUp::getStartupState() >= STATE_STARTED)
@@ -873,7 +816,6 @@ void settings_setup_listeners()
{
LL_PROFILE_ZONE_SCOPED;
setting_setup_signal_listener(gSavedSettings, "FirstPersonAvatarVisible", handleRenderAvatarMouselookChanged);
- setting_setup_signal_listener(gSavedSettings, "RenderTextureQuality", handleRenderTextureQualityChanged);
setting_setup_signal_listener(gSavedSettings, "RenderFarClip", handleRenderFarClipChanged);
setting_setup_signal_listener(gSavedSettings, "RenderTerrainScale", handleTerrainScaleChanged);
setting_setup_signal_listener(gSavedSettings, "RenderTerrainPBRScale", handlePBRTerrainScaleChanged);
@@ -885,6 +827,7 @@ void settings_setup_listeners()
setting_setup_signal_listener(gSavedSettings, "OctreeMaxNodeCapacity", handleRepartition);
setting_setup_signal_listener(gSavedSettings, "OctreeAlphaDistanceFactor", handleRepartition);
setting_setup_signal_listener(gSavedSettings, "OctreeAttachmentSizeFactor", handleRepartition);
+ setting_setup_signal_listener(gSavedSettings, "RenderMaxTextureIndex", handleSetShaderChanged);
setting_setup_signal_listener(gSavedSettings, "RenderUIBuffer", handleWindowResized);
setting_setup_signal_listener(gSavedSettings, "RenderDepthOfField", handleReleaseGLBufferChanged);
setting_setup_signal_listener(gSavedSettings, "RenderFSAAType", handleReleaseGLBufferChanged);