From 0f7b8c04cc5c7bd41a928dcbf03f3a65c69c7d66 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Sun, 1 Oct 2023 00:07:36 -0400 Subject: [PATCH] Fix dynamically resetting probe resolution --- indra/newview/llreflectionmapmanager.cpp | 42 +++++++++++++----------- indra/newview/llviewercontrol.cpp | 1 + 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp index 6cd29d7be45..edf093261c9 100644 --- a/indra/newview/llreflectionmapmanager.cpp +++ b/indra/newview/llreflectionmapmanager.cpp @@ -124,26 +124,6 @@ void LLReflectionMapManager::update() initReflectionMaps(); - if (!mRenderTarget.isComplete()) - { - U32 color_fmt = GL_RGB16F; - U32 targetRes = mProbeResolution * 4; // super sample - mRenderTarget.allocate(targetRes, targetRes, color_fmt, true); - } - - if (mMipChain.empty()) - { - U32 res = mProbeResolution; - U32 count = log2((F32)res) + 0.5f; - - mMipChain.resize(count); - for (int i = 0; i < count; ++i) - { - mMipChain[i].allocate(res, res, GL_RGB16F); - res /= 2; - } - } - llassert(mProbes[0] == mDefaultProbe); LLVector4a camera_pos; @@ -1267,6 +1247,28 @@ void LLReflectionMapManager::initReflectionMaps() mDefaultProbe->mProbeIndex = 0; touch_default_probe(mDefaultProbe); + mRenderTarget.release(); + mMipChain.clear(); + } + + if (!mRenderTarget.isComplete()) + { + U32 color_fmt = GL_RGB16F; + U32 targetRes = mProbeResolution * 4; // super sample + mRenderTarget.allocate(targetRes, targetRes, color_fmt, true); + } + + if (mMipChain.empty()) + { + U32 res = mProbeResolution; + U32 count = log2((F32)res) + 0.5f; + + mMipChain.resize(count); + for (int i = 0; i < count; ++i) + { + mMipChain[i].allocate(res, res, GL_RGB16F); + res /= 2; + } } if (mVertexBuffer.isNull()) diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 77678538ee0..0a3b397b4f0 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -754,6 +754,7 @@ 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