struct Sprite { matrix: mat4x4f, }; struct VsUniform { mvp: mat4x4f, }; struct VsI { //Vertex shader input @builtin(instance_index) instance: u32, @location(0) position: vec2f, @location(1) uv: vec2f, }; struct Vs2Fs { //Vertex shader to Fragment shader @builtin(position) pos: vec4f, @location(0) @interpolate(linear) uv: vec2f, }; struct FsO { //Fragment shader output @location(0) color: vec4f, }; @binding(0) @group(0) var vs_uniforms: VsUniform; @binding(0) @group(1) var tex: texture_2d; @binding(1) @group(1) var samp: sampler; @binding(2) @group(1) var sprites: array; @vertex fn vs_main(input: VsI) -> Vs2Fs { var output: Vs2Fs; output.pos = vec4f(input.position.x, input.position.y, 0, 0) * sprites[input.instance].matrix * vs_uniforms.mvp; output.uv = input.uv; return output; } @fragment fn fs_main(input: Vs2Fs) -> FsO { var output: FsO; output.color = textureSample(tex, samp, input.uv); return output; }