Attribute-переменные языка шейдеров OpenGL бывают матричных типов: rat2, mat3 или mat4. Значения переменных этих типов тоже задаются функциями семейства gIVertexAttribARB. Матрицы должны быть записаны в последовательные ячейки массива дополнительных атрибутов по столбцам: один столбец матрицы в каждой ячейке.
Определенную разработчиком в вершинном шейдере attribute-переменную можно связать с индексом в массиве дополнительных атрибутов вершины функцией gl Bi ndAttri bLocati onARB. Это позволяет обращаться к дополнительным атрибутам не по индексу, а по имени переменной. Изменение значения дополнительного атрибута немедленно отражается в связанной attribute-переменной вершинного шейдера.
Соответствие индекса в массиве дополнительных атрибутов вершины с определенной разработчиком attribute-переменной вершинного шейдера является частью состояния программного объекта, но текущее значение дополнительного атрибута вершины - нет. Зато это значение является частью текущего состояния OpenGL, как и для стандартных атрибутов вершины, и сохраняется даже после установки другого программного объекта.
Приложение может задавать дополнительные атрибуты вершины даже в том случае, если они не соответствуют каким-либо переменным вершинного шейдера. Эти значения просто будут являться частью текущего состояния, и вершинный шейдер не будет иметь к ним доступа. Если во время выполнения вершинного шейдера значение дополнительного атрибута вершины, связанного с переменной, не меняется, шейдер будет использовать одно и то же значение повторно.
Дополнительный атрибут вершины с индексом 0 - то же самое, что определенные в OpenGL координаты вершины. Функции glVertex2, glVertex3, glVertex4 полностью эквивалентны соответствующим функциям gl VertexAttri bARB с аргументом index, равным 0. Вершинный шейдер может обращаться к этому атрибуту с помощью встроенной attribute-переменной gl_Vertex. Для дополнительного атрибута вершины с индексом 0 не существует текущих значений - это единственный атрибут с такими свойствами. Все остальные вызовы функций для установки стандартных атрибутов вершины можно чередовать с вызовами функций для установки дополнительных атрибутов.
Примечания
Значения дополнительных атрибутов вершины можно задавать в любое время. В частности, функция gl VertexAttri bARB может вызываться между соответствующими вызовами gl Begi п и gl End.
Можно устанавливать соответствие одного индекса с несколькими именами attribute-переменных. Эти имена будут являться псевдонимами, что возможно только в том случае, если в вершинном шейдере активна только одна из переменных или каждый путь выполнения шейдера содержит не больше одной такой переменной. Реализации OpenGL не будут проверять наличие псевдонимов для выполнения оптимизации.
Не существует возможности создания псевдонимов для стандартных атрибутов вершины.
Ошибки
GL_INVALID_VALUE возникает, если значение index больше или равно GL_MAX_VERTEX_ ATTRI BS_ARB.
Соответствующие GET-функции
g] Get VertexAttri bARB с аргументами GL_CURRENT_VERTEX_ATTRIB_ARB и index. glGetAttribLocationARB с аргументами program и name. glGetActiveAttribARB с аргументом program. glGet с аргументом GL_MAX_VERTEX_ATTRIBS_ARB.