| #version 430 |
| |
| layout (triangles) in; |
| layout (triangle_strip, max_vertices = 3) out; |
| |
| // OK: different instance names is allowed |
| layout (std140, binding = 0) uniform MatrixBlock |
| { |
| mat4 uProj; |
| mat4 uWorld; |
| } uM; |
| |
| // Verify that in/out blocks with same block name work |
| in Vertex |
| { |
| vec4 v1; |
| vec4 v2; |
| } iV[3]; |
| |
| out Vertex |
| { |
| vec4 val1; |
| } oV; |
| |
| // OK: different instance names is allowed |
| layout (std140, binding = 1) uniform ColorBlock |
| { |
| vec4 color1; |
| bool b; |
| vec4 color2; |
| vec4 color3; |
| } uC; |
| |
| // OK: different instance names is allowed |
| layout (std430, binding = 1) buffer BufferBlock |
| { |
| mat4 p; |
| } uBuf; |
| |
| vec4 getWorld(int i); |
| vec4 getColor2(); |
| |
| out vec4 oColor; |
| |
| float globalF; |
| |
| void |
| main() |
| { |
| oColor = uC.color1 * getColor2(); |
| |
| globalF = 1.0; |
| |
| for (int i = 0; i < 3; i++) |
| { |
| gl_Position = uM.uProj * getWorld(i); |
| oV.val1 = uC.color1 + iV[i].v2 * globalF; |
| EmitVertex(); |
| } |
| |
| EndPrimitive(); |
| } |