bevy-aqua-waves 0.1.2

Aqua wave producers: Gerstner component bands and JONSWAP/FFT AnimWaves compute.
// Consolidates the alternating ShapeCombine outputs into AnimWaves.

const LOD_COUNT: u32 = 5u;

@group(0) @binding(0) var scratch_a: texture_2d_array<f32>;
@group(0) @binding(1) var scratch_b: texture_2d_array<f32>;
@group(0) @binding(2) var output: texture_storage_2d_array<rgba16float, write>;

@compute @workgroup_size(8, 8, 1)
fn gather(@builtin(global_invocation_id) id: vec3<u32>) {
    if any(id.xy >= vec2<u32>(256u)) || id.z >= LOD_COUNT {
        return;
    }
    let value = select(
        textureLoad(scratch_a, vec2<i32>(id.xy), i32(id.z), 0),
        textureLoad(scratch_b, vec2<i32>(id.xy), i32(id.z), 0),
        id.z % 2u == 0u,
    );
    textureStore(output, vec2<i32>(id.xy), i32(id.z), value);
}