Рассматривая каждый фрагмент, фрагментный шейдер л ибо вычисляет его цвет и глубину (сохраняя результат в переменных gl_FragColor н gl_FragDepth), либо полностью отбрасывает фрагмент. Результаты отправляются на дальнейшую обработку, которая остается такой же, как и в OpenGL 1.5. Данные о фрагментах используются для расчета наложения границ, проверки пикселов на видимость, отсечения по прямоугольнику, проверки прозрачности, отсечения по шаблону, проверки глубины, смешивания, размывания, проведения логических операций, операций с маской - перед тем как полностью обновить буфер кадров. Эти завершающие операции остаются фиксированной функциональностью, так как их легче сделать непрограммируемыми частями графического ускорителя.

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

2.4. Общее представление о языке Спецификация OpenGL получила широкое признание. Именно поэтому она стала объектом деятельности по созданию промышленного стандарта высокоуровневого языка тендеров. Язык шейдеров, который был создан общими усилиями членов OpenGL ARB, называется языком шейдеров OpenGL (OpenGL Shading Language (GLSL)). Язык был сконструирован таким образом, чтобы учитывать дальнейшее развитие и поддерживать программируемого в различных средах.

В этом разделе читатель найдет краткий обзор языка шейдеров OpenGL. Полное описание языка приводится в главах 3-5.

2.4.1. Анализ языка шейдеров Запоследние несколько лет полупроводни ковые технологии продвинулись в своем развитии настолько, что вычисления для вершин и фрагментов выполняются намного быстрее, чем требуется для традиционных механизмов OpenGL, в которых устанавливаются различные состояния, влияющие па операции, выполняемые над графикой. Один из приемлемых способов уменьшить эту сложность, а также быстро увеличить количество расширений состоит в том, чтобы позволить заменять стандартные операции программируемыми. В некоторых последних расширениях OpenGL это реализовано, но па языке ассемблера. Язык ассемблера является аппаратно-завнеимым по определению, и это заставляет разработчиков создавать код, который будет зависеть от платформы или производителя аппаратного обеспечения и не будет запускаться па будущих поколениях графических ускорителей.


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