diff options
author | Dave Parks <davep@lindenlab.com> | 2011-09-29 23:03:20 -0500 |
---|---|---|
committer | Dave Parks <davep@lindenlab.com> | 2011-09-29 23:03:20 -0500 |
commit | eadb745c593900ce50d3e081b365a073f21cb421 (patch) | |
tree | 38ace9451572959f9f2c7bd6e3d59ef74d8d0aa5 /indra/newview/llviewershadermgr.cpp | |
parent | 754ce2be40ed53e8f925c21879305c9749adeb0d (diff) |
SH-2465 Move FXAA to its own pass independent of DoF (also removes the need to reload shaders when toggling FSAA on and off)
Diffstat (limited to 'indra/newview/llviewershadermgr.cpp')
-rw-r--r-- | indra/newview/llviewershadermgr.cpp | 55 |
1 files changed, 15 insertions, 40 deletions
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 8e59a7c32d..48d4471bdf 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -187,6 +187,7 @@ LLGLSLShader gDeferredGIProgram; LLGLSLShader gDeferredGIFinalProgram; LLGLSLShader gDeferredPostGIProgram; LLGLSLShader gDeferredPostProgram; +LLGLSLShader gFXAAProgram; LLGLSLShader gDeferredPostNoDoFProgram; LLGLSLShader gDeferredWLSkyProgram; LLGLSLShader gDeferredWLCloudProgram; @@ -275,6 +276,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gDeferredPostGIProgram); mShaderList.push_back(&gDeferredEdgeProgram); mShaderList.push_back(&gDeferredPostProgram); + mShaderList.push_back(&gFXAAProgram); mShaderList.push_back(&gDeferredGIProgram); mShaderList.push_back(&gDeferredGIFinalProgram); mShaderList.push_back(&gDeferredWaterProgram); @@ -463,7 +465,6 @@ void LLViewerShaderMgr::setShaders() //setup preprocessor definitions - LLShaderMgr::instance()->mDefinitions["samples"] = llformat("%d", gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples"))); LLShaderMgr::instance()->mDefinitions["NUM_TEX_UNITS"] = llformat("%d", gGLManager.mNumTextureImageUnits); reentrance = true; @@ -1032,9 +1033,6 @@ BOOL LLViewerShaderMgr::loadShadersEffects() { BOOL success = TRUE; - U32 samples = gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples")); - bool multisample = samples > 1 && LLPipeline::sRenderDeferred && gGLManager.mHasTextureMultisample; - if (mVertexShaderLevel[SHADER_EFFECT] == 0) { gGlowProgram.unload(); @@ -1060,21 +1058,10 @@ BOOL LLViewerShaderMgr::loadShadersEffects() if (success) { - std::string fragment; - - if (multisample) - { - fragment = "effects/glowExtractMSF.glsl"; - } - else - { - fragment = "effects/glowExtractF.glsl"; - } - gGlowExtractProgram.mName = "Glow Extract Shader (Post)"; gGlowExtractProgram.mShaderFiles.clear(); gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractV.glsl", GL_VERTEX_SHADER_ARB)); - gGlowExtractProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); + gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractF.glsl", GL_FRAGMENT_SHADER_ARB)); gGlowExtractProgram.mShaderLevel = mVertexShaderLevel[SHADER_EFFECT]; success = gGlowExtractProgram.createShader(NULL, &mGlowExtractUniforms); if (!success) @@ -1124,6 +1111,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredPostGIProgram.unload(); gDeferredEdgeProgram.unload(); gDeferredPostProgram.unload(); + gFXAAProgram.unload(); gLuminanceGatherProgram.unload(); gDeferredGIProgram.unload(); gDeferredGIFinalProgram.unload(); @@ -1138,9 +1126,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() BOOL success = TRUE; - U32 samples = gSavedSettings.getU32("RenderFSAASamples"); - bool multisample = samples > 1; - if (success) { gDeferredDiffuseProgram.mName = "Deferred Diffuse Shader"; @@ -1524,40 +1509,30 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() if (success) { - std::string fragment; - if (multisample) - { - fragment = "deferred/postDeferredF.glsl"; - } - else - { - fragment = "deferred/postDeferredNoFXAAF.glsl"; - } + gFXAAProgram.mName = "FXAA Shader"; + gFXAAProgram.mShaderFiles.clear(); + gFXAAProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB)); + gFXAAProgram.mShaderFiles.push_back(make_pair("deferred/fxaaF.glsl", GL_FRAGMENT_SHADER_ARB)); + gFXAAProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gFXAAProgram.createShader(NULL, NULL); + } + if (success) + { gDeferredPostProgram.mName = "Deferred Post Shader"; gDeferredPostProgram.mShaderFiles.clear(); gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredPostProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); + gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredF.glsl", GL_FRAGMENT_SHADER_ARB)); gDeferredPostProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredPostProgram.createShader(NULL, NULL); } if (success) { - std::string fragment; - if (multisample) - { - fragment = "deferred/postDeferredNoDoFF.glsl"; - } - else - { - fragment = "deferred/postDeferredNoDoFNoFXAAF.glsl"; - } - gDeferredPostNoDoFProgram.mName = "Deferred Post Shader"; gDeferredPostNoDoFProgram.mShaderFiles.clear(); gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); + gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoDOFF.glsl", GL_FRAGMENT_SHADER_ARB)); gDeferredPostNoDoFProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredPostNoDoFProgram.createShader(NULL, NULL); } |