Шейдер вызывает зависание программы на 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);
}