mirror of
https://github.com/markqvist/Sideband.git
synced 2024-12-28 17:09:34 -05:00
52 lines
1.6 KiB
GLSL
52 lines
1.6 KiB
GLSL
/*
|
|
The shader code has been refactored for the KivyMD library.
|
|
You can find the original code of this shaders at the links:
|
|
|
|
https://www.shadertoy.com/view/WtdSDs
|
|
https://www.shadertoy.com/view/fsdyzB
|
|
|
|
Additional thanks to iq for optimizing conditional block for individual
|
|
corner radius:
|
|
https://iquilezles.org/articles/distfunctions
|
|
*/
|
|
|
|
// For lower opengl version
|
|
|
|
float custom_smoothstep(float a, float b, float x) {
|
|
float t = clamp((x - a) / (b - a), 0.0, 1.0);
|
|
return t * t * (3.0 - 2.0 * t);
|
|
}
|
|
|
|
float roundedBoxSDF(vec2 centerPosition, vec2 size, vec4 radius) {
|
|
radius.xy = (centerPosition.x > 0.0) ? radius.xy : radius.zw;
|
|
radius.x = (centerPosition.y > 0.0) ? radius.x : radius.y;
|
|
|
|
vec2 q = abs(centerPosition) - (size - shadow_softness) + radius.x;
|
|
return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - radius.x;
|
|
}
|
|
|
|
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
// Smooth the result (free antialiasing).
|
|
float edge0 = 0.0;
|
|
float smoothedAlpha = 1.0 - custom_smoothstep(0.0, edge0, 1.0);
|
|
// Get the resultant shape.
|
|
vec4 quadColor = mix(
|
|
vec4(
|
|
shadow_color[0],
|
|
shadow_color[1],
|
|
shadow_color[2],
|
|
0.0
|
|
),
|
|
shadow_color,
|
|
smoothedAlpha
|
|
);
|
|
// Apply a drop shadow effect.
|
|
float shadowDistance = roundedBoxSDF(
|
|
fragCoord.xy - mouse.xy - (size / 2.0), size / 2.0, shadow_radius
|
|
);
|
|
float shadowAlpha = 1.0 - custom_smoothstep(
|
|
-shadow_softness, shadow_softness, shadowDistance
|
|
);
|
|
fragColor = mix(quadColor, shadow_color, shadowAlpha - smoothedAlpha);
|
|
}
|