// Gaussian blur shader for Sequence v2 #include "sequence_uniforms" #include "render/fullscreen_uv_vs" // <- VertexOutput + vs_main @group(0) @binding(0) var input_sampler: sampler; @group(0) @binding(1) var input_texture: texture_2d; @group(0) @binding(2) var uniforms: UniformsSequenceParams; struct GaussianBlurParams { direction: vec2, radius: f32, _pad: f32, }; @group(0) @binding(3) var params: GaussianBlurParams; @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { let texel_size = 1.0 / uniforms.resolution; let offset = params.direction * texel_size; var color = vec4(0.0); let kernel_size = i32(params.radius); var weight_sum = 0.0; for (var i = -kernel_size; i <= kernel_size; i++) { let sample_offset = f32(i) * offset; let weight = exp(-f32(i * i) / (2.0 * params.radius * params.radius)); color += textureSample(input_texture, input_sampler, in.uv + sample_offset) * weight; weight_sum += weight; } return color / weight_sum; }