□ Один высокоуровневый язык используется для всей программируемой цепочки обработки графики.
Язык шейдеров OpenGL используется для написания как вершинных, так и фрагментных шейдеров для OpenGL, эти процессы различаются незначительно. В будущем предполагается, что язык шейдеров будет использоваться для программирования и других графических операций в OpenGL. Например, уже обсуждалась программируемость сжатия и извлечения изображений произвольных форматов и мозаичного представления поверхностей.
□ Модульное программирование.
Разделение компиляции и компоновки на два отдельных шага - удачное решение: при разработке программ для сложных алгоритмов проявляется большая гибкость. Вместо того чтобы создавать один большой шейдер, разработчики могут сделать целую коллекцию небольших шейдеров, их можно компилировать независимо и затем прикреплять к программному объекту. Шейдеры будут создаваться на базе общих интерфейсов и, таким образом, станут взаимозаменяемыми, а операция компоновки соединит их в программу.
□ Отсутствие дополнительных библиотек или программ.
Язык шейдеров OpenGL, компилятор и компоновщик определены как часть OpenGL. Приложение не заботится о загрузке дополнительных библиотек. А усовершенствование компилятора происходит с установкой обновлений драйвера OpenGL,
2,7. Итоги
Следующие выводы помогут понять, как все части взаимодействуют на этапе выполнения:
□ Выполняемая программа для вершинного процессора, установленная как часть текущего состояния, будет выполняться один раз для каждой заданной вершины.
□ Выполняемая программа для фрагментного процессора, установленная как часть текущего состояния, будет выполняться один раз для каждого фрагмента, который приходит с этапа растеризации.
□ Есть два способа сообщения между приложением и вершинным шейдером: через attribute- и uniform-переменные.
□ Attribute-переменные могут изменяться часто: приложение устанавливает новое значение для каждой новой вершины.
□ Приложения передают произвольные данные вершин в вершинный шейдер через определенные разработчиком attribute-переменные.
Q Приложения передают стандартные данные вершин (цвет, нормаль, координаты текстуры, расположение в пространстве и т. д.) в вершинный шейдер через встроенные attribute-переменные.
□ Приложения могут передавать данные во фрагментный шейдер через uniform-переменные.
□ Uniform-переменные изменяются довольно редко - как минимум для целого графического примитива значение всегда будет оставаться неизменным.
□ Компилятор и компоновщик встроены в OpenGL (но средства для компиляции, компоновки и отладки шейдеров могут существовать сами по себе). Итак, далее описаны самые важные особенности языка шейдеров OpenGL:
■ Язык основан на синтаксисе языка С.
• Основные элементы и многие ключевые слова заимствованы из С.