Приложение задает начальные значения uniform-переменным, а пользователь манипулирует ими через графический интерфейс, чтобы достичь разнообразия эффектов в одном шейдере. Но эти начальные значения не могут задаваться между вызовами glBegin и glEnd, так что менять их можно не чаще, чем один раз для каждого примитива.

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

С помощью функции gl Getllni formLocati onARB можно определить расположение определенной разработчиком переменной, которая была объявлена как часть шейдера. Загрузить данные в это место можно другой функцией, gl Uni formARB. Существуют разные варианты этой команды - для загрузки числа с плавающей запятой, целого, булевой переменной, матриц и массивов.

У вершинных процессоров есть еще одна особенность - возможность чтения из текстурной памяти. Это позволяет вершинным шейдерам реализовать, в частности, алгоритмы смещения и отображения. (Не во всех реализациях OpenGL эта возможность доступна, так как минимальное количество требуемых от реализации вершинных текстурных модулей может равняться нулю.) Уровень детализации для доступа к многоуровневым текстурам задается непосредственно в шейдере. Существующие в OpenGL параметры для текстурных карт определяют его поведение при операциях фильтрации, на границах и при наложении текстур.

По определению вершинный процессор работает только с одной вершиной одновременно, но реализация может иметь несколько вершинных процессоров, которые будут работать параллельно. Вершинный шейдер выполняется один раз для каждой заданной вершины. Схема вершинного процессора сосредоточена на функциональности для преобразования и освещения отдельной вершины. Вершинные шейдеры должны вычислить однородную координату в пространстве отсечения и сохранить результат в специальной выходной переменной gl_Posi ti on. Значения для пользовательского отсечения и точки растеризации будут храниться в выходных переменных gl_Cl ipVertex и gl_PointSi ze.

Переменные, в которых данные передаются из вершинного процессора фрагмент-ному, называются разнообразными (varying) переменными. Они бывают и встроенные, и определенные разработчиком. Переменные называются разнообразными, потому что значения для каждой вершины будут потенциально разными, и для каждого фрагмента будет выполняться интерполяция для перспективы, с тем чтобы в дальнейшем эти значения использовались фрагментный шейдером. Существуют встроенные varying-переменные для значений цвета и координат текстуры.

Вершинный шейдер может использовать определенные разработчиком varying-переменные, чтобы получить дополнительные входные данные для интерполяции цвета, нормалей (для вычисления освещения фрагментов), текстурных координат, модельных координат и других произвольных значений.


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