#version 130 uniform sampler2D sampler; varying 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; }; uniform lunarStruct1 foo; uniform lunarStruct2 foo2[5]; uniform lunarStruct3 foo3; uniform 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 * texture2D(sampler, coord); vec2[3] constructed = vec2[3](coord, vec2(scale), vec2(1.0, 2.0)); gl_FragColor += vec4(constructed[foo.i], constructed[foo.i]); }