diff --git a/indra/newview/alrenderutils.cpp b/indra/newview/alrenderutils.cpp index 809fa98c1cceb29a757385062e5c686e2e8d24d7..50d7d7affc21ed8df8dc72492a831a0bb994cae1 100644 --- a/indra/newview/alrenderutils.cpp +++ b/indra/newview/alrenderutils.cpp @@ -513,9 +513,9 @@ bool ALRenderUtil::setupColorGrade() return true; } -void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure) +void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure, LLRenderTarget* dst) { - LLGLDepthTest depth(GL_FALSE, GL_FALSE); + dst->bindTarget(); LLGLSLShader* tone_shader = (mCGLut != 0 ) ? &gDeferredPostColorGradeLUTProgram[mTonemapType] : &gDeferredPostTonemapProgram[mTonemapType]; @@ -578,6 +578,8 @@ void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure) tone_shader->unbindTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage()); tone_shader->unbindTexture(LLShaderMgr::EXPOSURE_MAP, exposure->getUsage()); tone_shader->unbind(); + + dst->flush(); } bool ALRenderUtil::setupSharpen() @@ -625,13 +627,16 @@ bool ALRenderUtil::setupSharpen() return true; } -void ALRenderUtil::renderSharpen(LLRenderTarget* src) +void ALRenderUtil::renderSharpen(LLRenderTarget* src, LLRenderTarget* dst) { if (mSharpenMethod == ALSharpen::SHARPEN_NONE) { + gPipeline.copyRenderTarget(src, dst); return; } + dst->bindTarget(); + LLGLSLShader* sharpen_shader = nullptr; switch (mSharpenMethod) { @@ -646,8 +651,6 @@ void ALRenderUtil::renderSharpen(LLRenderTarget* src) break; } - LLGLDepthTest depth(GL_FALSE, GL_FALSE); - // Bind setup: sharpen_shader->bind(); @@ -657,6 +660,7 @@ void ALRenderUtil::renderSharpen(LLRenderTarget* src) mRenderBuffer->setBuffer(); mRenderBuffer->drawArrays(LLRender::TRIANGLES, 0, 3); - sharpen_shader->unbindTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage()); sharpen_shader->unbind(); + + dst->flush(); } diff --git a/indra/newview/alrenderutils.h b/indra/newview/alrenderutils.h index 3008416ee845193b547900b4d94e081cfc3e2238..1363c9bc99f21841744911af0c92980b4c007e8d 100644 --- a/indra/newview/alrenderutils.h +++ b/indra/newview/alrenderutils.h @@ -62,7 +62,7 @@ class ALRenderUtil }; bool setupTonemap(); bool setupColorGrade(); - void renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure); + void renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure, LLRenderTarget* dst); enum ALSharpen : uint32_t { @@ -73,7 +73,7 @@ class ALRenderUtil }; bool setupSharpen(); - void renderSharpen(LLRenderTarget* src); + void renderSharpen(LLRenderTarget* src, LLRenderTarget* dst); // End Deferred Only U32 getSharpenMethod() { return mSharpenMethod; }; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 078323efa9974504b3263c569109aadbc6cb62de..7f3cb7f40c40155c2e85659c80e6d00e58ef6b41 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -7304,7 +7304,25 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst) { mRT->fxaaBuffer.flush(); dst->bindTarget(); - shader = &gFXAAProgram; + + U32 fsaa_quality = 0; + switch (RenderFSAASamples) + { + case 2: + fsaa_quality = 0; + break; + case 4: + fsaa_quality = 1; + break; + default: + case 8: + fsaa_quality = 2; + break; + case 16: + fsaa_quality = 3; + break; + } + shader = &gFXAAProgram[fsaa_quality]; shader->bind(); channel = shader->enableTexture(LLShaderMgr::DIFFUSE_MAP, mRT->fxaaBuffer.getUsage()); @@ -7618,7 +7636,9 @@ void LLPipeline::renderFinalize() generateExposure(&mLuminanceMap, &mExposureMap); - gammaCorrect(&mRT->screen, &mPostMap); + mALRenderUtil->renderTonemap(&mRT->screen, &mExposureMap, &mPostFXMap); + mALRenderUtil->renderSharpen(&mPostFXMap, &mPostMap); + //gammaCorrect(&mRT->screen, &mPostMap); LLVertexBuffer::unbind(); }