Шейдеры могут иметь множество разных равномерных имен + атрибутов. Как я могу создать систему, которая работает в общем случае, так что мне не нужно заранее знать имя каждой шейдерной формы и скопировать ее код, чтобы получить его местоположение. Я использую OpenGL.Как использовать шейдерную форму вообще?
ответ
К сожалению, в какой-то момент вам нужно будет знать, что такое унифицированные имена в шейдере, и к чему они относятся ... там нет никакого способа обойти это.
Большинство графических/игровых движков работают по соглашению - определенная униформа устанавливается двигателем, а шейдеры используют их по мере необходимости. Некоторые добавят конфигурацию, поэтому каждый шейдер может указать, какую униформу он требует, но, как правило, имена все еще выполняются по соглашению.
Используйте соглашение об именах или самостоятельно проанализируйте строку шейдера, чтобы получить тип, символ и дополнительный спецификатор хранилища. Первый вариант возлагает ответственность на программиста шейдеров, в то время как последнее решение ставит нагрузку на прикладного программиста. Такой код можно сделать намного более элегантным и эффективным с помощью удлинителя GL _ ARB _ uniform _ buffer _ object, который был повышен до ядра в OpenGL 3.1.