#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]);
}

