diff options
author | Jonathan "Geenz" Goodman <geenz@geenzo.com> | 2023-04-12 13:01:53 -0700 |
---|---|---|
committer | Jonathan "Geenz" Goodman <geenz@geenzo.com> | 2023-04-12 13:01:53 -0700 |
commit | d839bfe43a8a35c64906551c8ac7de3e42cd86f5 (patch) | |
tree | b1d78499526926b1f1f8b2e54fbb1b1bca05c2a9 /indra | |
parent | 56b21054eb974c21c31aed0b6239f5d1a24b467f (diff) |
Combine glow in a separate shader.
DRTVWR-559
SL-19524
SL-19513
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/pipeline.cpp | 51 | ||||
-rw-r--r-- | indra/newview/pipeline.h | 1 |
2 files changed, 29 insertions, 23 deletions
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index a6364ff092..572d388b15 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -7193,25 +7193,6 @@ void LLPipeline::renderGlow(LLRenderTarget* src, LLRenderTarget* dst) { mGlow[1].clear(); mGlow[1].flush(); } - - // Go ahead and do our glow combine here in our destination. We blit this later into the front buffer. - - dst->bindTarget(); - - { - LLGLDepthTest depth_test(GL_TRUE, GL_TRUE, GL_ALWAYS); - - gGlowCombineProgram.bind(); - - gGlowCombineProgram.bindTexture(LLShaderMgr::DEFERRED_DIFFUSE, src); - gGlowCombineProgram.bindTexture(LLShaderMgr::DEFERRED_DEPTH, &mRT->deferredScreen, true); - gGlowCombineProgram.bindTexture(LLShaderMgr::DEFERRED_EMISSIVE, &mGlow[1]); - - mScreenTriangleVB->setBuffer(); - mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3); - } - - dst->flush(); } void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst) { @@ -7288,6 +7269,8 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst) { } void LLPipeline::copyRenderTarget(LLRenderTarget* src, LLRenderTarget* dst) { + + LL_PROFILE_GPU_ZONE("copyRenderTarget"); dst->bindTarget(); gDeferredPostNoDoFProgram.bind(); @@ -7309,6 +7292,27 @@ void LLPipeline::copyRenderTarget(LLRenderTarget* src, LLRenderTarget* dst) { dst->flush(); } +void LLPipeline::combineGlow(LLRenderTarget* src, LLRenderTarget* dst) { + // Go ahead and do our glow combine here in our destination. We blit this later into the front buffer. + + dst->bindTarget(); + + { + LLGLDepthTest depth_test(GL_TRUE, GL_TRUE, GL_ALWAYS); + + gGlowCombineProgram.bind(); + + gGlowCombineProgram.bindTexture(LLShaderMgr::DEFERRED_DIFFUSE, src); + gGlowCombineProgram.bindTexture(LLShaderMgr::DEFERRED_DEPTH, &mRT->deferredScreen, true); + gGlowCombineProgram.bindTexture(LLShaderMgr::DEFERRED_EMISSIVE, &mGlow[1]); + + mScreenTriangleVB->setBuffer(); + mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3); + } + + dst->flush(); +} + void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst) { { bool dof_enabled = @@ -7539,7 +7543,6 @@ void LLPipeline::renderFinalize() if (!gCubeSnapshot) { - copyScreenSpaceReflections(&mRT->screen, &mSceneMap); generateLuminance(&mRT->screen, &mLuminanceMap); @@ -7551,11 +7554,13 @@ void LLPipeline::renderFinalize() LLVertexBuffer::unbind(); } - renderGlow(&mPostMap, &mRT->screen); + renderGlow(&mPostMap, &mRT->screen); // We don't actually write to the screen buffer here. Should probably pass in mGlow[2] as our destination. + + renderDoF(&mPostMap, &mRT->screen); - renderDoF(&mRT->screen, &mPostMap); + applyFXAA(&mRT->screen, &mPostMap); - applyFXAA(&mPostMap, &mRT->screen); + combineGlow(&mPostMap, &mRT->screen); // Present the screen target. diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 3be908bdf7..072ae2bf14 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -143,6 +143,7 @@ public: void applyFXAA(LLRenderTarget* src, LLRenderTarget* dst); void renderDoF(LLRenderTarget* src, LLRenderTarget* dst); void copyRenderTarget(LLRenderTarget* src, LLRenderTarget* dst); + void combineGlow(LLRenderTarget* src, LLRenderTarget* dst); void renderPostProcess(); LLRenderTarget* screenTarget(); |