#version 150
uniform int instance_count;
layout(points) in;
layout(triangle_strip, max_vertices = 4) out;
in int instance_id[];
out vec3 position;
out vec2 tex_coord;
void quad_vertex_(vec3 pos, int layer)
{
position = pos;
tex_coord = pos.xy * 0.5 + 0.5;
gl_Position = vec4(pos, 1);
gl_Layer = layer;
gl_PrimitiveID = gl_PrimitiveIDIn;
EmitVertex();
}
void main()
{
float z = (instance_id[0] + 0.5) / instance_count * 2 - 1;
quad_vertex_(vec3(-1, -1, z), instance_id[0]);
quad_vertex_(vec3(-1, +1, z), instance_id[0]);
quad_vertex_(vec3(+1, -1, z), instance_id[0]);
quad_vertex_(vec3(+1, +1, z), instance_id[0]);
EndPrimitive();
}