float f - 2.3: bool Ь = bool(f): Этот код выставит значение true для Ь. Такие преобразования могут оказаться полезными в операторах управления типа if, которые получают логическое значение. Булевы конструкторы преобразуют ненулевые числовые значения в true, а нулевые - в false.

Язык шейдеров OpenGL не предоставляет возможностей синтаксиса языка С для преобразований типов, которые могут оказаться неоднозначными. На самом деле в языке шейдеров нет способа интерпретировать какое-либо значение по-разному, предполагая какой-либо другой тип. В языке нет указателей, объединений (union), неявных преобразований типов и явных преобразований в неподходящие типы (reinterpret_cast). Вместо всего этого для преобразований типов используются конструкторы. Аргументы конструктора преобразуются в тип, для которого вызывается конструктор. Например, следующий код является правильным:

float f = float(3): // целое 3 становится числом с плавающей запятой 3.0 float g = floaUb); // преобразование логического Ь в число с плавающей //запятой

vec4 у = vec4(2): // все компоненты вектора v устанавливаются в 2.0 При преобразовании из логического типа true становится 1 или 1,0, a f al se - нулем.

3.5. Спецификаторы и интерфейс шейдера Перед объявлением переменных или формальных параметров функции можно указывать спецификаторы. Те из них, что используются для указания вида входных параметров функции (const, in, out, inout), описаны в разделе 3.6.2. Здесь же рассмотрим другие спецификаторы, большинство из которых формируют интерфейс шейдера. Далее приведен полный список спецификаторов, которые можно использовать вне формальных параметров функций:

□ attribute - для часто меняющейся информации, которая передается от приложения вершинному шейдеру;

□ uni form - для информации, которая меняется сравнительно редко и используется как вершинным, так и фрагментным шейдером;

□ varying - для интерполированной информации, передающейся от вершинного шейдера фрагментному;

□ const - для объявления неизменяемых константных идентификаторов, значения которых известны еще на этапе компиляции, как и в С.


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