Шейдеры взаимодействуют со стандартной функциональностью 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:
В отличие от языка С здесь нужно обязательно указывать имя типа - не существует типа по умолчанию. Как и в С++, объявлять переменные можно в любой части кода, а не только после открытой фигурной скобки {.
Как и в языке С, числа с плавающей запятой здесь можно объявлять с помощью специальных символов (хотя суффиксы для обозначения точности отсутствуют, так как в языке шейдеров всего один числовой тип с плавающей запятой):