Количество активных uniform-переменных можно получить с помощью функции glGetObjectParameterARB со значением GL_OBJECT_ACTI VEUNI F0RMS_ARB. Значение О для index означает, что будет возвращаться первая активная uniform-переменная, а значение GL OB J ECT_AGTI V E_UN I F0RMS_ARB -1 для индекса выберет последнюю активную uniform-переменную. Размер символьного буфера, способного вместить самое длинное имя переменной, можно получить функцией gl GetObjectParameterARB со значением GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB.
В type возвращается указатель на тип данных uniform-переменной. Здесь могут возвращаться символические константы GL_FL0AT, GL_FL0AT_VEC2_ARB, GL_FL0AT_VEC3_ARB, GL_FL0AT_VEC4 ARB, GL JNT, GL_INT_VEC2_ARB,GL_INT_VEC3_ARB,GL_INTJEC4_AR8,GL_B0QL_AR8, GL_B00L_VEC2_ARB, GL_B0OL_VEC3_ARB, GL BQ0L_V£C4_ARB, GL_FLQAT_MAT2_ARB, GLJLOAT MAT3ARB и GL_FL0AT_MAT4_ARB.
Uniform-переменные, объявленные как структуры или массивы структур, не будут возвращаться целиком. Вместо этого каждая из этих переменных будет разбита на базовые компоненты, в именах используются операторы «.* и «[]», так что каждое имя все равно будет принадлежать к одному из перечисленных ранее типов. Каждый из базовых компонентов считается отдельной активной uniform-переменной, а если хотя бы один элемент массива активен, то активным считается каждый элемент массива.
API языка шейдеров OpenGL
Размер uniform-переменной будет возвращен в size. Uniform-переменные, не являющиеся массивами, будут иметь размер 1, а при массивах будет возвращаться размер массива. Структуры и массивы структур разбиваются на компоненты, как описано ранее. Если в результате разбиения получается массив, si ze будет содержать размер массива, а иначе будет равно 1.
Описываемая функция возвращает максимум информации об указанной активной uniform-переменной. Если информация недоступна, length будет равно О и пате - пустая строка. Такое может случиться, если последняя компоновка прошла неудачно.
С помощью функции gl GetActiveUniformARB разработчик приложения может запрашивать только активные uniform-переменные, то есть те, что фактически используются шейдером, и создавать соответствующие элементы интерфейса для конечного пользователя динамически. Если бы у авторов шейдеров существовало особое соглашение об именовании uniform-переменных, было бы удобно стандартизировать пользовательский интерфейс: например, если любая uniform-переменная заканчивается на «Color», ее значения можно редактировать с помощью диалога выбора цвета. Эта функция также может быть полезна в случае совместного использования разных вершинных и фрагментных шейдеров, чтобы определить, какие у конкретных вершинного и фрагментного шейдеров общие uniform-переменные. Проще и безопаснее определять, что именно нужно посылать шейдеру, чем задавать все сочетания значений по умолчанию.