27 lines
758 B
GLSL
27 lines
758 B
GLSL
#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;
|
|
}
|