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

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

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

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

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

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

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

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

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

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

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


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