diff options
author | Cosmic Linden <cosmic@lindenlab.com> | 2024-01-22 15:07:10 -0800 |
---|---|---|
committer | Cosmic Linden <cosmic@lindenlab.com> | 2024-01-22 15:07:10 -0800 |
commit | 38b3f663fc3214314b75e19fbc25474007479897 (patch) | |
tree | 8e0dc46f11a52f33ea2c03ecb474d88535e2c7a8 /indra/newview/llreflectionmapmanager.cpp | |
parent | 210d9204813318f55fb39505fda88d4a3544ae0e (diff) | |
parent | 2adecc6fac9852974e44e3d58ccf2619b45642a9 (diff) |
Merge branch 'release/materials_featurette' of github.com:secondlife/viewer into DRTVWR-592
Diffstat (limited to 'indra/newview/llreflectionmapmanager.cpp')
-rw-r--r-- | indra/newview/llreflectionmapmanager.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp index 69674417c1..2b6985b214 100644 --- a/indra/newview/llreflectionmapmanager.cpp +++ b/indra/newview/llreflectionmapmanager.cpp @@ -27,6 +27,9 @@ #include "llviewerprecompiledheaders.h" #include "llreflectionmapmanager.h" + +#include <vector> + #include "llviewercamera.h" #include "llspatialpartition.h" #include "llviewerregion.h" @@ -1383,3 +1386,39 @@ void LLReflectionMapManager::doOcclusion() } } } + +void LLReflectionMapManager::forceDefaultProbeAndUpdateUniforms(bool force) +{ + static std::vector<bool> mProbeWasOccluded; + + if (force) + { + llassert(mProbeWasOccluded.empty()); + + for (size_t i = 0; i < mProbes.size(); ++i) + { + auto& probe = mProbes[i]; + mProbeWasOccluded.push_back(probe->mOccluded); + if (probe != nullptr && probe != mDefaultProbe) + { + probe->mOccluded = true; + } + } + + updateUniforms(); + } + else + { + llassert(mProbes.size() == mProbeWasOccluded.size()); + + const size_t n = llmin(mProbes.size(), mProbeWasOccluded.size()); + for (size_t i = 0; i < n; ++i) + { + auto& probe = mProbes[i]; + llassert(probe->mOccluded == (probe != mDefaultProbe)); + probe->mOccluded = mProbeWasOccluded[i]; + } + mProbeWasOccluded.clear(); + mProbeWasOccluded.shrink_to_fit(); + } +} |