Browse Source

Improve precision of the gammaToLinearPrecise shader function.

Alex Szpakowski 6 years ago
parent
commit
d83117c981
1 changed files with 4 additions and 4 deletions
  1. 4 4
      src/modules/graphics/wrap_GraphicsShader.lua

+ 4 - 4
src/modules/graphics/wrap_GraphicsShader.lua

@@ -138,13 +138,13 @@ GLSL.FUNCTIONS = [[
 #endif
 #endif
 
 
 float gammaToLinearPrecise(float c) {
 float gammaToLinearPrecise(float c) {
-	return c <= 0.04045 ? c * 0.077399380804954 : pow((c + 0.055) * 0.9478672985782, 2.4);
+	return c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4);
 }
 }
 vec3 gammaToLinearPrecise(vec3 c) {
 vec3 gammaToLinearPrecise(vec3 c) {
 	bvec3 leq = lessThanEqual(c, vec3(0.04045));
 	bvec3 leq = lessThanEqual(c, vec3(0.04045));
-	c.r = leq.r ? c.r * 0.077399380804954 : pow((c.r + 0.055) * 0.9478672985782, 2.4);
-	c.g = leq.g ? c.g * 0.077399380804954 : pow((c.g + 0.055) * 0.9478672985782, 2.4);
-	c.b = leq.b ? c.b * 0.077399380804954 : pow((c.b + 0.055) * 0.9478672985782, 2.4);
+	c.r = leq.r ? c.r / 12.92 : pow((c.r + 0.055) / 1.055, 2.4);
+	c.g = leq.g ? c.g / 12.92 : pow((c.g + 0.055) / 1.055, 2.4);
+	c.b = leq.b ? c.b / 12.92 : pow((c.b + 0.055) / 1.055, 2.4);
 	return c;
 	return c;
 }
 }
 vec4 gammaToLinearPrecise(vec4 c) { return vec4(gammaToLinearPrecise(c.rgb), c.a); }
 vec4 gammaToLinearPrecise(vec4 c) { return vec4(gammaToLinearPrecise(c.rgb), c.a); }