Я записал библиотеку Perl, CAM:: PDF, с интерфейс командной строки , который может решить это. Я попытался использовать решение FDF несколько лет назад, но нашел, что оно слишком усложнило, который является, почему я записал CAM:: PDF во-первых. Моя библиотека использует несколько эвристики для замены формы требуемым текстом, таким образом, это не прекрасно. Но это работает большую часть времени, и это быстро, свободно и довольно просто для использования.
Шейдерные формы обычно реализуются аппаратным обеспечением как регистры (или иногда путем исправления значений непосредственно в микрокод шейдера, например, фрагментные шейдеры nVidia ). Таким образом, ограничение во многом зависит от реализации.
Чтобы узнать, как получить максимальное число, поддерживаемое вашей реализацией OpenGL, см. Ответ moonshadow.
Чтобы понять, где на самом деле ограничение для произвольных графических процессоров, я бы рекомендовал посмотреть, какие Версия DX, поддерживаемая графическим процессором.
Оборудование уровня DX9:
vs2_0
поддерживает 256 vec4. ps2_0
поддерживает 32 vec4. vs3_0
- 256 vec4, ps3_0
- 224 vec4. Оборудование уровня DX10:
vs4_0 / ps4_0
минимум 4096 констант на буфер констант - и у вас может быть их 16.
Короче говоря, вряд ли у вас закончится что-то, основанное на DX10.
Думаю, максимальное количество униформ определяется объемом видеопамяти, поскольку это всего лишь переменная. Обычные переменные на процессоре тоже ограничены вашей оперативной памятью, верно?
См. 4.3.5 Uniform спецификации OpenGL® Shading Language . :
Существует ограничение на количество, зависящее от реализации. хранилища для униформы, которую можно использовать для каждый тип шейдера, и если это превышено, это вызовет ошибку времени компиляции или времени компоновки. Униформа переменные, которые объявлены, но не используются, не учитываются при этом ограничении.
Он завершится ошибкой при компоновке или во время компиляции, но не при использовании программы.