Обращаться к этим переменным можно только из вершинного шейдера, определены они таким образом:

vec4 gl_Position; // сюда должно быть записано значение float gl_PointSize: // сюда может быть записано значение

vec4 gl__ClipVertex: // сюда может быть записано значение

4.1.4. Встроенные varying-переменные

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

Язык шейдеров OpenGL определяет несколько встроенных varying-переменных. Среди них есть такие, что доступны для записи вершинному шейдеру, но не видимы фрагментному шейдеру, а также такие, что доступны для чтения фрагментному шейдеру, но не известны вершинному шейдеру.

Вершинный шейдер может использовать следующие встроенные varying-переменные, обязательные для заполнения, для последующей обработки фрагментов либо стандартными операциями OpenGL, либо фрагментным шейдером: varying vec4 g1_FrontColor; varying vec4 g1_BackColor: varying vec4 gl_FrontSecondaryColor; varying vec4 gl_BackSecondaryColor: varying vec4 gl_TexCoord[gl_MaxTextureCoords]: varying float gl_FogFragCoord; Значения, записанные в переменные gl_FrontCol or, gl_BackCol or, gl_FrontSecon-daryCol or и gl_Back5econdaryCol or, после выхода из вершинного шейдера будут при• ведены к диапазону [0, 1]. По этим четырем значениям можно определить, какой грани принадлежит примитив - передней или задней. Потом вычисляются gl„C.ol or и gl JsecondaryCol or для фрагментного шейдера.

В массив glJTexCoord из вершинного шейдера передается несколько наборов координат текстуры. Так текстуры становятся доступными для OpenGL, если нет фрагментного шейдера, но если он есть, тоже можно использовать gl_TexCoord.

В переменную gl^FogFragCoord записывается информация о координатах для дымки. Записываемое значение зависит от того, какой режим дымки ранее установлен функцией gl Fog. Если в нее передаваласысонстанта GL_FRAGMEMT_DEPTH, то Bgl_FogFragCoord нужно записывать расстояние от точки обзора до вершины в пространстве координат обзора, где координаты точки обзора (0, 0, 0, 1). Если же установлен режим дымки GL_F0G_C00RD I NATE, в gl_FogFragCoord нужно записывать значение координаты дымки, которое затем будет интерполироваться .в целом по примитиву (то есть используется встроенная attribute-переменная gl_FogCoord).

4.1.5. Определенные разработчиком varying-переменные

В вершинных шейдерах можно определять varying-переменные для передачи любых данных фрагментному шейдеру. Эти значения не модифицируются, но используются при отсечении и интерполяции. Существует ограничение на количество значений с плавающей запятой, которые могут быть интерполированы, и это ограничение определяется реализацией. Узнать максимальное количество таких значений можно с помощью функции gl Get, передав ей константу G L_M AX_V AR YIN G_F L OAT S_ARB.


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