Идеальное решение - создать аппаратно-независимый язык высокого уровня, легкий в использовании, достаточно мощный для того, чтобы просуществовать длительное время, способный заменить большинство расширений. Эти идеи были совмещены с потребностями реализаций одного или двух поколений графических ускорителей.

Язык шейдеров OpenGL должен преследовать следующие цели.

□ Обеспечение хорошей совместимости с OpenGL.

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

□ Использование гибкости графических акселераторов ближайшего будущего.

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

□ Предоставление независимости от графического ускорителя.

Как уже говорилось ранее, первые попытки сделать графическую обработку программируемой закончились созданием интерфейсов на языке ассемблера. Разработчикам довольно сложно идти по этому пути, так как тогда программы будут непереносимыми. Цель высокоуровневого языка шейдеров - обеспечить уровень абстракции, достаточный для переносимости; и производители графических ускорителей используют гибкость этого языка, чтобы внедрять новейшие архитектуры аппаратного обеспечения и технологии компиляции.

□ Увеличение производительности.

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

□ Обеспечение легкости использования.

Написание шейдеров должно быть по возможности простым и легким. Так как большинство программистов графических приложений привыкли к С и C++, наиболее выразительные средства этих языков послужили базой для языка шейдеров OpenGL. При этом наиболее сложные фрагменты кода должен создавать компилятор. Поэтому язык для всех программируемых процессоров, в том числе и будущих, должен быть один (с очень небольшими различиями), и очень простой. Это позволит программистам быстрее обучаться и затем применять этот язык для всех задач, где необходимо программирование процессоров, определенных в OpenGL.


⇐ вернуться назад | | далее ⇒