Подобно любому языку шейдеров, ISL основан на языке С. Но шейдеры ISL выглядят совсем не так, как шейдеры OpenGL. Множество команд в шейдере ISL подразумевают какой-либо конкретный вид прохода. Например, вот фрагмент кода на ISL:
varying color b;
FB = diffuseO :
FB *= color(.5. .2. 0. 1):
b = FB:
FB = specular(30.0): FB += b:
Идентификатор FB обозначает, что результат должен сохраняться в буфере кадров. Эта последовательность операций сначала вызывает шейдерную подпрог17.3. Язык OpenGL Shader (ISL)
рамму, которая выполняет шейдер освещения для вычисления рассеянного цвета. Полученное значение умножается на значение цвета (0.5, 0.2, 0, 1), затем результат сохраняется в области текстурной памяти Ь. После этого вычисляется зеркальное отражение и, наконец, компоненты рассеянного и зеркального отражений складываются. Хотя этот код и выглядит требующим многопроходности, последовательность команд может быть выполнена за один проход на множестве разных графических акселераторов.
Рис. 17.2. Модель выполнения OpenGL Shader (ISL)
ISL поддерживает шейдеры поверхности и освещения, которые затем объединяются и компилируются. В этом смысле ISL больше похож на RenderMan, чем на OpenGL.
Сравнение языков программирования
Другое различие между языком шейдеров OpenGL и ISL заключается в том, что ISL был спроектирован с возможностью переносимости с устаревшего на современное оборудование, a OpenGL опирается на современное оборудование и оборудование будущего. Язык шейдеров OpenGL не может работать на аппаратном обеспечении без программируемости, a ISL будет выполнять шейдеры на совершенно разном оборудовании с одинаковым результатом.
Еще одно различие языков в том, что ISL создавался с ограничениями"opengl2_369.html">⇐ Предыдущая| |Следующая ⇒