#version 420 core layout(triangles) in; in gl_PerVertex { float gl_PointSize; } gl_in[]; out gl_PerVertex { float gl_PointSize; }; layout(line_strip) out; layout(max_vertices = 127) out; layout(invocations = 4) in; uniform sampler2D s2D; in vec2 coord[]; int i; void main() { float p = gl_in[1].gl_PointSize; gl_PointSize = p; gl_ViewportIndex = 7; EmitStreamVertex(1); EndStreamPrimitive(0); EmitVertex(); EndPrimitive(); int id = gl_InvocationID; const ivec2 offsets[5] = { ivec2(0,1), ivec2(1,-2), ivec2(0,3), ivec2(-3,0), ivec2(2,1) }; vec4 v = textureGatherOffset(s2D, coord[0], offsets[i].xy); }