summaryrefslogtreecommitdiff
path: root/src/render/OpenGL.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-05-08 15:31:12 +0100
committerGitHub <noreply@github.com>2026-05-08 15:31:12 +0100
commitac75bcab713490eb000e4fa48f7e7316c3535854 (patch)
tree9b428ae15d56cbce37fd4695c68a62f5b9956ad1 /src/render/OpenGL.cpp
parentb94f1498542be0e83fe8060a50bce5ff2d5a1c39 (diff)
renderer: fix shadow CM calculations (#14364)
Diffstat (limited to 'src/render/OpenGL.cpp')
-rw-r--r--src/render/OpenGL.cpp15
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);