diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp
index 208ed6aba..be3bbb739 100644
--- a/indra/llrender/llpostprocess.cpp
+++ b/indra/llrender/llpostprocess.cpp
@@ -100,6 +100,7 @@ LLPostProcess::LLPostProcess(void) :
defaultEffect["bloom_strength"] = 1.5;
/// Color Filter Defaults
+ defaultEffect["gamma"] = 1.0;
defaultEffect["brightness"] = 1.0;
defaultEffect["contrast"] = 1.0;
defaultEffect["saturation"] = 1.0;
@@ -258,6 +259,7 @@ void LLPostProcess::applyColorFilterShader(void)
getShaderUniforms(colorFilterUniforms, gPostColorFilterProgram.mProgramObject);
glUniform1iARB(colorFilterUniforms["RenderTexture"], 0);
+ glUniform1fARB(colorFilterUniforms["gamma"], tweaks.getGamma());
glUniform1fARB(colorFilterUniforms["brightness"], tweaks.getBrightness());
glUniform1fARB(colorFilterUniforms["contrast"], tweaks.getContrast());
float baseI = (tweaks.getContrastBaseR() + tweaks.getContrastBaseG() + tweaks.getContrastBaseB()) / 3.0f;
@@ -283,6 +285,7 @@ void LLPostProcess::createColorFilterShader(void)
{
/// Define uniform names
colorFilterUniforms["RenderTexture"] = 0;
+ colorFilterUniforms["gamma"] = 0;
colorFilterUniforms["brightness"] = 0;
colorFilterUniforms["contrast"] = 0;
colorFilterUniforms["contrastBase"] = 0;
diff --git a/indra/llrender/llpostprocess.h b/indra/llrender/llpostprocess.h
index 007020af1..8e914a7c7 100644
--- a/indra/llrender/llpostprocess.h
+++ b/indra/llrender/llpostprocess.h
@@ -157,6 +157,10 @@ public:
return F32((*this)["bloom_strength"].asReal());
}
+ inline F32 getGamma() const {
+ return F32((*this)["gamma"].asReal());
+ }
+
inline F32 getBrightness() const {
return F32((*this)["brightness"].asReal());
}
diff --git a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl
index 623ef7a81..4d5bf2538 100644
--- a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl
@@ -12,12 +12,15 @@ uniform vec3 contrastBase;
uniform float saturation;
uniform vec3 lumWeights;
-const float gamma = 2.0;
+uniform float gamma;
void main(void)
{
vec3 color = vec3(texture2DRect(RenderTexture, gl_TexCoord[0].st));
+ /// Apply gamma
+ color = pow(color, vec3(1.0/gamma));
+
/// Modulate brightness
color *= brightness;
diff --git a/indra/newview/app_settings/windlight/postprocesseffects.xml b/indra/newview/app_settings/windlight/postprocesseffects.xml
index 8c25df6ff..2ce7d7c44 100644
--- a/indra/newview/app_settings/windlight/postprocesseffects.xml
+++ b/indra/newview/app_settings/windlight/postprocesseffects.xml
@@ -151,6 +151,8 @@
1.5
bloom_width
2.25
+ gamma
+ 1.0
brightness
1
brightness_multiplier
diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp
index 87615837a..6c3f77d3c 100644
--- a/indra/newview/llfloaterpostprocess.cpp
+++ b/indra/newview/llfloaterpostprocess.cpp
@@ -53,7 +53,7 @@ LLFloaterPostProcess::LLFloaterPostProcess() : LLFloater(std::string("Post-Proce
/// Color Filter Callbacks
childSetCommitCallback("ColorFilterToggle", &LLFloaterPostProcess::onBoolToggle, (char*)"enable_color_filter");
- //childSetCommitCallback("ColorFilterGamma", &LLFloaterPostProcess::onFloatControlMoved, &(gPostProcess->tweaks.gamma()));
+ childSetCommitCallback("ColorFilterGamma", &LLFloaterPostProcess::onFloatControlMoved, (char*)"gamma");
childSetCommitCallback("ColorFilterBrightness", &LLFloaterPostProcess::onFloatControlMoved, (char*)"brightness");
childSetCommitCallback("ColorFilterSaturation", &LLFloaterPostProcess::onFloatControlMoved, (char*)"saturation");
childSetCommitCallback("ColorFilterContrast", &LLFloaterPostProcess::onFloatControlMoved, (char*)"contrast");
@@ -252,7 +252,7 @@ void LLFloaterPostProcess::syncMenu()
/// Sync Color Filter Menu
childSetValue("ColorFilterToggle", gPostProcess->tweaks.useColorFilter());
- //childSetValue("ColorFilterGamma", gPostProcess->tweaks.gamma());
+ childSetValue("ColorFilterGamma", gPostProcess->tweaks.getGamma());
childSetValue("ColorFilterBrightness", gPostProcess->tweaks.brightness());
childSetValue("ColorFilterSaturation", gPostProcess->tweaks.saturation());
childSetValue("ColorFilterContrast", gPostProcess->tweaks.contrast());
@@ -272,4 +272,7 @@ void LLFloaterPostProcess::syncMenu()
childSetValue("BloomExtract", gPostProcess->tweaks.extractLow());
childSetValue("BloomSize", gPostProcess->tweaks.bloomWidth());
childSetValue("BloomStrength", gPostProcess->tweaks.bloomStrength());
+
+ childSetValue("GaussBlurToggle", gPostProcess->tweaks.useGaussBlurFilter());
+ childSetValue("GaussBlurPasses", gPostProcess->tweaks.getGaussBlurPasses());
}
diff --git a/indra/newview/skins/default/xui/en-us/floater_post_process.xml b/indra/newview/skins/default/xui/en-us/floater_post_process.xml
index 8c3eeb083..d110c1d62 100644
--- a/indra/newview/skins/default/xui/en-us/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_post_process.xml
@@ -12,6 +12,18 @@
+
+ Gamma
+
+