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

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

Основы

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

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

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

□ операции над интерполированными значениями;

□ доступ к текстурам;

□ наложение текстур;

□ создание эффекта дымки;

□ наложение цветов.

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


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