#version 330 core layout (location = 0) in vec2 p0; layout (location = 1) in vec2 p1; layout (location = 2) in vec4 color; uniform mat4 projection; out vec4 fragment_color; const vec2 rectangle_vertices[4] = vec2[]( vec2(-1, -1), vec2(-1, 1), vec2( 1, -1), vec2( 1, 1) ); void main() { vec2 dest_half_size = (p1 - p0) / 2; vec2 dest_center = (p1 + p0) / 2; vec2 dest_position = rectangle_vertices[gl_VertexID] * dest_half_size + dest_center; gl_Position = projection * vec4( dest_position, 0, 1 ); fragment_color = color; }