struct Uniforms { u_scale : vec2, u_offset : vec2, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutputs { @location(0) texcoords : vec2, @builtin(position) position : vec4, } @vertex fn vs_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutputs { var texcoord = array, 3>(vec2(-(0.5), 0.0), vec2(1.5, 0.0), vec2(0.5, 2.0)); var output : VertexOutputs; output.position = vec4(((texcoord[VertexIndex] * 2.0) - vec2(1.0, 1.0)), 0.0, 1.0); var flipY = (uniforms.u_scale.y < 0.0); if (flipY) { output.texcoords = ((((texcoord[VertexIndex] * uniforms.u_scale) + uniforms.u_offset) * vec2(1.0, -(1.0))) + vec2(0.0, 1.0)); } else { output.texcoords = ((((texcoord[VertexIndex] * vec2(1.0, -(1.0))) + vec2(0.0, 1.0)) * uniforms.u_scale) + uniforms.u_offset); } return output; } @binding(1) @group(0) var mySampler : sampler; @binding(2) @group(0) var myTexture : texture_2d; @fragment fn fs_main(@location(0) texcoord : vec2) -> @location(0) vec4 { var clampedTexcoord = clamp(texcoord, vec2(0.0, 0.0), vec2(1.0, 1.0)); if (!(all((clampedTexcoord == texcoord)))) { discard; } var srcColor = vec4(0); return srcColor; }