#version 330 core layout (location = 0) in vec2 aScreenCoord; layout (location = 1) in vec2 aXYOffset; layout (location = 2) in vec4 aColor; layout (location = 3) in int aThreshold; layout (location = 4) in ivec2 aTimeRange; uniform mat4 uMVPMatrix; uniform mat4 uMapMatrix; uniform vec2 uMapScreenCoord; out VertexData { int threshold; vec3 texCoord; vec4 color; ivec2 timeRange; int displayed; } vsOut; smooth out vec4 color; void main() { // Always set displayed to true vsOut.displayed = 1; // Pass the threshold and time range to the geometry shader vsOut.threshold = aThreshold; vsOut.timeRange = aTimeRange; // Pass the color to the geometry and fragment shaders vsOut.color = aColor; color = aColor; vec2 p = aScreenCoord - uMapScreenCoord; // Transform the position to screen coordinates gl_Position = uMapMatrix * vec4(p, 0.0f, 1.0f) + uMVPMatrix * vec4(aXYOffset, 0.0f, 0.0f); }