summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/dms/Shaders/frag/ripple.frag
diff options
context:
space:
mode:
authorNippy <nippy@rp1.hu>2026-05-08 19:50:49 +0200
committerNippy <nippy@rp1.hu>2026-05-08 19:50:49 +0200
commit3462bcc46ecf74f576ea4397f16492c16bd75b10 (patch)
treec5ab7aef4498647e057bda8d49c11e5f9dda74c9 /raveos-hyprland-theme/theme-data/dms/Shaders/frag/ripple.frag
parent56616f693b4f263cbf0d47da43b67424efa6022d (diff)
downloadRaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.tar.gz
RaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.zip
raveos update
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/Shaders/frag/ripple.frag')
-rw-r--r--raveos-hyprland-theme/theme-data/dms/Shaders/frag/ripple.frag61
1 files changed, 61 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/Shaders/frag/ripple.frag b/raveos-hyprland-theme/theme-data/dms/Shaders/frag/ripple.frag
new file mode 100644
index 0000000..2552bb6
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/dms/Shaders/frag/ripple.frag
@@ -0,0 +1,61 @@
+#version 450
+
+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;
+ float widthPx;
+ float heightPx;
+ float cornerRadiusPx;
+ float rippleCenterX;
+ float rippleCenterY;
+ float rippleRadius;
+ float rippleOpacity;
+ float offsetX;
+ float offsetY;
+ float parentWidth;
+ float parentHeight;
+ vec4 rippleCol;
+} ubuf;
+
+float sdRoundRect(vec2 p, vec2 b, float r) {
+ vec2 q = abs(p) - (b - vec2(r));
+ return length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - r;
+}
+
+void main() {
+ if (ubuf.rippleOpacity <= 0.0 || ubuf.rippleRadius <= 0.0) {
+ fragColor = vec4(0.0);
+ return;
+ }
+
+ vec2 px = qt_TexCoord0 * vec2(ubuf.widthPx, ubuf.heightPx) + vec2(ubuf.offsetX, ubuf.offsetY);
+
+ float circleD = length(px - vec2(ubuf.rippleCenterX, ubuf.rippleCenterY)) - ubuf.rippleRadius;
+ float aaCircle = max(fwidth(circleD), 0.001);
+ float circleMask = 1.0 - smoothstep(-aaCircle, aaCircle, circleD);
+ if (circleMask <= 0.0) {
+ fragColor = vec4(0.0);
+ return;
+ }
+
+ float rrMask = 1.0;
+ if (ubuf.cornerRadiusPx > 0.0) {
+ vec2 halfSize = vec2(ubuf.parentWidth, ubuf.parentHeight) * 0.5;
+ float r = clamp(ubuf.cornerRadiusPx, 0.0, min(halfSize.x, halfSize.y));
+ float rrD = sdRoundRect(px - halfSize, halfSize, r);
+ float aaRR = max(fwidth(rrD), 0.001);
+ rrMask = 1.0 - smoothstep(-aaRR, aaRR, rrD);
+ }
+
+ float mask = circleMask * rrMask;
+ if (mask <= 0.0) {
+ fragColor = vec4(0.0);
+ return;
+ }
+
+ float a = ubuf.rippleCol.a * ubuf.rippleOpacity * mask * ubuf.qt_Opacity;
+ fragColor = vec4(ubuf.rippleCol.rgb * a, a);
+}