Модель выполнения OpenGL Shader (ISL)

Рис. 17.2. Модель выполнения OpenGL Shader (ISL)

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

Другое различие между языком шейдеров OpenGL и ISL заключается в том, что ISL был спроектирован с возможностью переносимости с устаревшего на современное оборудование, a OpenGL опирается на современное оборудование и оборудование будущего. Язык шейдеров OpenGL не может работать на аппаратном обеспечении без программируемости, a ISL будет выполнять шейдеры на совершенно разном оборудовании с одинаковым результатом.

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

17.4. Язык HLSL

HLSL расшифровывается как High-Level Shader Language (язык шейдеров высокого уровня), он был создан компанией Microsoft и реализован в DirectX 9 в 2002 г. По синтаксису и функциональности HLSL значительно ближе к OpenGL, чем RenderMan и ISL. HLSL поддерживает парадигму программируемости на уровне вершин и фрагментов точно так же, как язык шейдеров OpenGL. Вершинный шейдер HLSL соответствует вершинному шейдеру OpenGL, а пиксельный шейдер HLSL соответствует фрагментному шейдеру OpenGL.

Одно из основных различий этих языков - в модели выполнения. IILSL создан как транслятор из исходного кода в другой исходный код (рис. 17.3). Компилятор HLSL на самом деле является транслятором, который не зависит от DirectX, поэтому HLSL-программы не передаются для выполнения через DirectX 9 API. Вместо этого компилятор HLSL транслирует исходный код в более низкоуровневый код, и получаются программы, называемые вершинными шейдерами и пиксельными шейдерами. Эти шейдеры могут различаться номером версии (например, Vertex Shader 1.0, 2.0, 3.0; Pixel Shader 1.1, 1.4, 2.0, 3.0).

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

HLSL создан для облегчения работы разработчиков программ, для того чтобы те писали шейдеры на языке более высокого уровня. При этом нужно понимать, что шейдеры будут запускаться на разном оборудовании с разными возможностями.

Не гарантируется, что шейдеры HLSL будут работать на любой платформе. Разработчики шейдеров должны выбрать: либо написать шейдер, который может выполняться и на оборудовании с очень небольшой программируемостью, либо ориентироваться только на определенный ряд графического оборудования (для чего существует возможность языка, называемая профайл). Компания Microsoft предоставляет программу DirectX Effects Framework для разработчиков шейдеров.


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