summaryrefslogtreecommitdiff
path: root/indra/newview/llreflectionmapmanager.cpp
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2023-03-30 14:53:01 -0500
committerDave Parks <davep@lindenlab.com>2023-03-30 14:53:01 -0500
commite8114dbe14cc71664f6a27bbe727ff8c25fbc643 (patch)
treea88fba730b0fd67beb0be360e82e8fe707e34e6c /indra/newview/llreflectionmapmanager.cpp
parent3494a61ebf6d9d5c5c68d4679dc8c9133f8c14f0 (diff)
SL-19517 Fix for RenderReflectionProbeCount other than 256 causing black reflections.
Diffstat (limited to 'indra/newview/llreflectionmapmanager.cpp')
-rw-r--r--indra/newview/llreflectionmapmanager.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index e9df67c724..624eead68e 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -1006,11 +1006,15 @@ void LLReflectionMapManager::renderDebug()
void LLReflectionMapManager::initReflectionMaps()
{
- if (mTexture.isNull())
+ static LLCachedControl<S32> probe_count(gSavedSettings, "RenderReflectionProbeCount", LL_MAX_REFLECTION_PROBE_COUNT);
+
+ U32 count = llclamp((S32) probe_count, 1, LL_MAX_REFLECTION_PROBE_COUNT);
+
+ if (mTexture.isNull() || mReflectionProbeCount != count)
{
+ mReflectionProbeCount = count;
mProbeResolution = nhpo2(llclamp(gSavedSettings.getU32("RenderReflectionProbeResolution"), (U32)64, (U32)512));
mMaxProbeLOD = log2f(mProbeResolution) - 1.f; // number of mips - 1
- mReflectionProbeCount = llclamp(gSavedSettings.getS32("RenderReflectionProbeCount"), 1, LL_MAX_REFLECTION_PROBE_COUNT);
mTexture = new LLCubeMapArray();
@@ -1019,6 +1023,26 @@ void LLReflectionMapManager::initReflectionMaps()
mIrradianceMaps = new LLCubeMapArray();
mIrradianceMaps->allocate(LL_IRRADIANCE_MAP_RESOLUTION, 3, mReflectionProbeCount, FALSE);
+
+ // reset probe state
+ mUpdatingFace = 0;
+ mUpdatingProbe = nullptr;
+ mRadiancePass = false;
+ mRealtimeRadiancePass = false;
+ mDefaultProbe = nullptr;
+
+ for (auto& probe : mProbes)
+ {
+ probe->mComplete = false;
+ probe->mProbeIndex = -1;
+ probe->mCubeArray = nullptr;
+ probe->mCubeIndex = -1;
+ }
+
+ for (bool& is_free : mCubeFree)
+ {
+ is_free = true;
+ }
}
if (mVertexBuffer.isNull())