Фрагментный процессор может быть использован для выполнения операций над каждым из фрагментов, полученных в результате рендеринга точек, линий, многоугольников, пиксельных прямоугольников, растровых изображений. Если изображения сначала загружены в текстурную память, фрагментный процессор можно использовать также для обработки пикселов, в процессе которой требуется доступ и к самому пикселу, и к соседним с ним пикселам. При рисовании прямоугольника с включенным текстурированием фрагментный процессор может читать данные об изображении из текстурной памяти и накладывать их на прямоугольник, выполняя при этом обычные операции:
□ масштабирование пиксела;
□ масштабирование и смещение;
□ поиск в таблице цветов;
□ искривление;
□ обработку матрицы линейного преобразования.
2.3. Программируемые процессоры OpenGL
Фрагмектный процессор не заменяет стандартные графические операции, выполняемые в конце обработки пикселов, - покрытие, проверка на видимость, отсечение по прямоугольнику, наложение шаблона, проверка прозрачности, проверка глубины, отсечение по шаблону, наложение смешиваемых цветов, логические операции, сглаживание, определение видимости плоскостей.
На рис. 2.3 показаны входные и выходные значения фрагмеитного процессора.
г_| Полученные в результате растеризации
-----Непосредственно от приложения
---Косвенно от приложения И От фрагмеитного процессора Рис. 2.3. Входные и выходные данные фрагмеитного процессора Первичными входными данными для фрагмеитного процессора являются интерполированные в результате растеризации уагу^-переменные - как встроенные, так и определенные разработчиком. Определенные разработчиком уагу^-переменные должны быть определены внутри фрагмеитного шейдера, и их типы должны совпадать с типами, определенными в вершинном шейдере. Значения, вычисляемые стандартной функциональностью между вершинным и фрагмент-ным процессорами, доступны посредством специальных входных переменных.
Оконные координаты фрагмента и атрибут, обозначающий, был ли фрагмент сгенерирован для передней поверхности, передаются через входные переменные д1_РгадСоогс! и д!_Ргот:Гас1пд.