#version 450 core #pragma include ./shared.glsl #pragma include ../misc/camera.glsl layout (location = 0) in vec2 inPosMin; layout (location = 1) in vec2 inPosMax; layout (location = 2) in vec2 inTexMin; layout (location = 3) in vec2 inTexMax; layout (location = 4) in vec4 inColor; layout (location = 2) uniform vec2 uOffset; out FragmentData fragmentData; void main() { vec2 position = vec2(0.0); vec2 texCoords = vec2(0.0); switch (gl_VertexID) { case 0: position = vec2(inPosMin.x, inPosMax.y); texCoords = vec2(inTexMin.x, inTexMax.y); break; case 1: position = vec2(inPosMin.x, inPosMin.y); texCoords = vec2(inTexMin.x, inTexMin.y); break; case 2: position = vec2(inPosMax.x, inPosMax.y); texCoords = vec2(inTexMax.x, inTexMax.y); break; case 3: position = vec2(inPosMax.x, inPosMin.y); texCoords = vec2(inTexMax.x, inTexMin.y); break; } mat4 ortho = mat4( vec4(2.0 / uCamera.size.x, 0.0, 0.0, 0.0), vec4(0.0, -2.0 / uCamera.size.y, 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0), vec4(-1.0, 1.0, 1.0, 1.0) ); gl_Position = ortho * vec4(position + uOffset, 0.0, 1.0); fragmentData.texCoords = texCoords; fragmentData.color = inColor; }