#version 330 core layout (location = 0) in vec2 aPos; layout (location = 1) in vec2 aTexCoords; out vec2 TexCoords; uniform vec2 screenSize; uniform vec2 pixelPos; uniform vec2 pixelScale; uniform float z; uniform float rotation; uniform int uvMode = 0; // 0 = stretch, 1 = tile uniform vec3 tileScale = vec3(1.0); uniform vec2 uvOffset = vec2(0.0); void main() { vec2 unitPos = aPos * 0.5 + 0.5; vec2 pixelPosTopLeft = pixelPos + unitPos * pixelScale; vec2 ndc = (pixelPosTopLeft / screenSize) * 2.0 - 1.0; ndc.y = -ndc.y; gl_Position = vec4(ndc, 0.0f, 1.0f); // Screen y runs down here, so flip v to keep images the right way up vec2 uv = vec2(aTexCoords.x, 1.0 - aTexCoords.y); TexCoords = (uvMode == 1 ? uv * tileScale.xy : uv) + uvOffset; }