From 0396d313791af347f31d004bbf2842fb11244fac Mon Sep 17 00:00:00 2001 From: Petri Hienonen Date: Sat, 18 Oct 2025 14:24:04 +0300 Subject: Update --- shaders/default.wgsl | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 shaders/default.wgsl (limited to 'shaders') diff --git a/shaders/default.wgsl b/shaders/default.wgsl new file mode 100644 index 0000000..b721c82 --- /dev/null +++ b/shaders/default.wgsl @@ -0,0 +1,51 @@ +// shaders/default.wgsl +struct Uniforms { + i_resolution: vec3, + i_time: f32, + i_mouse: vec4, +}; + +@group(0) @binding(0) var uniforms: Uniforms; + +fn palette(t: f32) -> vec3 { + let a = vec3(0.5, 0.5, 0.5); + let b = vec3(0.5, 0.5, 0.5); + let c = vec3(1.0, 1.0, 1.0); + let d = vec3(0.263, 0.416, 0.557); + return a + b * cos(6.28318 * (c * t + d)); +} + +@vertex +fn vs_main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4 { + // Full-screen triangle + let pos = vec2( + f32(vertex_index == 0u) * 4.0 - 1.0, + f32(vertex_index == 1u) * 4.0 - 1.0 + ); + return vec4(pos, 0.0, 1.0); +} + +@fragment +fn fs_main(@builtin(position) frag_coord: vec4) -> @location(0) vec4 { + var uv = (frag_coord.xy * 2.0 - uniforms.i_resolution.xy) / uniforms.i_resolution.y; + let uv0 = uv; + let m = (uniforms.i_mouse.xy * 2.0 - uniforms.i_resolution.xy) / uniforms.i_resolution.y; + var final_color = vec3(0.0); + + for (var i: f32 = 0.0; i < 4.0; i = i + 1.0) { + uv = fract(uv * m.x) - 0.5; + + var d = length(uv) * exp(-length(uv0)); + + let col = palette(length(uv0) + i * 0.4 + uniforms.i_time * 0.4); + + d = sin(d * 8.0 + uniforms.i_time) / 8.0; + d = abs(d); + + d = pow(0.01 / d, 1.2); + + final_color += col * d; + } + + return vec4(final_color * m.y * 5.0, 1.0); +} -- cgit v1.2.3-70-g09d2