summaryrefslogtreecommitdiff
path: root/src/shader/particle.wgsl
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2026-08-25 00:32:16 -0700
committerKai Stevenson <kai@kaistevenson.com>2026-08-25 00:32:16 -0700
commita779011b9048cdda04887c77e20ee8936f332a7a (patch)
tree6a771ff692d1717967755cc56e4534a582dd117a /src/shader/particle.wgsl
parent9cb48c504ddb3882f39e2b17048f0593316a95ce (diff)
vfx pipeline
Diffstat (limited to 'src/shader/particle.wgsl')
-rw-r--r--src/shader/particle.wgsl11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/shader/particle.wgsl b/src/shader/particle.wgsl
index 3dd61a9..227468b 100644
--- a/src/shader/particle.wgsl
+++ b/src/shader/particle.wgsl
@@ -14,8 +14,8 @@ struct Particle {
@group(0) @binding(2) var<storage, read> particles: array<Particle>;
struct VertexOutput {
- @builtin(position) clip_position: vec4<f32>,
- @location(0) world: vec2<f32>,
+ @builtin(position) clip_position: vec4f,
+ @location(0) world: vec2f,
@location(1) @interpolate(flat) instance: u32,
@location(2) @interpolate(flat) material: u32,
@location(3) @interpolate(flat) life: f32,
@@ -29,7 +29,7 @@ fn vs_main(
let particle = particles[n];
// (0,0),(1,0),(0,1),(1,1)
- let corner = vec2<f32>(f32(i & 1u), f32((i >> 1u) & 1u));
+ let corner = vec2f(f32(i & 1u), f32((i >> 1u) & 1u));
let world = particle.position + corner;
var out: VertexOutput;
@@ -43,9 +43,10 @@ fn vs_main(
}
@fragment
-fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
+fn fs_main(in: VertexOutput) -> @location(0) vec4f {
let particle = particles[in.instance];
// TODO can pack more in here and shift
let c = palette[in.material];
- return vec4<f32>(c.r, c.g, c.b, c.a * smoothstep(0.0, 1, in.life));
+ // if life is less than 1, smoothly reduce alpha to 0
+ return vec4f(c.r, c.g, c.b, c.a * smoothstep(0.0, 1, in.life));
}