diff --git a/src/scenegraph/shadowedborderrectangle.frag b/src/scenegraph/shadowedborderrectangle.frag --- a/src/scenegraph/shadowedborderrectangle.frag +++ b/src/scenegraph/shadowedborderrectangle.frag @@ -62,9 +62,9 @@ lowp vec4 col = vec4(0.0); // Calculate the shadow's distance field. - lowp float shadow = sdf_rounded_rectangle(uv, (aspect + borderWidth) * inverse_scale, offset * inverse_scale, vec4(shadow_radius * inverse_scale)); + lowp float shadow = sdf_rounded_rectangle(uv, (aspect + borderWidth) * inverse_scale, offset * 2.0 * inverse_scale, vec4(shadow_radius * inverse_scale)); // Render it, interpolating the color over the distance. - col = mix(col, shadowColor * sign(size), shadowColor.a * (1.0 - smoothstep(-size * 0.5, size * 0.5, shadow))); + col = mix(col, shadowColor * sign(size), 1.0 - smoothstep(-size * 0.5, size * 0.5, shadow)); // Scale corrected corner radius lowp vec4 corner_radius = vec4(radius * inverse_scale); @@ -77,7 +77,7 @@ col = sdf_render(outer_rect, col, vec4(0.0), 1.0); // Then, render it again but this time with the proper color and properly alpha blended. - col = sdf_render(outer_rect, col, borderColor, borderColor.a); + col = sdf_render(outer_rect, col, borderColor, 1.0); // Calculate the inner rectangle distance field. // This uses a reduced corner radius because the inner corners need to be smaller than the outer corners. @@ -88,7 +88,7 @@ col = sdf_render(inner_rect, col, vec4(0.0), 1.0); // Finally, render the inner rectangle. - col = sdf_render(inner_rect, col, color, color.a); + col = sdf_render(inner_rect, col, color, 1.0); gl_FragColor = col * opacity; } diff --git a/src/scenegraph/shadowedborderrectangle_core.frag b/src/scenegraph/shadowedborderrectangle_core.frag --- a/src/scenegraph/shadowedborderrectangle_core.frag +++ b/src/scenegraph/shadowedborderrectangle_core.frag @@ -24,6 +24,8 @@ in lowp vec2 uv; +out lowp vec4 out_color; + const lowp float minimum_shadow_radius = 0.05; const lowp float smoothing = 0.001; @@ -62,9 +64,9 @@ lowp vec4 col = vec4(0.0); // Calculate the shadow's distance field. - lowp float shadow = sdf_rounded_rectangle(uv, (aspect + borderWidth) * inverse_scale, offset * inverse_scale, vec4(shadow_radius * inverse_scale)); + lowp float shadow = sdf_rounded_rectangle(uv, (aspect + borderWidth) * inverse_scale, offset * 2.0 * inverse_scale, vec4(shadow_radius * inverse_scale)); // Render it, interpolating the color over the distance. - col = mix(col, shadowColor * sign(size), shadowColor.a * (1.0 - smoothstep(-size * 0.5, size * 0.5, shadow))); + col = mix(col, shadowColor * sign(size), 1.0 - smoothstep(-size * 0.5, size * 0.5, shadow)); // Scale corrected corner radius lowp vec4 corner_radius = vec4(radius * inverse_scale); @@ -77,7 +79,7 @@ col = sdf_render(outer_rect, col, vec4(0.0), 1.0); // Then, render it again but this time with the proper color and properly alpha blended. - col = sdf_render(outer_rect, col, borderColor, borderColor.a); + col = sdf_render(outer_rect, col, borderColor, 1.0); // Calculate the inner rectangle distance field. // This uses a reduced corner radius because the inner corners need to be smaller than the outer corners. @@ -88,7 +90,7 @@ col = sdf_render(inner_rect, col, vec4(0.0), 1.0); // Finally, render the inner rectangle. - col = sdf_render(inner_rect, col, color, color.a); + col = sdf_render(inner_rect, col, color, 1.0); - gl_FragColor = col * opacity; + out_color = col * opacity; } diff --git a/src/scenegraph/shadowedrectangle.frag b/src/scenegraph/shadowedrectangle.frag --- a/src/scenegraph/shadowedrectangle.frag +++ b/src/scenegraph/shadowedrectangle.frag @@ -49,9 +49,9 @@ lowp vec4 col = vec4(0.0); // Calculate the shadow's distance field. - lowp float shadow = sdf_rounded_rectangle(uv, aspect * inverse_scale, offset * inverse_scale, vec4(shadowRadius * inverse_scale)); + lowp float shadow = sdf_rounded_rectangle(uv, aspect * inverse_scale, offset * 2.0 * inverse_scale, vec4(shadowRadius * inverse_scale)); // Render it, interpolating the color over the distance. - col = mix(col, shadowColor * sign(size), shadowColor.a * (1.0 - smoothstep(-size * 0.5, size * 0.5, shadow))); + col = mix(col, shadowColor * sign(size), 1.0 - smoothstep(-size * 0.5, size * 0.5, shadow)); // Calculate the main rectangle distance field. lowp float rect = sdf_rounded_rectangle(uv, aspect * inverse_scale, vec2(0.0), vec4(radius * inverse_scale)); @@ -63,7 +63,7 @@ col = mix(col, vec4(0.0), 1.0 - smoothstep(0.001 - g, 0.001 + g, rect)); // Then, render it again but this time with the proper color and properly alpha blended. - col = mix(col, color, color.a * (1.0 - smoothstep(0.001 - g, 0.001 + g, rect))); + col = mix(col, color, 1.0 - smoothstep(0.001 - g, 0.001 + g, rect)); gl_FragColor = col * opacity; } diff --git a/src/scenegraph/shadowedrectangle_core.frag b/src/scenegraph/shadowedrectangle_core.frag --- a/src/scenegraph/shadowedrectangle_core.frag +++ b/src/scenegraph/shadowedrectangle_core.frag @@ -19,6 +19,8 @@ in lowp vec2 uv; +out lowp vec4 out_color; + const lowp float minimum_shadow_radius = 0.05; // Calculate the distance to a rectangle with rounded corners. @@ -49,9 +51,9 @@ lowp vec4 col = vec4(0.0); // Calculate the shadow's distance field. - lowp float shadow = sdf_rounded_rectangle(uv, aspect * inverse_scale, offset * inverse_scale, vec4(shadowRadius * inverse_scale)); + lowp float shadow = sdf_rounded_rectangle(uv, aspect * inverse_scale, offset * 2.0 * inverse_scale, vec4(shadowRadius * inverse_scale)); // Render it, interpolating the color over the distance. - col = mix(col, shadowColor * sign(size), shadowColor.a * (1.0 - smoothstep(-size * 0.5, size * 0.5, shadow))); + col = mix(col, shadowColor * sign(size), 1.0 - smoothstep(-size * 0.5, size * 0.5, shadow)); // Calculate the main rectangle distance field. lowp float rect = sdf_rounded_rectangle(uv, aspect * inverse_scale, vec2(0.0), vec4(radius * inverse_scale)); @@ -63,7 +65,7 @@ col = mix(col, vec4(0.0), 1.0 - smoothstep(0.001 - g, 0.001 + g, rect)); // Then, render it again but this time with the proper color and properly alpha blended. - col = mix(col, color, color.a * (1.0 - smoothstep(0.001 - g, 0.001 + g, rect))); + col = mix(col, color, 1.0 - smoothstep(0.001 - g, 0.001 + g, rect)); - gl_FragColor = col * opacity; + out_color = col * opacity; } diff --git a/src/scenegraph/shadowedrectanglenode.cpp b/src/scenegraph/shadowedrectanglenode.cpp --- a/src/scenegraph/shadowedrectanglenode.cpp +++ b/src/scenegraph/shadowedrectanglenode.cpp @@ -12,8 +12,8 @@ { return QColor::fromRgbF( color.redF() * color.alphaF(), - color.greenF() * color.greenF(), - color.blueF() * color.blueF(), + color.greenF() * color.alphaF(), + color.blueF() * color.alphaF(), color.alphaF() ); }