summaryrefslogtreecommitdiff
path: root/indra/newview/pipeline.cpp
diff options
context:
space:
mode:
authorJonathan "Geenz" Goodman <geenz@geenzo.com>2023-04-08 20:18:15 -0700
committerJonathan "Geenz" Goodman <geenz@geenzo.com>2023-04-08 20:18:15 -0700
commit5bfae438fda23d287898238ad7cbedafd81fb33a (patch)
treef0153643166c4ede14b3e053c62b428c3b221552 /indra/newview/pipeline.cpp
parent82ba39d2ff6eb0067bcb384246541eb54e206cd9 (diff)
Start scrapping screenTarget().
Makes our binding flow _far more_ predictable and makes way more sense. DRTVWR-559 SL-19524 SL-19513
Diffstat (limited to 'indra/newview/pipeline.cpp')
-rw-r--r--indra/newview/pipeline.cpp43
1 files changed, 33 insertions, 10 deletions
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index a1183ccb0f..15c827ffca 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7230,10 +7230,10 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst) {
// bake out texture2D with RGBL for FXAA shader
mRT->fxaaBuffer.bindTarget();
- shader = &gDeferredPostNoDoFProgram;
+ shader = &gGlowCombineFXAAProgram;
shader->bind();
- S32 channel = gDeferredPostNoDoFProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
+ S32 channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
if (channel > -1)
{
src->bindTexture(0, channel, LLTexUnit::TFO_BILINEAR);
@@ -7270,7 +7270,6 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst) {
2.f / width * scale_x, 2.f / height * scale_y);
{
- // at this point we should pointed at the backbuffer (or a snapshot render target)
LLGLDepthTest depth_test(GL_TRUE, GL_TRUE, GL_ALWAYS);
S32 depth_channel = shader->getTextureChannel(LLShaderMgr::DEFERRED_DEPTH);
gGL.getTexUnit(depth_channel)->bind(&mRT->deferredScreen, true);
@@ -7282,6 +7281,28 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst) {
shader->unbind();
dst->flush();
}
+ else {
+ // Just copy directly into the destination.
+ dst->bindTarget();
+
+ gDeferredPostNoDoFProgram.bind();
+
+ S32 channel = gDeferredPostNoDoFProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
+ if (channel > -1)
+ {
+ src->bindTexture(0, channel, LLTexUnit::TFO_BILINEAR);
+ }
+
+ {
+ LLGLDepthTest depth_test(GL_TRUE, GL_TRUE, GL_ALWAYS);
+ mScreenTriangleVB->setBuffer();
+ mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+ }
+
+ gDeferredPostNoDoFProgram.unbind();
+
+ dst->flush();
+ }
}
}
@@ -7310,18 +7331,19 @@ void LLPipeline::renderFinalize()
if (!gCubeSnapshot)
{
- copyScreenSpaceReflections(&mSceneMap, screenTarget());
+ copyScreenSpaceReflections(&mSceneMap, &mRT->screen);
- generateLuminance(screenTarget(), &mLuminanceMap);
+ generateLuminance(&mRT->screen, &mLuminanceMap);
generateExposure(&mLuminanceMap, &mExposureMap);
- gammaCorrect(screenTarget(), &mPostMap);
+ gammaCorrect(&mRT->screen, &mPostMap);
LLVertexBuffer::unbind();
}
- renderGlow(&mPostMap, screenTarget());
+ renderGlow(&mPostMap, &mRT->screen);
+
/*
{
bool dof_enabled =
@@ -7561,16 +7583,17 @@ void LLPipeline::renderFinalize()
}
}*/
- //applyFXAA(screenTarget(), screenTarget());
+ applyFXAA(&mRT->screen, &mPostMap);
// Present the screen target.
gDeferredPostNoDoFProgram.bind();
- S32 channel = gDeferredPostNoDoFProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, screenTarget()->getUsage());
+ // Whatever is last in the above post processing chain should _always_ be rendered directly here. If not, expect problems.
+ S32 channel = gDeferredPostNoDoFProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mPostMap.getUsage());
if (channel > -1)
{
- screenTarget()->bindTexture(0, channel, LLTexUnit::TFO_BILINEAR);
+ mPostMap.bindTexture(0, channel, LLTexUnit::TFO_BILINEAR);
}
{