From e5b3d58f77e554cbcc11bdfe25741c2e85c95360 Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 3 Oct 2014 16:58:46 +0000 Subject: [PATCH] Add gamma adjustment filter --- direct/src/filter/CommonFilters.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/direct/src/filter/CommonFilters.py b/direct/src/filter/CommonFilters.py index d3ed6f7b95..2d05e74fb5 100644 --- a/direct/src/filter/CommonFilters.py +++ b/direct/src/filter/CommonFilters.py @@ -325,9 +325,20 @@ class CommonFilters: text += " decay *= k_vlparams.y;\n" text += " }\n" text += " o_color += float4(vlcolor * k_vlparams.z, 1);\n" + + if ("GammaAdjust" in configuration): + gamma = configuration["GammaAdjust"] + if gamma == 0.5: + text += " o_color.rgb = sqrt(o_color.rgb);\n" + elif gamma == 2.0: + text += " o_color.rgb *= o_color.rgb;\n" + elif gamma != 1.0: + text += " o_color.rgb = pow(o_color.rgb, %ff);\n" % (gamma) + if ("Inverted" in configuration): text += " o_color = float4(1, 1, 1, 1) - o_color;\n" text += "}\n" + print text self.finalQuad.setShader(Shader.make(text)) for tex in self.textures: @@ -513,3 +524,17 @@ class CommonFilters: return self.reconfigure(True, "AmbientOcclusion") return True + def setGammaAdjust(self, gamma): + """ Applies additional gamma correction to the image. 1.0 = no correction. """ + old_gamma = self.configuration.get("GammaAdjust", 1.0) + if old_gamma != gamma: + self.configuration["GammaAdjust"] = gamma + return self.reconfigure(True, "GammaAdjust") + return True + + def delGammaAdjust(self): + if ("GammaAdjust" in self.configuration): + old_gamma = self.configuration["GammaAdjust"] + del self.configuration["GammaAdjust"] + return self.reconfigure((old_gamma != 1.0), "GammaAdjust") + return True