GLenum pname,

GLvoid **pomter)

Функция возвращает информацию об указателе. Здесь index - указанный индекс атрибута, агате - символическая константа, обозначающая, какой указатель нужно возвратить, и params - указатель на место сохранения возвращаемых данных. Б рпате можно передавать лишь 0flH03Ha4eHHe:GL_VERTEX_ATTRIB_ARRAY_PCIINTER_ARB. В pointer возвратится значение указателя на массив вершинных атрибутов для дополнительного атрибута с номером index.

.7. Установка uniform-переменных

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

Язык шейдеров OpenGL также определяет несколько встроенных переменных состояния OpenGL. Приложения могут продолжать управлять состоянием OpenGL с помощью обычных функций, но могут использовать и встроенные uniform-ne-ременньге в шейдерах. Если нужно выполнить операцию, не предусмотренную OpenGL, определить собственную uniform-переменную и передать ее значение в шейдер очень просто.

Когда программный объект становится текущим, встроенные uniform-переменные инициализируются. Последующие изменения состояния OpenGL могут влиять на эти переменные и изменять их значения.

Основная схема работы с uniform-переменными отличается от схемы работы с attribute-переменными. Как сказано в предыдущем разделе, приложение может указывать расположение attribute-переменных перед компоновкой. Расположение же uniform-переменных определяется OpenGL во время компоновки, так что приложение вынуждено после компоновки запрашивать их расположение.

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

GLint glGetUniformLocationARB(GLhandleARB program, const GLcharARB *name)

Эта функция возвращает целое число - индекс заданной uniform-переменной.

Имя uniform-переменной указано в Пдте как строка с нуль-символом. Можно использовать оператор элемента массива «[> или оператор элемента структуры «. >> (без пробелов) для выбора элемента массива или структуры. Расположение первого элемента массива можно получить, задав имя массива или имя и <г[0]». Результатом использования этих операторов не может быть другая структура, массив структур или компонент вектора или матрицы. Если uniform-переменная не найдена в заданном программном объекте или ее имя начинается с зарезервированного префикса gl_, будет возвращаться значение -1.


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