#version 420
// vi: ft=glsl
out gl_PerVertex {
vec4 gl_Position;
};
layout(location = 0) out vec2 texture_coords;
layout(set = 0, binding = 0) uniform WindowUniforms {
vec2 image_size;
mat3 transform;
};
const vec2 POSITIONS[6] = vec2[6](
vec2(0.0, 0.0),
vec2(1.0, 0.0),
vec2(1.0, 1.0),
vec2(0.0, 0.0),
vec2(1.0, 1.0),
vec2(0.0, 1.0)
);
// Flip screen space coordinates to put the origin at the top left corner,
// and have the positive Y axis pointing down.
const mat3 flip_y = mat3(vec3(1.0, 0.0, 0.0), vec3(0.0, -1.0, 0.0), vec3(0.0, 1.0, 1.0));
void main() {
vec2 position = (flip_y * transform * vec3(POSITIONS[gl_VertexIndex], 1.0)).xy;
// Adjust for weird screen space going from -1.0 to 1.0 instead of 0.0 to 1.0.
position = 2.0 * position - vec2(1.0, 1.0);
gl_Position = vec4(position, 0.0, 1.0);
texture_coords = (image_size) * POSITIONS[gl_VertexIndex];
}