summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2023-04-07 11:06:09 -0500
committerDave Parks <davep@lindenlab.com>2023-04-07 11:06:09 -0500
commitde73cf7599e934441fe760f53163b0504c03adc7 (patch)
tree7141fdad76010ccf1cb1f79fa5b016eb806ce7d6 /indra/newview
parent72a0408401e4fa8f22ec8a70584bf90e5f0ccc73 (diff)
SL-19538 Remove clouds from irradiance maps and don't conflate max probe samples with max probe neighbors, and don't move manual probes after they are complete (removes flickering around Sponza).
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl2
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp6
-rw-r--r--indra/newview/llreflectionmap.cpp2
-rw-r--r--indra/newview/llreflectionmapmanager.cpp9
4 files changed, 16 insertions, 3 deletions
diff --git a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
index e73e396b8e..e1b18935e8 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
@@ -134,7 +134,7 @@ void preProbeSample(vec3 pos)
int neighborIdx = refIndex[i].y;
if (neighborIdx != -1)
{
- int neighborCount = min(refIndex[i].z, REF_SAMPLE_COUNT-1);
+ int neighborCount = refIndex[i].z;
int count = 0;
while (count < neighborCount)
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index b49fe35851..820073b3e0 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -442,7 +442,11 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass)
{
renderStarsDeferred(origin);
}
- renderSkyCloudsDeferred(origin, camHeightLocal, cloud_shader);
+
+ if (!gCubeSnapshot || gPipeline.mReflectionMapManager.isRadiancePass()) // don't draw clouds in irradiance maps to avoid popping
+ {
+ renderSkyCloudsDeferred(origin, camHeightLocal, cloud_shader);
+ }
}
gGL.setColorMask(true, true);
}
diff --git a/indra/newview/llreflectionmap.cpp b/indra/newview/llreflectionmap.cpp
index 89ac0df286..261aa51d62 100644
--- a/indra/newview/llreflectionmap.cpp
+++ b/indra/newview/llreflectionmap.cpp
@@ -70,7 +70,7 @@ void LLReflectionMap::autoAdjustOrigin()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_DISPLAY;
- if (mGroup)
+ if (mGroup && !mComplete)
{
const LLVector4a* bounds = mGroup->getBounds();
auto* node = mGroup->getOctreeNode();
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 8252b4be36..dc84b0b10e 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -861,6 +861,9 @@ void LLReflectionMapManager::updateUniforms()
{
//LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("rmmsu - refNeighbors");
//pack neghbor list
+ const U32 max_neighbors = 64;
+ U32 neighbor_count = 0;
+
for (auto& neighbor : refmap->mNeighbors)
{
if (ni >= 4096)
@@ -876,6 +879,12 @@ void LLReflectionMapManager::updateUniforms()
// this neighbor may be sampled
rpd.refNeighbor[ni++] = idx;
+
+ neighbor_count++;
+ if (neighbor_count >= max_neighbors)
+ {
+ break;
+ }
}
}