Эта функция позволяет устанавливать для attribute-переменных значимые имена вместо номеров, находящихся в диапазоне от 0 до GL_MAX_VERTEX_ATTRIBS-1. Значение каждой дополнительной attribute-переменной является частью текущего состояния, как и значения основных атрибутов вершин - цвета, нормали и координат вершины. Если функцией gl UseProgramObjectARB в текущее состояние устанавливается другой программный объект, значения дополнительных атрибутов вершин для него сохраняются и имена все так же соответствуют индексам.

Соответствие имени attribute-переменной индексу дополнительного атрибута можно устанавливать в любой момент функцией gIBindAttribLocationARB. Эти соответствия становятся действительными только после вызова функции gl Li nk -ProgramARB. После успешной компоновки программного объекта эти соответствия сохраняются до следующей операции компоновки, и их значения можно получить средствами OpenGL.

Этой функцией нельзя устанавливать соответствия со стандартными атрибутами вершин OpenGL - это происходит автоматически при необходимости. Результаты любых вызовов функции gIBindAttribLocationARB проявляются только после следующей операции компоновки.

Примечания

Функцию gIBindAttribLocationARB можно вызывать перед связыванием шейдерных объектов с программным объектом. Установка соответствия индекса имени attribute-переменной выполняется без ошибок, даже если эта переменная не используется в вершинном шейдере.

Если name раньше уже соответствовала какому-либо индексу, эта связь теряется. Это означает, что несколько индексов не могут соответствовать одной attribute-переменной, но возможно обратное: один индекс может соответствовать нескольким attribute-переменным и в каждую из них будет записываться одно и то же значение.

Соответствие одного индекса нескольким attribute-переменным является использованием псевдонимов, и эту возможность можно применять лишь в случаях, если только один из атрибутов является активным в выполняемой программе либо каждый возможный путь выполнения шейдера использует один из псевдонимов. Благодаря этому компилятор и компоновщик могут полагаться на отсутствие псевдонимов в шейдере и выполнять более качественную оптимизацию. Реализации OpenGL не всегда выполняют проверку на наличие псевдонимов. Дополнительные атрибуты не могут быть псевдонимами стандартных (за исключением дополнительного атрибута 0).

Активные атрибуты, для которых соответствие не установлено непосредственно, связываются при вызове функции glLinkProgramARB, а индексы в дальнейшем можно узнать с помощью функции gl GetAttri bLocati onARB.

Во время работы функции glBindAttri bLocati onARB OpenGL копирует строку паше, а после завершения работы приложение должно освобождать выделенную для копии память.

Ошибки

GLJNVALIDJALUE возникает:

□ если значение i ndex больше или равно GL_MAX_VERTEX_ATTRIBS_ARB;

□ program не является дескриптором объекта OpenGL.

GL_INVALID_0PERATI0N возникает в следующих случаях:

□ name начинается с зарезервированного префикса gl_;


⇐ вернуться назад | | далее ⇒