#version 450 layout(push_constant, std430) uniform Pc { //vec2 p[4]; // TL TR BL BR vec2 p0; vec2 p1; vec2 p2; vec2 p3; vec2 bp0; // TL in atlas, BR in atlas vec2 bp1; // TL in atlas, BR in atlas } pc; vec2 positions[3] = vec2[]( vec2(0, 0), vec2(1, 0), vec2(0, 1) ); layout(location = 0) out vec2 uv; void main() { int e[] = {0,1,2,1,3,2}; vec2 pos; int elm = e[gl_VertexIndex]; // why musn't arrays work if(elm==0) pos = pc.p0; if(elm==1) pos = pc.p1; if(elm==2) pos = pc.p2; if(elm==3) pos = pc.p3; gl_Position = vec4(pos,0.0,1.0); if(elm % 2 == 0) uv.x = pc.bp0.x; else uv.x = pc.bp1.x; if(elm / 2 == 0) uv.y = pc.bp0.y; else uv.y = pc.bp1.y; }