Files
z-bar-qt/assets/shaders/crop_sdf.frag
T

41 lines
1.1 KiB
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 itemSize;
vec4 cropBox;
vec4 borderColor;
float cornerRadius;
float borderWidth;
float pixelScale;
};
float sdRoundBox(vec2 p, vec2 halfSize, float r) {
vec2 q = abs(p) - halfSize + r;
return length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - r;
}
void main() {
vec2 sz = itemSize * pixelScale;
vec2 p = qt_TexCoord0 * sz;
vec4 box = cropBox * pixelScale;
float r = cornerRadius * pixelScale;
float bw = borderWidth * pixelScale;
float dImage = sdRoundBox(p - sz * 0.5, sz * 0.5, r);
float dCrop = sdRoundBox(p - (box.xy + box.zw * 0.5), box.zw * 0.5, 0.0);
float d = max(dImage, dCrop);
// ramp is exactly 1 physical pixel wide
float outer = clamp(0.5 - d, 0.0, 1.0);
float inner = clamp(0.5 - (d + bw), 0.0, 1.0);
float a = outer - inner;
fragColor = vec4(borderColor.rgb, 1.0) * (borderColor.a * a * qt_Opacity);
}