bevy_enoki 0.7.0

2D Particle system plugin, that works well on wasm and mobile
#import bevy_enoki::particle_vertex_out::{ VertexOutput }

@group(1) @binding(0) var texture: texture_2d<f32>;
@group(1) @binding(1) var texture_sampler: sampler;
@group(1) @binding(2) var<uniform> frame_data: vec4<u32>;


@fragment
fn fragment(in: VertexOutput) -> @location(0) vec4<f32> {
	var out = in.color;

	let max_hframe = f32(frame_data.x);
	let max_vframe = f32(frame_data.y);

    let total_frames = max_hframe * max_vframe;
    let current_frame = floor(in.lifetime_frac * total_frames);

    let hframe = current_frame % max_hframe;
    let vframe = floor(current_frame / max_hframe);

    let frame_width = 1.0 / max_hframe;
    let frame_height = 1.0 / max_vframe;

    let u_offset = hframe * frame_width;
    let v_offset = (max_vframe - vframe - 1.0) * frame_height;

    let uv = in.uv * vec2<f32>(frame_width, frame_height) + vec2<f32>(u_offset, v_offset);
	return out * textureSample(texture, texture_sampler, uv);
}