| #version 310 es | |
| layout(location = 7) in vec3 c; | |
| layout(LocatioN = 3) in vec4 p; | |
| layout(location = 9) in ivec2 aiv2; | |
| out vec4 pos; | |
| out vec3 color; | |
| flat out int iout; | |
| layout(row_major) uniform; // default is now row_major | |
| layout(std140) uniform Transform { // layout of this block is std140 | |
| mat4 M1; // row_major | |
| layout(column_major) mat4 M2; // column major | |
| mat3 N1; // row_major | |
| int iuin; | |
| } tblock; | |
| uniform T2 { // layout of this block is shared | |
| bool b; | |
| mat4 t2m; | |
| }; | |
| layout(column_major) uniform T3 { // shared and column_major | |
| mat4 M3; // column_major | |
| layout(row_major) mat4 M4; // row major | |
| mat2x3 N2; // column_major | |
| layout(align=16, offset=2048) uvec3 uv3a[4]; | |
| }; | |
| in uint uiuin; | |
| struct S { | |
| vec3 c; | |
| float f; | |
| }; | |
| out S s; | |
| void main() | |
| { | |
| pos = p * (tblock.M1 + tblock.M2 + M4 + M3 + t2m); | |
| color = c * tblock.N1; | |
| iout = tblock.iuin + int(uiuin) + aiv2.y; | |
| s.c = c; | |
| s.f = p.x; | |
| if (N2[1] != vec3(1.0) || uv3a[2] != uvec3(5)) | |
| ++s.c; | |
| } |