summaryrefslogtreecommitdiff
path: root/indra/newview/llviewershadermgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewershadermgr.cpp')
-rw-r--r--indra/newview/llviewershadermgr.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index 4d62adf3e2..18407b5b43 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -202,6 +202,7 @@ LLGLSLShader gDeferredPostTonemapProgram;
LLGLSLShader gNoPostTonemapProgram;
LLGLSLShader gDeferredPostGammaCorrectProgram;
LLGLSLShader gLegacyPostGammaCorrectProgram;
+LLGLSLShader gHDRGammaCorrectProgram;
LLGLSLShader gExposureProgram;
LLGLSLShader gExposureProgramNoFade;
LLGLSLShader gLuminanceProgram;
@@ -449,6 +450,7 @@ void LLViewerShaderMgr::finalizeShaderList()
mShaderList.push_back(&gNoPostTonemapProgram);
mShaderList.push_back(&gDeferredPostGammaCorrectProgram); // for gamma
mShaderList.push_back(&gLegacyPostGammaCorrectProgram);
+ mShaderList.push_back(&gHDRGammaCorrectProgram);
mShaderList.push_back(&gDeferredDiffuseProgram);
mShaderList.push_back(&gDeferredBumpProgram);
mShaderList.push_back(&gDeferredPBROpaqueProgram);
@@ -802,13 +804,16 @@ std::string LLViewerShaderMgr::loadBasicShaders()
S32 probe_level = llclamp(gSavedSettings.getS32("RenderReflectionProbeLevel"), 0, 3);
- S32 shadow_detail = gSavedSettings.getS32("RenderShadowDetail");
+ S32 shadow_detail = gSavedSettings.getS32("RenderShadowDetail");
if (shadow_detail >= 1)
{
- attribs["SUN_SHADOW"] = "1";
+ if(shadow_detail < 3)
+ {
+ attribs["SUN_SHADOW"] = "1";
+ }
- if (shadow_detail >= 2)
+ if (shadow_detail > 1)
{
attribs["SPOT_SHADOW"] = "1";
}
@@ -908,7 +913,7 @@ bool LLViewerShaderMgr::loadShadersWater()
S32 shadow_detail = gSavedSettings.getS32("RenderShadowDetail");
bool use_sun_shadow = mShaderLevel[SHADER_DEFERRED] > 1 &&
- shadow_detail > 0;
+ shadow_detail > 0 && shadow_detail < 3;
if (mShaderLevel[SHADER_WATER] == 0)
{
@@ -1158,6 +1163,7 @@ bool LLViewerShaderMgr::loadShadersDeferred()
gLuminanceProgram.unload();
gDeferredPostGammaCorrectProgram.unload();
gLegacyPostGammaCorrectProgram.unload();
+ gHDRGammaCorrectProgram.unload();
gDeferredPostTonemapProgram.unload();
gNoPostTonemapProgram.unload();
for (auto i = 0; i < 4; ++i)
@@ -2501,6 +2507,21 @@ bool LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gHDRGammaCorrectProgram.mName = "HDR Gamma Correction Post Process";
+ gHDRGammaCorrectProgram.mFeatures.hasSrgb = true;
+ gHDRGammaCorrectProgram.mFeatures.isDeferred = true;
+ gHDRGammaCorrectProgram.mShaderFiles.clear();
+ gHDRGammaCorrectProgram.clearPermutations();
+ //gHDRGammaCorrectProgram.addPermutation("HDR_GAMMA", "1");
+ gHDRGammaCorrectProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoTCV.glsl", GL_VERTEX_SHADER));
+ gHDRGammaCorrectProgram.mShaderFiles.push_back(make_pair("deferred/MPHDRDisplayGammaF.glsl", GL_FRAGMENT_SHADER));
+ gHDRGammaCorrectProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
+ success = gHDRGammaCorrectProgram.createShader();
+ llassert(success);
+ }
+
+ if (success)
+ {
gDeferredPostTonemapProgram.mName = "Deferred Tonemap Post Process";
gDeferredPostTonemapProgram.mFeatures.hasSrgb = true;
gDeferredPostTonemapProgram.mFeatures.isDeferred = true;