summaryrefslogtreecommitdiff
path: root/indra/newview/llheroprobemanager.cpp
diff options
context:
space:
mode:
authorJonathan "Geenz" Goodman <geenz@geenzo.com>2024-02-25 22:52:23 -0800
committerJonathan "Geenz" Goodman <geenz@geenzo.com>2024-02-25 22:52:23 -0800
commit320258729757e9ef14e9509c22eca1ce6a0da856 (patch)
tree6383327b4b5c85134b315ab9ec7ac5c57e6ecb69 /indra/newview/llheroprobemanager.cpp
parent0d38d1bbd659206454d261193857d6fbb91387fa (diff)
#682 Add a low priority path for conservative probe face updates. This will update the "low priority" faces at half of the the probe update rate. Useful for less planar reflection geometry.
Diffstat (limited to 'indra/newview/llheroprobemanager.cpp')
-rw-r--r--indra/newview/llheroprobemanager.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp
index 0d9efb860a..f350b28bf5 100644
--- a/indra/newview/llheroprobemanager.cpp
+++ b/indra/newview/llheroprobemanager.cpp
@@ -114,7 +114,7 @@ void LLHeroProbeManager::update()
for (auto vo : mHeroVOList)
{
- if (vo && !vo->isDead())
+ if (vo && (!vo->isDead() || vo != nullptr))
{
if (vo->mDrawable.notNull())
{
@@ -135,7 +135,7 @@ void LLHeroProbeManager::update()
unregisterViewerObject(vo);
}
}
-
+
if (mNearestHero != nullptr && !mNearestHero->isDead() && mNearestHero->mDrawable.notNull())
{
LLVector3 hero_pos = mNearestHero->getPositionAgent();
@@ -205,7 +205,16 @@ void LLHeroProbeManager::update()
for (U32 i = 0; i < 6; ++i)
{
if (mFaceUpdateList[i])
+ {
updateProbeFace(mProbes[j], i, near_clip);
+ }
+ else
+ {
+ if (mLowPriorityFaceThrottle > 0 && mCurrentProbeUpdateFrame % mLowPriorityFaceThrottle == 0) {
+ updateProbeFace(mProbes[j], i, near_clip);
+ mCurrentProbeUpdateFrame = 0;
+ }
+ }
}
generateRadiance(mProbes[j]);
}
@@ -213,6 +222,8 @@ void LLHeroProbeManager::update()
gPipeline.mReflectionMapManager.mRadiancePass = radiance_pass;
}
+
+ mCurrentProbeUpdateFrame++;
}
// Do the reflection map update render passes.
@@ -568,21 +579,25 @@ void LLHeroProbeManager::doOcclusion()
}
}
-void LLHeroProbeManager::registerViewerObject(LLVOVolume* drawablep)
+bool LLHeroProbeManager::registerViewerObject(LLVOVolume* drawablep)
{
llassert(drawablep != nullptr);
- if (mHeroVOList.find(drawablep) == mHeroVOList.end())
+ if (std::find(mHeroVOList.begin(), mHeroVOList.end(), drawablep) == mHeroVOList.end())
{
// Probe isn't in our list for consideration. Add it.
- mHeroVOList.insert(drawablep);
+ mHeroVOList.push_back(drawablep);
+ return true;
}
+
+ return false;
}
void LLHeroProbeManager::unregisterViewerObject(LLVOVolume* drawablep)
{
- if (mHeroVOList.find(drawablep) != mHeroVOList.end())
+ std::vector<LLVOVolume*>::iterator found_itr = std::find(mHeroVOList.begin(), mHeroVOList.end(), drawablep);
+ if (found_itr != mHeroVOList.end())
{
- mHeroVOList.erase(drawablep);
+ mHeroVOList.erase(found_itr);
}
}