From a2f9b6da21e39e6d8c90e6ae0bb20e96d6aab1d5 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Wed, 16 Apr 2025 20:12:29 +0200 Subject: [PATCH] wg_engine: fix drop shadow blended color The shadow color must be premultiplied. To avoid repeating this operation in the fragment shader, the passed shadow color is already premultiplied. --- src/renderer/wg_engine/tvgWgShaderTypes.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/renderer/wg_engine/tvgWgShaderTypes.cpp b/src/renderer/wg_engine/tvgWgShaderTypes.cpp index 9ca99e3c..8a8700ed 100644 --- a/src/renderer/wg_engine/tvgWgShaderTypes.cpp +++ b/src/renderer/wg_engine/tvgWgShaderTypes.cpp @@ -230,10 +230,13 @@ void WgShaderTypeEffectParams::update(const RenderEffectDropShadow* dropShadow, params[1] = std::min(WG_GAUSSIAN_KERNEL_SIZE_MAX / kernel, scale); params[2] = kernel; params[3] = 0.0f; - params[4] = dropShadow->color[0] / 255.0f; // red - params[5] = dropShadow->color[1] / 255.0f; // green - params[6] = dropShadow->color[2] / 255.0f; // blue + params[7] = dropShadow->color[3] / 255.0f; // alpha + //Color is premultiplied to avoid multiplication in the fragment shader: + params[4] = dropShadow->color[0] / 255.0f * params[7]; // red + params[5] = dropShadow->color[1] / 255.0f * params[7]; // green + params[6] = dropShadow->color[2] / 255.0f * params[7]; // blue + params[8] = offset.x; params[9] = offset.y; extend = params[2] * 2; // kernel