4.2. Фрагментный процессор

Фрагментный процессор выполняет фрагментные шейдеры и замещает стандартные операции текстурирования, наложения цветов и создания дымки. В частности, следующие операции над фрагментами замещаются:

□ не применяются текстурные функции;

□ не накладываются текстуры;

□ не накладываются цвета;

□ не накладывается дымка.

Как обычно выполняются прочие операции:

□ детализация текстур;

□ альтернативная детализация текстур;

□ сжатая детализация текстур;

□ расчет параметров текстуры (они не изменяются, даже если доступ к текстуре происходит из фрагментного шейдера);

□ определение состояния текстуры;

□ детализация текстурного объекта;

□ применение режимов сравнения текстур.

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

Поведение фрагментного шейдера, как и вершинного, не определено, если буфер кадров работает не в режиме RGBA, а в режиме индексированного цвета.

4.2.1. Varying-переменные

К некоторым встроенным varying-переменным можно обратиться из фрагментного шейдера. Переменные gl_Co1 ог и gl JSecondaryColor здесь те же, что и встроенные attribute-переменные в вершинном шейдере. Никакой неоднозначности здесь нет, так как те переменные доступ ны только из вершинного шейдера, а эти - только из фрагментного:

varying vec4 gl_Co1or;

varying vec4 glJJecondaryColor:

varying vec4 gl_TexCoord[gl_MaxTextureCoords]:

varying float gi_FogFragCoord: Значения gl Color и gl_SecondaryColor будут вычислены автоматически из значений gl_FrontCol or, gl_BackCol or, gl_FrontSecondaryColor и gl_BackSecondary Color при определении принадлежности примитива передней или задней грани (см. раздел 4.5.1). Если вершинный шейдер не задействован и выполняются стандартные операции, в gl_FogP ragCoord будет содержаться либо г-координата фрагмента в пространстве координат обзора, либо интерполированное значение координаты дымки, в зависимости от того, установлен ли GL_FRAGMENT_DEPTH или GL_F0G_C00RDINATE. Массив g1_TexCoord[] будет содержать значения, записанные вершинным шейдером, а если вершинный шейдер отсутствует, то массив будет содержать результаты стандартных операций над вершинами - текстурные координаты. Автоматически деление текстурных координат по q-компоненте не производится.

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


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