Функция glGetActiveAttribARB возвращает имя attribute-переменной, указанной с индексом index, сохраняя его в name. Возвращаемая строка будет заканчиваться нуль-символом. Реальное количество символов, записанных в буфе]) (не считая нуль-символа), возвращается в length, но если это несущественно, то можно передать NULL.

Количество активных атрибутов в программном объекте можно узнать с помощью функции gl GetObjectParameterARBс аргументом GL_0BJECT_ACTIVE_ATTRIBUTES__ARB.

Если задавать для index значение 0, возвратятся параметры первой активной attribute-переменной, а если задать значение GL_OBJECT_ACTIVE_ATTRIBUTES_ARB -1, возвратятся параметры последней. Длину самого длинного имени attribute-переменной можно получить функцией glGetObjectParameterARB с параметром GL_ QBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB.

Аргумент type будет содержать указатель на тип attribute-переменной. Тип указывает одна из символических констант: GL_FL0AT, GL_FL0AT_VEC2_ARB,

GLFLOAT VEC3 ARB, GL_FL0AT_VEC4_ARB, GL_FL0AT_MAT2_ARB, GL_FL0AT_MAT3_ARB и GL_FL0AT_MAT4_ARB. Аргумент size будет содержать размер атрибута в единицах возвращенного в type типа.

Эта функция возвращает максимум информации об указанной attribute-переменной. Если нет доступной информации, length будет равен нулю и пате будет пустой строкой. Такое может произойти в случае не состоявшейся компоновки.

Описанная команда может быть полезна, если разработка шейдера и разработка приложения выполняются раздельно. Если между разработчиками шейдера и приложения достигнуто соглашение об именах атрибутов, во время выполнения можно запрашивать программный объект для получения действительно нужных атрибутов, а затем передавать их. Это придает гибкость процессу разработки шейдеров.

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

void glGetVertexAttri.bfvARBCGLuint index. GLenum pname. GL float ^parents) void glGetVertexAttribivARB(GLuint index, GLenum pname. GLint *params) void glGetVertexAttribdvARB(GLuint index, GLenum pname. GLdouble *params)

Эти функции возвращают в paratns значение дополнительного атрибута, заданного индексом index. Запрашиваемый параметр указан в рпате. Список всех параметров и возвращаемых значений приведен в табл. 7.2. Все параметры, кроме GL_CURRENT VERTEX_ATTRIB_ARB, представляют состояние клиентской части OpenGL, Таблица 7.2. Параметры дополнительных атрибутов вершин

Параметр

Операция

GLJERTE X ATT RIВ ARRAV_ ENABL ED „ARB

parents возвращает ненулевое значение (GL_TRUE) в случае, если массив атрибутов для данного индекса включен, и 0 (GL_FALSE), если выключен. Начальное значение - GL_FALSE

Gl_VERTE X_ATTR I B_ARRAY_S I ZE_ ARB

params возвращает размер массива атрибутов для index - количество значений, помещающееся в каждый элемент, от 1 до 4. Начальное значение - 4

■ GL_VERIEX_ATTRIBJ\RRAY_ stride_arb

params возвращает шаг индекса (количество байт перед следующим элементом) в массиве атрибутов для данного индекса. Значение 0 означает, что элементы массива хранятся в памяти последовательно один за другим. Начальное значение - 0

£L_VERTEXATTR I B_ARRAY_ TYPE_ARB

params возвращает символическую константу, обозначающую тип массива данного атрибута. Возможные значения: GL BYTE, GL UNSIGNED BYTE, GL SHORT, GL UNSIGNED SHORT, GL INT, GLJJNSIGNEDJNT, GL^FLOAT hGLJX)UBLE. Начальное значение - GL_FL0AT

GL_VERTEX_ATTRI B ARRAY NORMALIZED_ ARB

params возвращает ненулевое значение (GL_TRUE), если типы данных для указанного атрибута были нормализованы при преобразовании, и 0 (GL FALSE), если не были. Начальное значение - GL JALSE

GL_CURRENT_VERTEX_ATTRIB_ ARB

params возвращает четыре значения - текущие значения атрибута. При указании индекса 0 в этом случае получится ошибка, так как у вершинного атрибута 0 нет текущего состояния. Начальное значение всех других атрибутов вершин - (0, 0, 0,1)

void glGetVertexAttribPointervARB(GLuint index.


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