Шейдеры взаимодействуют со стандартной функциональностью OpenGL через встроенные переменные, которые начинаются с префикса gl_. В предыдущих примерах запись в переменную gl_Posit ion сообщает OpenGL, где размещены преобразованные вершины, а запись в переменную gl_FragCol or обозначает цвет фрагмента.

Эти шейдеры выполняются много раз при обработке одного примитива: вершинный шейдер - по одному разу для каждой вершины, фрагментный шейдер - по одному разу для каждого фрагмента. Причем большую часть времени вершинный В тексте программ десятичным разделителем является точка, ноу пас принята ятоттип называть именно так. - Примеч. науч. ред.

12. Типы данных

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

,2. Типы данных

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

3.2.1. Скалярные типы

В языке шейдеров OpenGL доступны следующие скалярные типы:

□ float - объявляет число с плавающей запятой;

□ int - объявляет целое число;

□ boo! - объявляет булеву переменную.

Эти типы используются для объявления переменных таким же способом, как в. С и С++: float f:

float g. h = 2.4; int NumTextures - 4; bool skipProcessirig:

В отличие от языка С здесь нужно обязательно указывать имя типа - не существует типа по умолчанию. Как и в С++, объявлять переменные можно в любой части кода, а не только после открытой фигурной скобки {.

Как и в языке С, числа с плавающей запятой здесь можно объявлять с помощью специальных символов (хотя суффиксы для обозначения точности отсутствуют, так как в языке шейдеров всего один числовой тип с плавающей запятой):


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