uniform mat4 vp_matrix; uniform sampler2D tex; #pragma MSP stage(vertex) layout(location=0) in vec4 position; layout(location=1) in vec2 texcoord; layout(location=2) in vec4 instance_transform[3]; void main() { passthrough; mat4 model_matrix = transpose(mat4(instance_transform[0], instance_transform[1], instance_transform[2], vec4(0.0, 0.0, 0.0, 1.0))); gl_Position = vp_matrix*model_matrix*position; } #pragma MSP stage(geometry) layout(triangles) in; layout(triangles, max_vertices=3) out; void main() { for(int i=0; i<3; ++i) { passthrough[i]; EmitVertex(); } } #pragma MSP stage(fragment) layout(location=0) out vec4 frag_color; void main() { frag_color = texture(tex, texcoord); } /* Expected output: vertex uniform mat4 vp_matrix; layout(location=0) in vec4 position; layout(location=1) in vec2 texcoord; layout(location=2) in vec4 instance_transform[3]; out vec2 _vs_out_texcoord; void main() { _vs_out_texcoord = texcoord; gl_Position = vp_matrix*transpose(mat4(instance_transform[0], instance_transform[1], instance_transform[2], vec4(0.0, 0.0, 0.0, 1.0)))*position; } */ /* Expected output: geometry layout(triangles) in; layout(triangles, max_vertices=3) out; in vec2 _vs_out_texcoord[]; out vec2 _gs_out_texcoord; void main() { for(int i = 0; i<3; ++i) { gl_Position = gl_in[i].gl_Position; _gs_out_texcoord = _vs_out_texcoord[i]; EmitVertex(); } } */ /* Expected output: fragment uniform sampler2D tex; layout(location=0) out vec4 frag_color; in vec2 _gs_out_texcoord; void main() { frag_color = texture(tex, _gs_out_texcoord); } */