Основы

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

2.5.2. Компилятор и компоновщик языка шейдеров OpenGL

Исходный код шейдера - это массив строк, состоящих из символов. Каждая символьная строка может состоять из нескольких обычных строк, разделенных символом-признаком новой строки. Впрочем, в символьной строке вполне может не быть ни одного такого признака новой строки, а одна обычная строка может быть сформирована из нескольких символьных - когда OpenGL соединяет символьные строки в шейдер, он не вставляет никаких дополнительных символов. Только от разработчика зависит, будет ли исходный код шейдера содержать символы перевода строки между предложениями.

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

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

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


⇐ Предыдущая| |Следующая ⇒