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

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

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

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

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

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

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

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

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

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

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

Программируемая часть операций OpenGL

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

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

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

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

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

varying vec4 gl_Color;
varying vec4 glJ>econdaryColor:
varying vec4 gl_TexCoord[gl_MaxTextureCoords]:
varying float gl_FogFragCoord:

Значения gl_Col or и gl_SecondaryCol or будут вычислены автоматически из значений gl_FrontColor, gl_BackColor, gl_FrontSecondaryColor и gl_BackSecondary Color при определении принадлежности примитива передней или задней грани (см. раздел 4.5.1). Если вершинный шейдер не задействован и выполняются стандартные операции, в gl_FogFragCoord будет содержаться либо z-координата фрагмента в пространстве координат обзора, либо интерполированное значение координаты дымки, в зависимости от того, установлен ли GL_FRAGMENT_DEPTH или GL_F0G_C00RDINATE. Массив gl_TexCoord[] будет содержать значения, записанные вершинным шейдером, а если вершинный шейдер отсутствует, то массив будет содержать результаты стандартных операций над вершинами - текстурные координаты. Автоматически деление текстурных координат по ^-компоненте не производится.


⇐ Предыдущая| |Следующая ⇒