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

□ Язык шейдеров OpenGL - высокоуровневый процедурный язык.

□ Такой же язык, с небольшими изменениями, используется для вершинных и фрагментпых шейдеров.

□ Он базируется на синтаксисе п управлении С и С++.

□ Изначально в нем поддерживаются векторные и матричные операции, так как они являются неотъемлемой частью многих графических алгоритмов.

□ Язык более жестко проверяет типы, чем С и С++, и функции могут вызываться по возвращаемому значению.

□ Он использует квалификаторы типов чаще, чем управление вводом-выводом.

□ У него пет ни ограничений на длину шейдера, ни необходимости ее запрашивать.

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

2.2. Для чего нужны шейдеры

До последнего времени OpenGL предоставлял программистам гибкий, но статичный интерфейс для рисования графики на дисплее. Как сказано в главе 1, OpenGL - это последовательность операций, применяемых к геометрическим или растровым данным, отправленным через графический ускоритель для вывода на экран. На этих этапах можно менять различные параметры, чтобы настраивать обработку графики нужным образом. Но только с OpenGL API невозможно изменить ни фундаментальную операцию, ни их порядок.


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