uniform mat4 mvp; uniform int mask_index; #pragma MSP stage(vertex) layout(location=0) in vec4 position; layout(location=1) in vec4 color; out VertexOut { vec4 color; vec4 mask_color; } vs_out; void main() { int index = mask_index%4; vs_out.color = color; vs_out.color[index] = 0.0; vs_out.mask_color = vec4(1.0); vs_out.mask_color[index] = 1.0; gl_Position = mvp*position; } #pragma MSP stage(fragment) layout(location=0) out vec4 frag_color; void main() { frag_color = vs_out.color+vs_out.mask_color; } // Target API: OpenGL /* Expected output: vertex layout(location=0) uniform mat4 mvp; layout(location=4) uniform int mask_index; layout(location=0) in vec4 position; layout(location=1) in vec4 color; out VertexOut { vec4 color; vec4 mask_color; } vs_out; void main() { int index = mask_index%4; vs_out.color = color; vs_out.color[index] = 0.0; vs_out.mask_color = vec4(1.0); vs_out.mask_color[index] = 1.0; gl_Position = mvp*position; gl_Position.z = gl_Position.z*2.0-gl_Position.w; } /* /* Expected output: fragment layout(location=0) out vec4 frag_color; in VertexOut { vec4 color; vec4 mask_color; } vs_out; void main() { frag_color = vs_out.color+vs_out.mask_color; } */