struct Uniforms { camera: vec2f, zooms: vec2f } @group(0) @binding(0) var uniforms : Uniforms; struct VertexOutput { @location(0) color: vec4f, @builtin(position) pos: vec4f } @vertex fn vs_main( @location(0) pos: vec2f, @location(1) color: vec4f, @location(2) effect: u32 ) -> VertexOutput { var out: VertexOutput; switch effect { case 1u, 3u: { var v = (color.r*0.299) + (color.g*0.587) + (color.b*0.114); out.color = vec4f(v, v, v, color.a); } case 0u, 2u: { out.color = color; } default: {} } switch effect { case 0u, 1u: { out.pos = vec4f(pos, 0, 1); } case 2u, 3u: { out.pos = vec4f((pos - uniforms.camera) * uniforms.zooms, 0, 1); } default: {} } return out; } @fragment fn fs_main(v: VertexOutput) -> @location(0) vec4f { return v.color; }