glshadermanager: optimize pq conversions

master
Xaver Hugl 11 months ago
parent cbb574efff
commit 457deeb27d

@ -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";

Loading…
Cancel
Save