Однако у Cg есть преимущества перед другими языками. Транслятор Cg может выдавать код как для DirectX, так и для OpenGL. Таким образом, шейдеры Cg могут использоваться и на базе DirectX, и на базе OpenGL (рис. 17.4). При этом требуется, чтобы приложение обращалось к промежуточной библиотеке от NVIDIA - посреднику между приложением и соответствующим API (OpenGL или DirectX). Эта библиотека называется Cg Runtime. Для простых приложений использование библиотеки довольно просто, но в более сложных приложениях управлять шейдерами становится нелегко.
NVIDIA предоставляет собственную версию надстройки над языком. CgFX - это спецификация шейдеров и формат данных, а формат файлов там такой же, как и ix-формат, поддерживаемый DirectX 9. Библиотека CgFX, как и Cg Runtime, включает поддержку и OpenGL и DirectX.
17.6. Итоги
17.6. Итоги Сейчас языки шейдеров очень популярны. Первые языки шейдеров создавались не для реального режима времени, а просто для создания фотореалистичных статических изображений. Графическое оборудование, способное поддерживать интерактивный язык шейдеров, появилось в 1990-х гг., а сейчас программируемые графические акселераторы доступны практически всем. Это стимулировало разработку нескольких коммерческих языков шейдеров: ISL, языка шейдеров OpenGL, HLSL, Cg.
Сравнение языков программирования
При всем разнообразии языков программирования, последние три упомянутых языка очень похожи между собой. Каждый из них был создан для отображения функциональности RenderMan на основании синтаксиса С и С++. В результате все три языка получились очень похожими по синтаксису и возможностям. Самое большое их различие в том, что HLSL и Cg были созданы как надстройки над стандартными интерфейсами DirectX и OpenGL, а трансляция с исходного кода в команды этих API может происходить когда угодно. Код на языке тендеров OpenGL преобразуется прямо в машинный код драйвером OpenGL.
Спецификации HLSL и Cg контролируются компаниями Microsoft и NVIDIA соответственно. Язык шейдеров OpenGL контролируется группой OpenGL ARB, созданной представителями различных производителей графического аппаратного обеспечения. HLSL создан для использования в среде Microsoft DirectX, а язык шейдеров OpenGL - для использования совместно с OpenGL в множестве различных сред. Cg может работать как в среде DirectX, так и в среде OpenGL.