В type возвращается указатель на тип данных uniform-переменной. Здесь могут возвращаться символические константы GL_FL0AT, GL_FL0AT_VEC2_ARB, GL_FL0AT_VEC3_ARB, GL_FL0AT_VEC4J\RB, GL_INT, GL_INT_VEC2_ARBrGL_INTJ/EC3_ARB,GL_INT_VEC4_ARB,GL_B0QL_AR8, GL_B0QL_VEC2_ARB, GL_B00L_VEC3_ARB, GL BQ0L_VEC4_ARB, GL_FLQAT_MAT2_ARB, GL_FL0ATJW3_ARB и GL_FL0AT_MAT4_ARB.

Uniform-переменные, объявленные как структуры или массивы структур, не будут возвращаться целиком. Вместо этого каждая из этих переменных будет разбита на базовые компоненты, в именах используются операторы и «[]», так что каждое имя все равно будет принадлежать к одному из перечисленных ранее типов. Каждый из базовых компонентов считается отдельной активной uniform-переменной, а если хотя бы один элемент массива активен, то активным считается каждый элемент массива.

Размер uniform-переменной будет возвратен в size. Uniform-переменные, не являющиеся массивами, будут иметь размер 1, а при массивах будет возвращаться размер массива. Структуры и массивы структур разбиваются на компоненты, как описано ранее. Если в результате разбиения получается массив, si ze будет содержать размер массива, а иначе будет равно 1.

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

С помощью функции gl GetActiveUni formARB разработчик приложения может запрашивать только активные uniform-переменные, то есть те, что фактически используются шейдером, и создавать соответствующие элементы интерфейса для конечного пользователя динамически. Если бы у авторов шейдеров существовало особое соглашение об именовании uniform-переменных, было бы удобно стандартизировать пользовательский интерфейс: например, если любая uniform-перемек-ная заканчивается на «Со1 СГ», ее значения можно редактировать с помощью диалога выбора цвета. Эта функция также может быть полезна в случае совместного использования разных вершинных и фрагментных шейдеров, чтобы определить, какие у конкретных вершинного и фрагментного шейдеров общие uniform-лере-менные. Проще и безопаснее определять, что именно нужно посылать шейдеру, чем задавать все сочетания значений по умолчанию.

7.8. Семплеры

Для установки uniform-переменных типа семплер (то есть sampl erlD, sampl er2D, sampl егЗО, sampl erCube, sampl erlDShadow или sampl er2DShadow) используются функции gl Uni formli ARB и gl Uni formli vARB. Эти переменные могут быть объявлены как в вершинном, так и во фрагментном шейдере.

Семплер используется, когда какой-то шейдер обращается к конкретной текстурной карте. Значение, записанное в семплер приложением, - это номер текстурного модуля для обращения к текстуре. Для вершинных шейдеров оно должно быть меньше константы GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, которую можно получить с помощью функции gl Get и значение которой зависит от реализации. Для фрагментных шейдеров это значение должно быть меньше константы GL_MAX_ TEXTUREJ MAGE_UN I TS_ARB.


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