From 94fa18bf3cafe50d2bcb54d52efd7b696c05282a Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Sun, 8 Oct 2023 15:10:56 -0400 Subject: [PATCH] Only reset probe mip chain and render target on resolution change --- indra/newview/llreflectionmapmanager.cpp | 11 +++++++++-- indra/newview/llviewercontrol.cpp | 1 - 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp index 3510d09db84..c0e166676d5 100644 --- a/indra/newview/llreflectionmapmanager.cpp +++ b/indra/newview/llreflectionmapmanager.cpp @@ -1210,11 +1210,15 @@ void LLReflectionMapManager::initReflectionMaps() { U32 count = LL_MAX_REFLECTION_PROBE_COUNT; - if (mTexture.isNull() || mReflectionProbeCount != count || mReset) + static LLCachedControl<U32> probe_res_cc(gSavedSettings, "RenderReflectionProbeResolution", 128); + U32 probe_resolution = nhpo2(llclamp(probe_res_cc(), (U32)64, (U32)512)); + bool probe_resolution_changed = mProbeResolution != probe_resolution; + + if (mTexture.isNull() || mReflectionProbeCount != count || probe_resolution_changed || mReset) { mReset = false; mReflectionProbeCount = count; - mProbeResolution = nhpo2(llclamp(gSavedSettings.getU32("RenderReflectionProbeResolution"), (U32)64, (U32)512)); + mProbeResolution = probe_resolution; mMaxProbeLOD = log2f(mProbeResolution) - 1.f; // number of mips - 1 mTexture = new LLCubeMapArray(); @@ -1259,7 +1263,10 @@ void LLReflectionMapManager::initReflectionMaps() mDefaultProbe->mRadius = 4096.f; mDefaultProbe->mProbeIndex = 0; touch_default_probe(mDefaultProbe); + } + if (probe_resolution_changed) + { mRenderTarget.release(); mMipChain.clear(); } diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 11623e11607..c56646b30f2 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -747,7 +747,6 @@ void settings_setup_listeners() // [/SL:KB] setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeLevel", handleReflectionProbeDetailChanged); setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeDetail", handleReflectionProbeDetailChanged); - setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeResolution", handleReflectionProbeDetailChanged); setting_setup_signal_listener(gSavedSettings, "RenderReflectionsEnabled", handleReflectionProbeDetailChanged); setting_setup_signal_listener(gSavedSettings, "RenderScreenSpaceReflections", handleReflectionProbeDetailChanged); setting_setup_signal_listener(gSavedSettings, "RenderShaderCacheEnabled", handleSetShaderChanged); -- GitLab