#version 330 core uniform float particleSize; layout(points) in; layout(triangle_strip, max_vertices = 4) out; in Vertex { vec2 texCoord; vec4 colour; } IN []; out Vertex { vec2 texCoord; vec4 colour; } OUT; void main() { for (int i = 0; i < gl_in.length(); ++i) { OUT.colour = IN[i].colour; // Top Right gl_Position = gl_in [i].gl_Position; gl_Position.x += particleSize; gl_Position.y += particleSize; OUT.texCoord = vec2(1,0); EmitVertex(); // Top Left gl_Position = gl_in[i].gl_Position; gl_Position.x -= particleSize; gl_Position.y += particleSize; OUT.texCoord = vec2(0,0); EmitVertex(); // Bottom Right gl_Position = gl_in[i].gl_Position; gl_Position.x += particleSize; gl_Position -= particleSize; OUT.texCoord = vec2(1,1); EmitVertex(); // Bottom Left gl_Position = gl_in[i].gl_Position; gl_Position.x -= particleSize; gl_Position.y -= particleSize; OUT.texCoord = vec2(0,1); EmitVertex(); EndPrimitive(); } }