Вопрос

Шейдеры могут иметь множество разных имен и атрибутов.Как я могу создать систему, которая работает в общем случае, чтобы мне не нужно было заранее знать имя каждого шейдера и жестко закодировать его в коде, чтобы получить его местоположение.Я использую OpenGL.

Это было полезно?

Решение

К сожалению, в какой-то момент вам понадобится знать, каковы имена униформ в шейдере и к чему они относятся...просто нет никакого способа обойти это.

Большинство графических/игровых движков работают по соглашению: определенные формы устанавливаются движком, и шейдеры используют их по мере необходимости.Некоторые добавят конфигурацию, чтобы каждый шейдер мог указать, какие униформы ему требуются, но обычно имена по-прежнему задаются по соглашению.

Другие советы

Используйте соглашение об именах или самостоятельно проанализируйте строку шейдера, чтобы получить тип, символ и необязательный спецификатор хранилища.Первый вариант возлагает ответственность на программиста шейдеров, а второй — на прикладного программиста.Такой код можно сделать намного более элегантным и эффективным, используя расширение GL_ARB_uniform_buffer_object, который был повышен до ядра в OpenGL 3.1

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top