И вершинный, и фрагментный шейдеры могут получать состояние OpenGL через встроенные uniform-переменные. Эти переменные приведены в разделе 4.3.

Приложения могут определять свои uniform-переменные для вершинного шей-дера и использовать функции OpenGL API для установки их значений (см. раздел 7.7). Существует ограничение на максимальное количество uniform-переменных, зависящее от реализации. Общее количество и встроенных, и определенных разработчиком uniform-переменных не может быть больше установленного максимума, подсчитывается оно в компонентах размера float: например, vec2 состоит из двух компонентов, vec3 - из трех и т. д. Это максимальное значение можно получить из результата выполнения функции gl Get, передав константу GL_MAX_VER-IEXJJNI F0RM_C0r!P0NENTS^ARB.

4.1.3. Выходные переменные Из материала предыдущих глав становится понятно, как результаты вычислений из вершинного шейдера попадают в OpenGL для дальнейшей обработки, в том числе для сборки примитивов и растеризации. В языке шейдеров OpenGL определено несколько встроенных переменных, в которые вершинный шейдер может записывать вычисленные значения. Встроенные переменные, обсуждаемые в этом разделе, доступны для записи только вершинному шейдеру.

Переменная gl_Posi ti on хранит координаты вершины после их обработки шейдером. Хорошо сформированный шейдер обновляет значение этой переменной при каждом новом выполнении. Компилятор в некоторых случаях может порождать ошибку, предупреждая разработчика о том, что шейдер не обновляет переменную gl_Position или читает из нее значение до первого обновления, но не все такие ситуации компилятор может выявить. Если шейдер не устанавливает значение переменной gl_Position, результат его выполнения получается неопределенным.

Программируемая часть операций OpenGL

Встроенная переменная gl_Poi ntSi ze хранит размер (диаметр) точки примитива, измеряемый в пикселах. С помощью этого значения вершинный шейдер может, к примеру, вычислить размер экрана относительно расстояния до точки. Более подробное описание gl_Poi ntSize приведено в разделе 4.5.2.


⇐ Предыдущая| |Следующая ⇒