glBindAttribLocationARB(frv/Program. 1. "Opacity"): glBindAttribLocationARBCmyProgram. 2. "Втnormal"): gl Bi ndAttri bLocati onARB(myProgram. 3. "MyData"): Этот код устанавливает отображение данных, так что значения, записанные в массив дополнительных атрибутов с индексами 1,2 и 3, будут автоматически заноситься S attribute-переменные Opaci ty, Bi normal и MyData вершинного шейдера. Атрибут с индексом 0 можно связать с какой-нибудь определенной разработчиком переменной либо получить его значение из встроенной attribute-переменной glj/ertex. Ячейка массива дополнительных атрибутов с индексом N не связана с переменной (см. рис. 7.2).

Как говорилось ранее, в каждой ячейке массива достаточно места для четырех компонентов - чисел с плавающей запятой. Приложения могут сохранять 1, 2, 3 или 4 компонента в каждой ячейке. Вершинный шейдер может считывать эти значения через определенную разработчиком attribute-переменную типа float, vec2, vec3 или vec4. Получить значения сразу из двух ячеек можно через attribute-переменную типа mat2, из трех - типа mat3, из четырех - типа mat4.

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

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

void glGetActiveAttribARB(GLhandleARB program. GLuint index. GLsizei maxLength.

API языка шейдеров OpenGL

GLsizei ^length. GLint *size. GLenum *type. GLcharARB *name)

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


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