@group(0) @binding(0) var smplr: sampler; @group(0) @binding(1) var txt: texture_2d; #include "common_uniforms" struct DistortParams { strength: f32, speed: f32, }; @group(0) @binding(2) var uniforms: CommonUniforms; @group(0) @binding(3) var params: DistortParams; #include "render/fullscreen_vs" @fragment fn fs_main(@builtin(position) p: vec4) -> @location(0) vec4 { let uv = p.xy / uniforms.resolution; let dist = params.strength * uniforms.audio_intensity * sin(uv.y * 20.0 + uniforms.time * params.speed * 5.0); return textureSample(txt, smplr, uv + vec2(dist, 0.0)); }