glGetActiveAttrib - повертає інформацію про активні атрибутні змінні для вказаного програмного об'єкту.

C-специфікація

void glGetActiveAttrib (GLuint program,
                        GLuint index,
                        GLsizei bufSize,
                        GLsizei *length,
                        GLint *size,
                        GLenum *type, 
                        GLchar *name) ;

 

Параметри

program вказує програмний об'єкт який необхідно опитати.

index вказує індекс атрибутної змінної, яку необхідно опитати.

bufSize вказує максимальну кількість символів, які система OpenGL може розмістити у символьному буфері переданому у name.

length повертає кількість символів фактично розміщених системою OpenGL у рядку символів вказаному за допомогою параметра name (не враховуючи завершуючий нульовий символ) якщо передане значення відмінне від NULL.

size повертає розмір змінної атрибутів.

type повертає тип даних атрибутної змінної

name повертає рядок символів з завершуючим нульовим значенням, який містить назву атрибутної змінної.

Опис

Функція glGetActiveAttrib повертає інформацію про активні атрибутні змінні у програмному об'єкті вказаному за допомогою program. Кількість активних атрибутів можна отримати за допомогою виклику функції glGetProgram з значенням GL_ACTIVE_ATTRIBUTES. Значення 0 для параметру index обирає першу активну атрибутну змінну. Дозволені значення для параметру index містяться у проміжку від 0 до кількості атрибутних змінних мінус 1.

Вертексний шейдер може використовувати вбудовані атрибутні змінні, змінні визначені користувачем, або їх комбінацію. Вбудовані атрибутні змінні мають префікс "gl_" у іменах і відносяться до вбудованих вертексних атрибутів OpenGL (на подобі gl_Vertex, gl_Normal тощо, для повного списку перегляньте специфікацію шейдерної мови OpenGL - "OpenGL Shading Language"). Атрибутні змінні визначені користувачем мають звичайні імена і отримують своє значення через нумеровані загальні вертексні атрибути. Змінна атрибуту (або вбудована або визначена користувачем) вважається активною, якщо під час операції компонування визначено, що до неї відносяться під час виконання програми. Отже, програма program повинна попередньо оброблюватись функцією glLinkProgram, але не обов'язково, щоб дана операція завершилась успішно.

Розмір символьного буферу, який необхідний для збереження найдовшої назви змінної атрибутів у програмі program можна отримати за допомогою виклику функції glGetProgram з значенням GL_ACTIVE_ATTRIBUTE_MAX_LENGTH. Це значення повинне використовуватися для створення буферу з достатнім розміром для збереження поверненої назви атрибутів. Розмір даного символьного буферу передається у bufSize, а вказівник на цей буфер передається у параметрі name.

Функція glGetActiveAttrib повертає назву атрибутної змінної визначеної у index, зберігаючи її у символьному буфері вказаному за допомогою name. Повернений рядок буде містити завершуюючий нульовий символ. Фактична кількість символів записаних у цей буфер повертається у параметрі length, і вона не обраховує завершуючий нульовий символ. Якщо довжина поверненого рядка символів не вимагається, у параметрі length можна передати значення NULL.

Аргумент type повертає вказівник на тип даних змінної атрибутів. Можуть повертатися наступні іменовані константи: GL_FLOAT, GL_FLOAT_VEC2, GL_FLOAT_VEC3, GL_FLOAT_VEC4, GL_FLOAT_MAT2, GL_FLOAT_MAT3, GL_FLOAT_MAT4, GL_FLOAT_MAT2x3, GL_FLOAT_MAT2x4, GL_FLOAT_MAT3x2, GL_FLOAT_MAT3x4, GL_FLOAT_MAT4x2 або GL_FLOAT_MAT4x3. Аргумент size поверне розмір атрибуту, у одиницях типу поверненого у змінній type.

Список активних змінних атрибутів може включати як вбудовані змінні атрибутів (які розпочинаються з префіксу "gl_"), так і змінні атрибутів визначені користувачем.

Дана функція поверне стільки інформації, на скільки це можливо з переданим буфером. Якщо жодна інформація доступна, параметр length буде встановлено у значення 0 і параметр name буде містити пустий рядок. Дана ситуація виникає, якщо функція викликається після операції компонування, яка завершилась невдало. Якщо виникає помилка, значення у параметрах length, size, type і name залишаться без змін.

Нотатки

Функція glGetActiveAttrib доступна в системах OpenGL версії 2.0 або вище.

Типи GL_FLOAT_MAT2x3, GL_FLOAT_MAT2x4, GL_FLOAT_MAT3x2, GL_FLOAT_MAT3x4, GL_FLOAT_MAT4x2 і GL_FLOAT_MAT4x3 можуть бути поверненими у якості значення параметру type в системах OpenGL версій 2.1 або вище.

Помилки

GL_INVALID_VALUE генерується якщо параметр program містить значення не згенероване системою OpenGL.

GL_INVALID_OPERATION генерується якщо параметр program не містить ідентифікатор програмного об'єкту.

GL_INVALID_VALUE генерується якщо параметр index містить значення більше або еквівалентне кількості активних атрибутних змінних у програмі program.

GL_INVALID_OPERATION генерується якщо функція glGetActiveAttrib викликається між відповідними викликами glBegin і glEnd.

GL_INVALID_VALUE генерується якщо bufSize містить значення менше за 0.

Пов'язані параметри

glGet з аргументом GL_MAX_VERTEX_ATTRIBS.

glGetProgram з аргументами GL_ACTIVE_ATTRIBUTES або GL_ACTIVE_ATTRIBUTE_MAX_LENGTH.

glIsProgram

Перегляньте також

glBindAttribLocation, glLinkProgram, glVertexAttrib, glVertexAttribPointer

Оригінал

https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glGetActiveAttrib.xml