diff options
Diffstat (limited to 'src/shader/particle.wgsl')
| -rw-r--r-- | src/shader/particle.wgsl | 11 |
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)); } |
