Гарантировано, что целое число может быть не меньшей, чем 16 бит точности; оно может быть положительным, отрицательным, нулем; арифметические операции, аргументы и результат которых не превышают заданной точности, всегда дают ожидаемый результат. Точность здесь подразумевает использование 16 бит и знака числа, так что полный диапазон может быть [-65535, 65535] или даже больше.

Целые числа в языке шейдеров OpenGL, как и в языке С, могут быть представлены в десятичном, восьмеричном или шестнадцатеричном виде.

42 /У представление десятичного целого

052 // представление восьмеричного целого

0х2А // представление целого в шестнадцатеричном виде Для целых чисел тоже не используются суффиксы, так как целочисленный тип - единственный. Целые числа служат для обозначения размеров структур или массивов или используются в качестве счетчиков. А графические величины, например цвет или координаты, представлять в шейдере лучше всего числами с плавающей запятой.

Здесь булевы переменные, как и в C++, называются bool. Они могут иметь одно из двух значений: «истина» или «ложь«>. Для их обозначения существует две константы: true и false. Результатом операторов отношения, таких как «меньше» (<), и логических операторов, таких как «логическое И» (&&), всегда является логическое значение. Конструкции языка типа i f-el se принимают только выражения булева типа. В этом отношении язык шейдеров OpenGL ограничивает разработчиков больше, чем C++.

3.2,2. Векторы

В языке шейдеров OpenGL есть встроенные типы векторов из чисел с плавающей запятой (float), целых (int) или булевых (bool). Существуют разные типы для двух-, трех- и четырехэлементных векторов:

□ vec2 - вектор из двух чисел с плавающей запятой;

□ v.ec3 - вектор из трех чисел с плавающей запятой;

□ vec4 - вектор из четырех чисел с плавающей запятой;

□ i vec2 - вектор из двух целых;

□ i vec3 - вектор из трех целых;

□ i vec4 - вектор из четырех целых;

□ bvec2 - вектор из двух булевых значений;

□ bvec3 - вектор из трех булевых значений;

□ bvec4 - вектор из четырех булевых значений.

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

Компилятор не способен самостоятельно отличить вектор цвета ИЛИ координат от вектора с другими значениями. С точки зрения языка все они - лишь векторы чисел с плавающей запятой.

Элементы вектора можно адресовать как по именам (как в структурах), так и по индексам (как в массивах). Например, пусть posi ti on - переменная типа vec3, она трактуется как вектор (лг, у, z), и к первому элементу вектора можно обратиться position, х.


⇐ вернуться назад | | далее ⇒