#version 330 core
layout(triangles) in;
layout(triangle_strip, max_vertices=18) out;

uniform mat4 shadow_transforms[6];

out vec4 frag_pos;

void
main(void)
{
    for (int face = 0;
         face < 6;
         ++face)
    {
        gl_Layer = face;
        for (int vertex = 0;
             vertex < 3;
             ++vertex)
        {
            frag_pos = gl_in[vertex].gl_Position;
            gl_Position = shadow_transforms[face]*frag_pos;
            EmitVertex();
        }
        EndPrimitive();
    }
}