diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2026-05-08 15:31:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-08 15:31:12 +0100 |
| commit | ac75bcab713490eb000e4fa48f7e7316c3535854 (patch) | |
| tree | 9b428ae15d56cbce37fd4695c68a62f5b9956ad1 /src/render/OpenGL.cpp | |
| parent | b94f1498542be0e83fe8060a50bce5ff2d5a1c39 (diff) | |
renderer: fix shadow CM calculations (#14364)
Diffstat (limited to 'src/render/OpenGL.cpp')
| -rw-r--r-- | src/render/OpenGL.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 0a53442e..5a889eb4 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1067,8 +1067,9 @@ void CHyprOpenGLImpl::renderRectWithBlurInternal(const CBox& box, const CHyprCol using ColorConversionKey = std::tuple<float, float, float, float, uint64_t>; static std::map<ColorConversionKey, CHyprColor> colorConversionCache; -static CHyprColor getConvertedColor(const CHyprColor& color) { - const auto targetId = g_pHyprRenderer->workBufferImageDescription()->id(); +// +static CHyprColor getConvertedColor(const CHyprColor& color, PImageDescription imageDescription) { + const auto targetId = imageDescription->id(); const ColorConversionKey key = {color.r, color.g, color.b, color.a, targetId}; if (colorConversionCache.contains(key)) return colorConversionCache[key]; @@ -1094,7 +1095,7 @@ void CHyprOpenGLImpl::renderRectWithDamageInternal(const CBox& box, const CHyprC // premultiply the color as well as we don't work with straight alpha const auto premultiplied = CHyprColor(col.r * col.a, col.g * col.a, col.b * col.a, col.a); - const auto converted = getConvertedColor(premultiplied); + const auto converted = getConvertedColor(premultiplied, m_renderData.currentFB->imageDescription()); shader->setUniformFloat4(SHADER_COLOR, converted.r, converted.g, converted.b, converted.a); shader->setUniformFloat4(SHADER_COLOR_SRGB, premultiplied.r, premultiplied.g, premultiplied.b, premultiplied.a); @@ -2263,8 +2264,8 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun auto shader = useShader(getShaderVariant(SH_FRAG_SHADOW, globalFeatures())); shader->setUniformMatrix3fv(SHADER_PROJ, 1, GL_TRUE, glMatrix.getMatrix()); - const auto converted = getConvertedColor(col); - shader->setUniformFloat4(SHADER_COLOR, converted.r, converted.g, converted.b, converted.a * a); + const auto converted = getConvertedColor(col.stripA(), m_renderData.currentFB->imageDescription()); + shader->setUniformFloat4(SHADER_COLOR, converted.r, converted.g, converted.b, col.a * a); shader->setUniformFloat4(SHADER_COLOR_SRGB, col.r, col.g, col.b, col.a * a); const auto TOPLEFT = Vector2D(range + round, range + round); @@ -2355,8 +2356,8 @@ void CHyprOpenGLImpl::renderInnerGlow(const CBox& box, int round, float rounding auto shader = useShader(getShaderVariant(SH_FRAG_INNER_GLOW, globalFeatures())); shader->setUniformMatrix3fv(SHADER_PROJ, 1, GL_TRUE, glMatrix.getMatrix()); - const auto converted = getConvertedColor(col); - shader->setUniformFloat4(SHADER_COLOR, converted.r, converted.g, converted.b, converted.a * a); + const auto converted = getConvertedColor(col.stripA(), m_renderData.currentFB->imageDescription()); + shader->setUniformFloat4(SHADER_COLOR, converted.r, converted.g, converted.b, col.a * a); shader->setUniformFloat4(SHADER_COLOR_SRGB, col.r, col.g, col.b, col.a * a); const auto TOPLEFT = Vector2D(round, round); |
