summaryrefslogtreecommitdiff
path: root/shaders
diff options
context:
space:
mode:
authorcursed22bc <admin@pixeldawn.org>2026-03-08 23:15:16 +0200
committercursed22bc <admin@pixeldawn.org>2026-03-08 23:15:16 +0200
commit97d0d1ecc0cfd5516cfad2d477faa4d35992e7ba (patch)
tree5ba61a59723d5c9ceb8059388d35bdcb069af743 /shaders
parentaeb596379bbf1bec84efb294ff5bbbee922364ba (diff)
liquid shader and basic text render
Diffstat (limited to 'shaders')
-rw-r--r--shaders/liquid.glsl47
1 files changed, 47 insertions, 0 deletions
diff --git a/shaders/liquid.glsl b/shaders/liquid.glsl
new file mode 100644
index 0000000..9078248
--- /dev/null
+++ b/shaders/liquid.glsl
@@ -0,0 +1,47 @@
+extern Image scene;
+extern number time;
+extern vec2 resolution;
+extern vec2 splashCenter;
+extern number splashTime;
+
+float getOffsetStrength(float t, vec2 dir) {
+ float maxRadius = 0.3;
+ float d = length(dir) - maxRadius * t;
+ d *= 1.0 - smoothstep(0.0, 0.05, abs(d));
+ d *= smoothstep(0.0, 0.05, t);
+ d *= 1.0 - smoothstep(0.5, 1.0, t);
+ return d;
+}
+
+vec4 effect(vec4 color, Image tex, vec2 texture_coords, vec2 screen_coords) {
+ vec2 uv = screen_coords / resolution;
+
+ // waves
+ float x = sin(uv.y * 2.56) * 0.05 * sin(time * 0.4);
+ float y = sin(uv.x * 2.56) * 0.05 * cos(time * 0.4);
+ vec2 offset = vec2(x, y);
+
+ // shockwave
+ vec2 dir = splashCenter - uv;
+ float dist = length(dir);
+ float t = splashTime * (1.0 - smoothstep(0.0, 0.3, dist));
+ t = pow(max(0.0, t), 1.0 / 1.5);
+
+ float rD = getOffsetStrength(t + 0.02, dir);
+ float gD = getOffsetStrength(t, dir);
+ float bD = getOffsetStrength(t - 0.02, dir);
+
+ dir = normalize(dir + vec2(0.0001));
+ vec2 uvR = clamp(uv + offset + dir * rD, vec2(0.0, 0.0), vec2(1.0, 1.0));
+ vec2 uvG = clamp(uv + offset + dir * gD, vec2(0.0, 0.0), vec2(1.0, 1.0));
+ vec2 uvB = clamp(uv + offset + dir * bD, vec2(0.0, 0.0), vec2(1.0, 1.0));
+
+ float red = Texel(scene, uvR).r;
+ float green = Texel(scene, uvG).g;
+ float blue = Texel(scene, uvB).b;
+
+ vec4 col = vec4(red, green, blue, color.a);
+ float shading = gD * 8.0;
+ col.rgb += shading;
+ return col;
+}