И вершинный, и фрагментный шейдеры могут получать состояние 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.