Это решает проблему передачи данных о вершинах в OpenGL. Ио возникает вопрос: как потом получить эти данные из вершинного шейдера? Обращение по индексам - не очень хорошее решение, так как такие имена не наглядны и их использование может вызвать многочисленные ошибки. API языка шейдеров OpenGL предоставляет два способа доступа к дополнительным атрибутам вершин из вершинного шейдера.

Первый способ - компоновщик связывает параметры автоматически. В таком случае после компоновки приложение должно сделать запрос к OpenGL, чтобы определить индексы дополнительных атрибутов, которые в дальнейшем и использовать для передачи этих атрибутов.

Второй способ - приложение выбирает какой-либо индекс в массиве дополнительных атрибутов и связывает с ним некую attribute-переменную в вершинном шейдере до компоновки, используя функцию

%Ь. Установка атрибутов вершин

, void glBindAttribLocationARB{GLhandleARB program. :ELuint index. const GLcharARB *neme)

Эта функция устанавливает соответствие заданной в программном объекте program определенной разработчиком attribute-переменной индексу дополнительного атрибута index. Пия определенной разработчиком attribute-переменной передается как строка с символом конца строки пате. Если это имя раньше уже было

связано, предыдущая связь теряется. Нельзя связать одну и ту же переменную . с несколькими индексами, но можно связать разные переменные с одним и тем же индексом. Когда программа с такими связанными переменными активна, значения из массива произвольных атрибутов копируются в связанные с ними определенные разработчиком attribute-переменные.

Если паше ссылается на attribute-переменную матричного типа, index ссылается на первый столбец матрицы. Другие столбцы матрицы автомапгчески связываются со следующими номерами: index+1 - для типа mat2; indexai и index+2 - для i матрицы типа mat3; index* 1, index+2 и index+3 - для матрицы типа mat4. Этой командой нельзя связывать какие-либо имена со стандартными атрибута ми вершин в OpenGL, так как при необходимости они связываются автоматичес-] ки. Все операции связывания, выполненные после компоновки программного


⇐ Предыдущая| |Следующая ⇒