struct VertexShaderOut { @builtin(position) position: vec4, @location(0) texcoord: vec2 } struct Uniforms { scale: vec2f, offset: vec2f } @group(0) @binding(2) var uni: Uniforms; @vertex fn vs( @builtin(vertex_index) vertexIndex : u32 ) -> VertexShaderOut { let pos = array( vec2(0.0, 0.0), vec2(1.0, 0.0), vec2(0.0, 1.0), vec2(0.0, 1.0), vec2(1.0, 0.0), vec2(1.0, 1.0) ); var vsOutput: VertexShaderOut; let xy = pos[vertexIndex]; vsOutput.position = vec4f(xy * uni.scale + uni.offset, 0.0, 1.0); vsOutput.texcoord = vec2f(xy.x, 1.0 - xy.y); return vsOutput; } @group(0) @binding(0) var tex_sampler: sampler; @group(0) @binding(1) var tex: texture_2d; @fragment fn fs(fsInput: VertexShaderOut) -> @location(0) vec4 { return textureSample(tex, tex_sampler, fsInput.texcoord); }