Я хочу сделать что-то подобное в своем шейдере геометрии:
uniform int maxOutputVert;
layout(points) in;
layout(points, max_vertices=maxOutputVert) out;
Однако при компиляции получаю ошибку:
Error: error(#132) Syntax error: 'maxOutputVert' parse error
и шейдер не компилируется.
Я мог бы понять, что для управления памятью может быть слишком сложно, если бы эта переменная менялась при каждом запуске шейдера, но здесь это был бы постоянный тщательный единичный вызов отрисовки, потому что юниформы постоянны. Это также не работает, если я определяю некоторую целочисленную константу прямо в шейдере и использую ее как счетчик max_vertices:
const int a = 5;
layout(points, max_vertices=a) out;
Выдается та же ошибка. Так есть ли способ сделать это или мне просто нужно ввести число внутри этого вызова, иначе он не скомпилируется. Если дело во втором случае, как я могу гарантировать, что не превысю максимальное количество выходных данных, запрошенное внутри основного процесса:
glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &maxoutput);
Редактировать: извините, я забыл упомянуть, что я использую ATI/AMD, а версия Catalyst 2010.1105.19.41785 (это самая стабильная, которую я пробовал...)