Отображение стандартных функций установки вершинных атрибутов на встроенные attribute-переменные

Рис. 7.1, Отображение стандартных функций установки вершинных атрибутов на встроенные attribute-переменные При наличии дополнительных атрибутов вершин (рис. 7.2) отображение немного отличается от рассмотренного ранее. Определенная разработчиком attribute-переменная должна быть связана с определенным индексом в массиве дополнительных атрибутов. Это связывание выполняется явно с помощью функции gl Bi nd-AttritlocationARB или неявно при компоновке.

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

Рис. 7.2, Отображение дополнительных функций установки вершинных атрибутов на определенные разработчиком attribute-переменные Предположим, есть вершинный шейдер, использующий три определенные разработчиком attribute-переменные: Qpaci ty, Bi normal, MyData (см. рис. 7.2). Эти переменные можно связать с каким-либо индексом в массиве дополнительных атрибутов:

glВ1 ndAttriЫocat 1 oriARBtпцуРгодram. 1. "Opacity");

glBindAttribLocationARBCmyProgram, 2. "Binormal"):

glBindAttrlbLocationARB(myProgram, 3. "MyData"): Этот код устанавливает отображение данных, так что значения, записанные в массив дополнительных атрибутов с индексами 1,2 и 3, будут автоматически заноситься В attribute-переменные Opacity, Bi normal и MyData вершинного шейдера. Атрибуте индексом 0 можно связать с какой-нибудь определенной разработчиком переменной либо получить его значение из встроенной attribute-переменной gl J/ertex. Ячейка массива дополнительных атрибутов с индексом N не связана с переменной (см. рис. 7.2), Как говорилось ранее, в каждой ячейке массива достаточно места для четырех компонентов - чисел с плавающей запятой. Приложения могут сохранять 1, 2,3 ии 4 компонента в каждой ячейке. Вершинный шейдер может считывать эти значения через определенную разработчиком attribute-переменную типа float, vec2, vec3 или vec4. Получить значения сразу из двух ячеек можно через attribute-nepe-:Щшую типа mat2, из трех - типа mat3, из четырех - типа mat4.

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

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

void gTGetActiveAttribARBCGLhandleARB program.

GLuint index.

GLsizei maxLength,

GLsizei * length.

GLint *s1ze.

GLenum *type.

GLcharARB *name)

Эта функция возвращает информацию об активной attribute-перемешшй в программном объекте program. Размер буфера символов, предоставленного приложением, передается в maxLength, а указатель на этот буфер - в. name. Attribu-1е*переменная (встроенная или определенная разработчиком) считается активной, если при компоновке выяснилось, что работающая программа может обращаться к этой переменной. Так что перед первым вызовом этой функции должен выполниться хотя бы один вызов функции glLinkProgramARB, не обязательно успешно.


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