2009-07-11 5 views
0

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

ответ

2

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

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

1

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