#version 420 struct S { vec3 color; }; layout(location = 0) out vec3 OutColor; flat in int u; void GetColor1(const S i) { OutColor += i.color.x; } void GetColor2(const S i, int comp) { OutColor += i.color[comp]; } void GetColor3(const S i, int comp) { OutColor += i.color[comp].x; } void GetColor4(const S i, int comp) { OutColor += i.color[comp].x; } void GetColor5(const S i, int comp) { OutColor += i.color; } void GetColor6(const S i, int comp) { OutColor += i.color.yx[comp]; } void GetColor7(const S i, int comp) { OutColor.xy += i.color.yxz.yx; } void GetColor8(const S i, int comp) { OutColor += i.color.yzx.yx.x.x; } void GetColor9(const S i, int comp) { OutColor.zxy += i.color; } void GetColor10(const S i, int comp) { OutColor.zy += i.color.xy; } void GetColor11(const S i, int comp) { OutColor.zxy.yx += i.color.xy; } void GetColor12(const S i, int comp) { OutColor[comp] += i.color.x; } void GetColor13(const S i, int comp) { OutColor.zy[comp] += i.color.x; } void GetColor14(const S i, int comp) { OutColor.zyx[comp] = i.color.x; } void main() { S s; OutColor = vec3(0.0); GetColor1(s); GetColor2(s, u); GetColor3(s, u); GetColor4(s, u); GetColor5(s, u); GetColor6(s, u); GetColor7(s, u); GetColor8(s, u); GetColor9(s, u); GetColor10(s, u); GetColor11(s, u); GetColor12(s, u); GetColor13(s, u); GetColor14(s, u); }