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