#version 400 uniform sampler2D samp2D; in vec2 coord; struct lunarStruct1 { int i; float f; }; struct lunarStruct2 { int i; float f; lunarStruct1 s1_1; }; struct lunarStruct3 { lunarStruct2 s2_1[3]; int i; float f; lunarStruct1 s1_1; }; flat in lunarStruct1 foo; flat in lunarStruct2 foo2[5]; flat in lunarStruct3 foo3; flat in int Count; void main() { float scale; int iLocal = Count; if (foo3.s2_1[1].i > 0) scale = foo2[foo3.s2_1[foo.i].i + 2 + ++iLocal].s1_1.f; else scale = foo3.s2_1[0].s1_1.f; //for (int i = 0; i < iLocal; ++i) { // scale += foo2[i].f; //} gl_FragColor = scale * texture(samp2D, coord); vec2[3] constructed = vec2[3](coord, vec2(scale), vec2(1.0, 2.0)); gl_FragColor += vec4(constructed[foo.i], constructed[foo.i]); }