Следующая схема — это очень упрощенная диаграмма этапов конвейра и данных, идущих по нему.
Хотя она очень упрощена, её достаточно для представления некоторых базовых основ программирования шейдеров. В этой подсекции представлена фиксированная функциональность конвейера. Учтите, что этот конвейер — абстрактный, и не эти шаги не обязательно могут встречаться.

Графический
Vertex Transformation

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

  • Трансформации позиции вершины
  • Вычисление освещенности вершины
  • Генерация и трансформация текстурных координат

Primitive Assembly and Rasterization

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

Растеризация определяет фрагменты и позиции пикселей примитива. Фрагменты в данном случае — кусочки данных, которые будут использованы для обновления пикселей во фреймбуфере в определенной области.
А в народе их называют «Пикселы» =)1
Пикселы содержат не только цвет, но и нормали, и текстурные координаты, и другие аттрибуты, позволяющие вычислить новый цвет пиксела.

Выходные данные этой стадии:

  • Позиция пиксела во фреймбуфере
  • Интерполированные значения каждого пиксела, вычисленные на стадии трансформации вершин

Значения, вычисленные на стадии трансформации вершин, скомбинированные с данными об обьединении вершин, позволяют на этом этапе вычислить аттрибуты пикселов. Например, каждая вершина имеет трансформированную позицию.
Когда рассматриваем вершины, образующие примитив, становится возможным вычислить позиции пикселов этого примитива.
Другой пример — использование цвета. Если вершины треугольника окрашены разным цветом, цвет пикселов этого треугольника вычисляется интерполяцией цветов вершин треугольника, в зависимости от расстояния до каждой из 3х вершин.

Fragment Texturing and Coloring

Вводные данные на этой стадии — интерполированные данные пикселов. Цвет уже рассчитан на предыдущем этапе,
и сейчас он может быть скомбинирован, например, с texel(текстурный элемент). Текстурные элементы также
интерполированы на предыдущем этапе. Дым также просчитывается на этом этапе. Общие конечные результаты
на этом этапе — значение цвета и глубины для каждого пиксела.

Raster Operations

Вводные данные этого этапа:

  • Положение пиксела
  • Значения глубины и цвета пиксела

Последняя стадия конвейера применяет серию тестов на пикселы:

  • Scissor тест
  • Alpha тест
  • Stencil тест
  • Depth тест

Если всё прошло удачно, информация пиксела далее используется дял обновления пикселных данных
соответственно текущему режиму прозрачности. Учтите, что прозрачность обрабатывается только
на этой стадии, так как предыдущие не имеют доступа к фреймбуферу. Он доступен только на этом
этапе.

Визуальное представление фиксированного функционала

Следующая диаграмма представляет визуальную форму всего описанного выше:

Графический
Изменение фиксированного функционала

Современные видеокарты дают программисту возможность изменять воздействие двух
из описанных выше стадий:

  • Вершинные шейдеры могут быть написаны для стадии вершинного преобразования (Vertex Transformation)
  • Пикселные шейдеры изменяют функционал стадии пикселного текстурирования и окрашивания
    (Fragment Texturing and Coloring)

В следующем разделе будут описаны эти две стадии.