#version 150 core uniform ivec2 Viewport; uniform mat3 Transform; uniform sampler2D Texture; /* TODO: instanced */ uniform vec2 Offset; uniform vec4 Atlas; uniform vec4 Plane; in vec2 Vert; out vec2 TextureCoord; void main() { vec2 planeVert = mix(Plane.sq, Plane.pt, Vert); vec3 pos = Transform * vec3(planeVert + Offset, 1.0); vec2 atlasVert = mix(Atlas.sq, Atlas.pt, Vert); TextureCoord = atlasVert / textureSize(Texture, 0); gl_Position.xy = pos.xy * vec2(2.0, -2.0) / Viewport + vec2(-1.0, 1.0); gl_Position.z = 0.0; gl_Position.w = 1.0; }