Start scrapping screenTarget().

Makes our binding flow _far more_ predictable and makes way more sense.

DRTVWR-559
SL-19524
SL-19513
meow-7.2.2
Jonathan "Geenz" Goodman 2023-04-08 20:18:15 -07:00
parent 82ba39d2ff
commit 5bfae438fd
2 changed files with 34 additions and 12 deletions

View File

@ -30,7 +30,6 @@
out vec4 frag_color;
uniform sampler2D diffuseRect;
uniform sampler2D emissiveRect;
uniform vec2 screen_res;
@ -38,7 +37,7 @@ in vec2 vary_tc;
void main()
{
vec3 col = texture(diffuseRect, vary_tc).rgb + texture(emissiveRect, vary_tc).rgb;
vec3 col = texture(diffuseRect, vary_tc).rgb;
frag_color = vec4(col.rgb, dot(col.rgb, vec3(0.299, 0.587, 0.144)));
}

View File

@ -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);
}
{