struct Varying { @location(0) uv: vec2f, @builtin(position) screen: vec4f, } @vertex fn on_vertex(@builtin(vertex_index) vi: u32) -> Varying { let uv = vec2f(vec2(vi, vi >> 1u) & vec2(1u)); let screen = vec4(uv * 2. - 1., 0., 1.); return Varying(vec2(uv.x, 1. - uv.y), screen); } @group(0) @binding(0) var field: texture_2d; @fragment fn on_fragment(in: Varying) -> @location(0) vec4f { let pos = vec2u(in.screen.xy); let state = textureLoad(field, pos, 0).x; return vec4f(f32(state)); }