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 + +