Язык шейдеров OpenGL поддерживает и встроенные, и определенные разработчиком uniform-переменные. Вершинные и фрагментпые шейдеры могут полу2.3. Программируемые процессоры OpenGL
чатьтекущее состояние через встроенные переменные, которые начинаются с префикса gl_. Приложение может задавать определенные разработчиком переменные, чтобы передавать произвольные значения данных непосредственно шейдеру.
С помощью функции gl GetUni f orntocat i onARB можно определить расположение определенной разработчиком переменной, которая была объявлена как часть шей-дера. Загрузить данные в это место можно другой функцией, gl Uni foraARB. Существуют разные варианты этой команды - для загрузки числа с плавающей запятой, целого, булевой переменной, матриц и массивов.
У вершинных процессоров есть еще одна особенность - возможность чтения из текстурной памяти. Это позволяет вершинным шейдерам реализовать, в частности, алгоритмы смещения и отображения. (Не во всех реализациях OpenGL эта возможность доступна, так как минимальное количество требуемых от реализации вершинных текстурных модулей может равняться нулю.) Уровень детализации для доступа к многоуровневым текстурам задается непосредственно в тендере. Существующие в OpenGL параметры для текстурных карт определяют его поведение при операциях фильтрации, на границах и при наложении текстур.
По определению вершинный процессор работает только с одной вершиной одновременно, по реализация может иметь несколько вершинных процессоров, которые будут работать параллельно. Вершинный шейдер выполняется один раз для каждой заданной вершины. Схема вершинного процессора сосредоточена на функциональности для преобразования и освещения отдельной вершины. Вершинные шейдеры должны вычислить однородную координату в пространстве отсечения и сохранить результат в специальной выходной переменной gl_Posi ti on. Значения для пользовательского отсечения и точки растеризации будут храниться в выходных переменных gl_Cl ipVertex и gl_PointSize.
Переменные, в которых данные передаются из вершинного процессора фрагмент-ному, называются разнообразными (varying) переменными. Они бывают и встроенные, и определенные разработчиком. Переменные называются разнообразными, потому что значения для каждой вершины будут потенциально разными, и для каждого фрагмента будет выполняться интерполяция для перспективы, с тем чтобы в дальнейшем эти значения использовались фрагментным шейдером. Существуют встроенные varying-переменные для значений цвета и координат текстуры.