#version 440 layout(location = 0) in vec2 qt_TexCoord0; layout(location = 0) out vec4 fragColor; layout(std140, binding = 0) uniform buf { mat4 qt_Matrix; float qt_Opacity; vec2 size; vec4 radii; vec4 color; }; layout(binding = 1) uniform sampler2D source; void main() { vec2 p = qt_TexCoord0 * size - size * 0.5; float radius = p.x < 0.0 ? (p.y < 0.0 ? radii.x : radii.w) : (p.y < 0.0 ? radii.y : radii.z); vec2 q = abs(p) - (size * 0.5 - radius); float d = length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - radius; float mask = 1.0 - smoothstep(-0.5, 0.5, d); vec4 content = texture(source, qt_TexCoord0); vec4 blended = content + color * (1.0 - content.a); fragColor = blended * mask * qt_Opacity; }