Фрагментный процессор может выполнять почти все операции преобразования пикселов, которые определены в OpenGL 1.5, включая и дополнительные операции над изображениями. Это значит, что фрагментный процессор поддерживает современные способы обработки пикселов. Операции с таблицей преобразования можно выполнять с ID-текстурным доступом, при этом приложения полностью контролируют размер и формат текстур. Операции масштабирования и смещения легко расширяются с помощью языка программирования. Доступ к матрицам цвета можно получить через встроенные uniform-переменные. Правильные значения для искривления и масштабирования пиксела вычисляются посредством множественного доступа к текстуре. Гистограмма и операции вычисления минимума и максимум остаются расширениями, так как их довольно трудно распараллелить для отдельных пикселов.
Рассматривая каждый фрагмент, фрагментный шейдер л ибо вычисляет его цвет и глубину (сохраняя результат в переменных gl FragColor и gl_FragDepth), либо полностью отбрасывает фрагмент. Результаты отправляются на дальнейшую обработку, которая остается такой же, как и в OpenGL 1.5. Данные о фрагментах используются для расчета наложения границ, проверки пикселов на видимость, отсечения по прямоугольнику, проверки прозрачности, отсечения по шаблону, проверки глубины, смешивания, размывания, проведения логических операций, операций с маской - перед тем как полностью обновить буфер кадров. Эти завершающие операции остаются фиксированной функциональностью, так как их легче сделать непрограммируемыми частями графического ускорителя.
Сделать эти функции программируемыми более сложно, так как операции чтения/изменения записи могут вызвать значительные проблемы с распределением команд и задержки во всей обработке графики. Если необходимо, большинство из фиксированных операций можно отключить и выполнить произвольные операции, их заменяющие, во фрагмеитном шейдере, хотя при этом придется согласиться с потерей в скорости.
2.4. Общее представление о языке
Спецификация OpenGL получила широкое признание. Именно поэтому она стала объектом деятельности по созданию промышленного стандарта высокоуровневого языка шейдеров. Язык шейдеров, который был создан общими усилиями членов OpenGL ARB, называется языком шейдеров OpenGL (OpenGL Shading Language (GLSL)). Язык был сконструирован таким образом, чтобы учитывать дальнейшее развитие и поддерживать программируемость в различных средах.
В этом разделе читатель найдет краткий обзор языка шейдеров OpenGL. Полное описание языка приводится в главах 3-5.
2.4.1. Анализ языка шейдеров
Запоследние несколько лет полупроводни ковые технологии продвинулись в своем развитии настолько, что вычисления для вершин и фрагментов выполняются намного быстрее, чем требуется для традиционных механизмов OpenGL, в которых устанавливаются различные состояния, влияющие на операции, выполняемые над графикой. Один из приемлемых способов уменьшить эту сложность, а также быстро увеличить количество расширений состоит в том, чтобы позволить заменять стандартные операции программируемыми. В некоторых последних расширениях OpenGL это реализовано, но па языке ассемблера. Язык ассемблера является аппаратно-зависимым но определению, и это заставляет разработчиков создавать код, который будет зависеть от платформы или производителя аппаратного обеспечения и не будет запускаться на будущих поколениях графических ускорителей.