uniform sampler2D tex; #pragma MSP stage(vertex) layout(location=0) in vec4 position; void main() { out vec2 texcoord = position.xy*0.5+0.5; gl_Position = position; } #pragma MSP stage(geometry) layout(triangles) in; layout(triangle_strip, max_vertices=3) out; void main() { passthrough[0]; EmitVertex(); passthrough[1]; EmitVertex(); passthrough[2]; EmitVertex(); } #pragma MSP stage(fragment) layout(location=0) out vec4 frag_color; void main() { frag_color = texture(tex, texcoord); } /* Expected output: vertex layout(location=0) in vec4 position; layout(location=0) out vec2 texcoord; void main() { texcoord = position.xy*0.5+0.5; gl_Position = position; } */ /* Expected output: geometry layout(triangles) in; layout(triangle_strip, max_vertices=3) out; layout(location=0) in vec2 texcoord[]; layout(location=0) out vec2 _gs_out_texcoord; void main() { gl_Position = gl_in[0].gl_Position; _gs_out_texcoord = texcoord[0]; EmitVertex(); gl_Position = gl_in[1].gl_Position; _gs_out_texcoord = texcoord[1]; EmitVertex(); gl_Position = gl_in[2].gl_Position; _gs_out_texcoord = texcoord[2]; EmitVertex(); } */ /* Expected output: fragment layout(location=0) uniform sampler2D tex; layout(location=0) out vec4 frag_color; layout(location=0) in vec2 _gs_out_texcoord; void main() { frag_color = texture(tex, _gs_out_texcoord); } */