У меня есть шейдерная программа с циклом for в геометрическом шейдере. Программа связывает (и работает) отлично, когда длина петли для записи достаточно мала. Если я увеличиваю длину, я получаю ошибку ссылки (с пустым журналом). Шейдеры компилируются в обоих случаях. Вот код геометрического шейдера (все, что я думал, что это уместно):Ошибка связи в зависимости от длины цикла
#version 330
layout (points) in;
layout (triangle_strip, max_vertices = 256) out;
...
void main()
{
...
for(int i = 0 ; i < 22 ; ++i) // <-- Works with 22, not with 23.
{
...
EmitVertex();
...
EmitVertex();
...
EmitVertex();
...
EmitVertex();
EndPrimitive();
}
}
спецификация состояние: «не являющиеся оконечные петли допускаются Последствия очень длинных или не заканчивающиеся петель зависят от платформы.» Может ли это быть зависимой от платформы ситуацией (GeForce GT 640)? По мере развития шейдерного кода максимальная длина цикла for изменилась (больше кода -> макс макс), что привело меня к подозрению, что это имеет какое-то отношение к разворачиванию цикла. Может ли кто-нибудь дать мне больше информации по этой проблеме? (Сообщите мне, если вам нужно больше кода/описания.)
Убедитесь, что вы не превысили 'GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS'. Спецификация (GL 4.5) гарантирует минимум 1024 для этого предела. – derhass