summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorJonathan "Geenz" Goodman <geenz@geenzo.com>2023-08-21 05:15:48 -0700
committerJonathan "Geenz" Goodman <geenz@geenzo.com>2023-08-21 05:15:48 -0700
commit869bb7f16ae3e931f11840332ab00715a4ef27af (patch)
treea9bed02983219fa0a2a2b2147c60a47a725b0e03 /indra
parentd4254538d1bdd5d93a4eadea961a955ce79ab06f (diff)
Readd occlusion culling for hero probes.
DRTVWR-583
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llheroprobemanager.cpp19
-rw-r--r--indra/newview/pipeline.cpp20
2 files changed, 22 insertions, 17 deletions
diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp
index 1773dffa8b..33a54c797e 100644
--- a/indra/newview/llheroprobemanager.cpp
+++ b/indra/newview/llheroprobemanager.cpp
@@ -132,23 +132,8 @@ void LLHeroProbeManager::updateProbeFace(LLReflectionMap* probe, U32 face)
gPipeline.mRT = &gPipeline.mAuxillaryRT;
mLightScale = 1.f;
- static LLCachedControl<F32> max_local_light_ambiance(gSavedSettings, "RenderReflectionProbeMaxLocalLightAmbiance", 8.f);
- if (probe->getAmbiance() > max_local_light_ambiance)
- {
- mLightScale = max_local_light_ambiance / probe->getAmbiance();
- }
- {
- gPipeline.pushRenderTypeMask();
-
- //only render sky, water, terrain, and clouds
- gPipeline.andRenderTypeMask(LLPipeline::RENDER_TYPE_SKY, LLPipeline::RENDER_TYPE_WL_SKY,
- LLPipeline::RENDER_TYPE_WATER, LLPipeline::RENDER_TYPE_VOIDWATER, LLPipeline::RENDER_TYPE_CLOUDS, LLPipeline::RENDER_TYPE_TERRAIN, LLPipeline::RENDER_TYPE_AVATAR, LLPipeline::END_RENDER_TYPES);
-
- probe->update(mRenderTarget.getWidth(), face);
-
- gPipeline.popRenderTypeMask();
- }
+ probe->update(mRenderTarget.getWidth(), face);
gPipeline.mRT = &gPipeline.mMainRT;
@@ -401,7 +386,7 @@ void LLHeroProbeManager::initReflectionMaps()
{
mReset = false;
mReflectionProbeCount = count;
- mProbeResolution = nhpo2(llclamp(gSavedSettings.getU32("RenderHeroProbeResolution"), (U32)128, (U32)1024));
+ mProbeResolution = nhpo2(1024);
mMaxProbeLOD = log2f(mProbeResolution) - 1.f; // number of mips - 1
mTexture = new LLCubeMapArray();
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 9f8cd2c7fd..4c951a9dea 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -2443,6 +2443,26 @@ void LLPipeline::doOcclusion(LLCamera& camera)
gGL.setColorMask(true, true);
}
+
+ if (sReflectionProbesEnabled && sUseOcclusion > 1 && !LLPipeline::sShadowRender && !gCubeSnapshot)
+ {
+ gGL.setColorMask(false, false);
+ LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+ LLGLDisable cull(GL_CULL_FACE);
+
+ gOcclusionCubeProgram.bind();
+
+ if (mCubeVB.isNull())
+ { //cube VB will be used for issuing occlusion queries
+ mCubeVB = ll_create_cube_vb(LLVertexBuffer::MAP_VERTEX);
+ }
+ mCubeVB->setBuffer();
+
+ mHeroProbeManager.doOcclusion();
+ gOcclusionCubeProgram.unbind();
+
+ gGL.setColorMask(true, true);
+ }
if (LLPipeline::sUseOcclusion > 1 &&
(sCull->hasOcclusionGroups() || LLVOCachePartition::sNeedsOcclusionCheck))