3.3. Инициализаторы и конструкторы

12,9. Согласование и преобразование типов Язык шейдеров OpenGL является строго типизированным. Связываемые типы должны соответствовать друг другу: аргумент, передаваемый в функцию, должен соответствовать формальному объявлению данного параметра функции, а типы, с которыми производятся операции, должны соответствовать требованиям конкретного оператора.

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

3.3. Инициализаторы и конструкторы

Переменные шейдера можно инициализировать вместе с объявлением. Следующий пример инициализирует Ь, оставляя а и с не определенными: float a. b = 3.0. с: Переменные, объявленные константными, должны быть инициализированы обязательно:

const int Size = 4: // требуется значение для инициализации

Attribute-, uniform- и varying-переменные нельзя инициализировать при объявлении:

attribute float Temperature: // инициализатора нет

// значение устанавливается вершинным API

uniform int Size: // инициализатора нет.

// значение устанавливается uniform-API

varying float density: // инициализатора нет.

// значение устанавливается вершинный тендером Чтобы инициализировать составные типы либо на этапе объявления, либо позже, используются конструкторы. Это единственный способ инициализации, так как язык шейдеров не заимствовал из С синтаксис с фигурными скобками ({…}). Конструкторы похожи на вызовы функций, где вместо имени функции подставляется имя типа. Например, чтобы инициализировать вектор vec4 значениями (1,0, 2,0,3,0,4,0), нужно написать:

vee4 V = vec4tl.Q. 2.0. 3.0. 4.0):

или, что то же самое:

vec4 v:
v = vec4(l-0. 2.0, 3.0. 4.0):

Конструкторы существуют для всех встроенных типов, кроме семплеров, и для структур.


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