diff --git a/src/libkwineffects/glshadermanager.cpp b/src/libkwineffects/glshadermanager.cpp index 70d45d0e4a..b6f5552886 100644 --- a/src/libkwineffects/glshadermanager.cpp +++ b/src/libkwineffects/glshadermanager.cpp @@ -162,13 +162,14 @@ QByteArray ShaderManager::generateFragmentSource(ShaderTraits traits) const stream << "\n"; stream << "vec3 nitsToPq(vec3 nits) {\n"; stream << " vec3 normalized = clamp(nits / 10000.0, vec3(0), vec3(1));\n"; - stream << " float c1 = 0.8359375;\n"; - stream << " float c2 = 18.8515625;\n"; - stream << " float c3 = 18.6875;\n"; - stream << " float m1 = 0.1593017578125;\n"; - stream << " float m2 = 78.84375;\n"; - stream << " vec3 num = vec3(c1) + c2 * pow(normalized, vec3(m1));\n"; - stream << " vec3 denum = vec3(1.0) + c3 * pow(normalized, vec3(m1));\n"; + stream << " const float c1 = 0.8359375;\n"; + stream << " const float c2 = 18.8515625;\n"; + stream << " const float c3 = 18.6875;\n"; + stream << " const float m1 = 0.1593017578125;\n"; + stream << " const float m2 = 78.84375;\n"; + stream << " vec3 powed = pow(normalized, vec3(m1));\n"; + stream << " vec3 num = vec3(c1) + c2 * powed;\n"; + stream << " vec3 denum = vec3(1.0) + c3 * powed;\n"; stream << " return pow(num / denum, vec3(m2));\n"; stream << "}\n"; stream << "vec3 pqToNits(vec3 pq) {\n"; @@ -177,8 +178,9 @@ QByteArray ShaderManager::generateFragmentSource(ShaderTraits traits) const stream << " const float c3 = 18.6875;\n"; stream << " const float m1_inv = 1.0 / 0.1593017578125;\n"; stream << " const float m2_inv = 1.0 / 78.84375;\n"; - stream << " vec3 num = max(pow(pq, vec3(m2_inv)) - c1, vec3(0.0));\n"; - stream << " vec3 den = c2 - c3 * pow(pq, vec3(m2_inv));\n"; + stream << " vec3 powed = pow(pq, vec3(m2_inv));\n"; + stream << " vec3 num = max(powed - c1, vec3(0.0));\n"; + stream << " vec3 den = c2 - c3 * powed;\n"; stream << " return 10000.0 * pow(num / den, vec3(m1_inv));\n"; stream << "}\n"; stream << "vec3 srgbToLinear(vec3 color) {\n";