layout(triangles) in; layout(triangle_strip, max_vertices = 18) out; layout(binding = 8) uniform UBO { mat4 viewMatrices[6]; } ubo; in VS_OUT { vec3 FragPos; vec3 Normal; vec2 TexCoords; mat3 TBN; } vs_in[]; out VS_OUT { vec3 FragPos; vec3 Normal; vec2 TexCoords; mat3 TBN; } vs_out; void main() { for (int face = 0; face < 6; ++face) { gl_Layer = face; for (int i = 0; i < 3; ++i) { vs_out.FragPos = vs_in[i].FragPos; vs_out.Normal = vs_in[i].Normal; vs_out.TexCoords = vs_in[i].TexCoords; vs_out.TBN = vs_in[i].TBN; gl_Position = ubo.viewMatrices[face] * gl_in[i].gl_Position; EmitVertex(); } EndPrimitive(); } }