Шейдер вызывает зависание программы на openGL

Попытки выполнить во фрагментном шейдере следующий код, вызывают зависание, причину которого мне так и не удалось найти.

Подскажите пожалуйста, чем вызвано зависание компьютера, при выполнении данного шейдера.

#version 330 core
                    
in vec2 TexCoord;
in vec2 Size;
uniform sampler2D imageTexture;
uniform sampler2D neuroTexture;

out vec4 FragColor;

struct neuron{
    float pixels[32*32];
    float results;
};

vec3 resultcolor()
{
    vec3 result;
    int choose[3];
    choose[0]=0;
    choose[1]=256;
    choose[2]=256*2;
    
    neuron neurons[256*3];
    
    vec2 tempcoord;
    vec2 tempcoord2;
    
    for (int i1=0; i1<256*3; i1++)
    {
        tempcoord.x = float(float(i1)/(256*3));
        neurons[i1].results = 0;
        for (int i2=0; i2<32; i2++)
        {
            tempcoord2.x = TexCoord.x+(float(15-i2))/(Size.x);
            if (tempcoord2.x<0)
            {
                tempcoord2.x = 0;
            }
            if (tempcoord2.x>1)
            {
                tempcoord2.x = 1.0;
            }
            for (int i3=0; i3<32; i3++)
            {
                tempcoord.y = (float(i2*32+i3))/(32*32);
                tempcoord2.y = TexCoord.y+(float(15-i3))/(Size.y);
                if (tempcoord2.y<0)
                {
                    tempcoord2.y = 0;
                }
                if (tempcoord2.y>1)
                {
                    tempcoord2.y = 1.0;
                }
                if (texture(imageTexture, tempcoord2).x*texture(neuroTexture, tempcoord).x>0.8)
                {
                    neurons[i1].results = neurons[i1].results+1.0;
                }
            }
        }
        
        if (i1<256)
        {
            if (neurons[i1].results>neurons[choose[0]].results)
            {
                choose[0] = i1;
            }
        }
        
        if (i1>255 && i1<256*2)
        {
            if (neurons[i1].results>neurons[choose[1]].results)
            {
                choose[1] = i1;
            }
        }
        
        if (i1>256*2-1)
        {
            if (neurons[i1].results>neurons[choose[2]].results)
            {
                choose[2] = i1;
            }
        }
    }
    
    result.x = (float(choose[0]))/256;
    result.y = (float(choose[1]-256))/256;
    result.z = (float(choose[2]-512))/256;
    
    return result;
}

void main()
{
    FragColor = vec4(resultcolor(), 1.0);
}

Ответы (0 шт):