From 190f688c972ddca096920deded0cf0adc4383a1c Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Mon, 23 Oct 2023 21:37:27 +0200 Subject: [PATCH] libkwineffects: add support for scRGB --- src/libkwineffects/colorspace.h | 1 + src/libkwineffects/glshadermanager.cpp | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/libkwineffects/colorspace.h b/src/libkwineffects/colorspace.h index 43233933c4..048ad0eecb 100644 --- a/src/libkwineffects/colorspace.h +++ b/src/libkwineffects/colorspace.h @@ -71,6 +71,7 @@ enum class NamedTransferFunction { sRGB = 0, linear = 1, PerceptualQuantizer = 2, + scRGB = 3, }; /** diff --git a/src/libkwineffects/glshadermanager.cpp b/src/libkwineffects/glshadermanager.cpp index d249a7f34d..e4d4eafde6 100644 --- a/src/libkwineffects/glshadermanager.cpp +++ b/src/libkwineffects/glshadermanager.cpp @@ -152,6 +152,7 @@ QByteArray ShaderManager::generateFragmentSource(ShaderTraits traits) const stream << "const int sRGB_EOTF = 0;\n"; stream << "const int linear_EOTF = 1;\n"; stream << "const int PQ_EOTF = 2;\n"; + stream << "const int scRGB_EOTF = 3;\n"; stream << "\n"; stream << "uniform mat3 colorimetryTransform;\n"; stream << "uniform int sourceNamedTransferFunction;\n"; @@ -210,6 +211,8 @@ QByteArray ShaderManager::generateFragmentSource(ShaderTraits traits) const stream << " result.rgb /= max(result.a, 0.001);\n"; stream << " result.rgb = sdrBrightness * srgbToLinear(result.rgb);\n"; stream << " result.rgb *= result.a;\n"; + stream << " } else if (sourceNamedTransferFunction == scRGB_EOTF) {\n"; + stream << " result.rgb *= 80;\n"; stream << " }\n"; stream << " result.rgb = doTonemapping(colorimetryTransform * result.rgb, maxHdrBrightness);\n"; } @@ -229,6 +232,8 @@ QByteArray ShaderManager::generateFragmentSource(ShaderTraits traits) const stream << " result.rgb *= result.a;\n"; stream << " } else if (destinationNamedTransferFunction == PQ_EOTF) {\n"; stream << " result.rgb = nitsToPq(result.rgb);\n"; + stream << " } else if (destinationNamedTransferFunction == scRGB_EOTF) {\n"; + stream << " result.rgb /= 80.0;\n"; stream << " }\n"; }