i
иесЗ position: vec3 color:
J:
Как и в С++, имя структуры является типом данных, и ключевое слово typedef в данном случае использовать не обязательно. Переменная типа 1 i ght из этого примера может быть объявлена так:
light ceilingL1ght:
Все прочие особенности работы со структурами такие же, как в С. Структуры можно делать членами других структур или объявлять внутри других структур, но тогда они не могут быть безымянными. В состав структур могут входить массивы. У каждого уровня вложенности есть собственное пространство имен для членов структуры.
Битовые поля (объявление целых чисел как набора битов) не поддерживаются.
Сейчас все структуры являются только типами, определенными пользователем. Ключевые слова union, enum и cl ass зарезервированы для возможного использования в будущем.
3.2.6. Массивы
В языке шейдеров OpenGL можно создавать массивы любых типов. Определение vec4 pointsCIO]: создает массив из десяти элементов типа vec4 с номерами от 0 до 9. Массив можно объявить только с помощью квадратных скобок, так как в языке нет указателей.
Объявляются массивы без указания размера. Например, объявление
vec4 pointsC]:
допускается, пока выполняется одно из следующих условий:
1. Перед ссылкой на массив в программе он объявлен еще раз с указанием размера такого же типа, как в предыдущем объявлении, например:
vec4 pointsC]: // points - массив неизвестного размера vec4 pointsCIO]: // points - массив размером 10 элементов Но нельзя объявлять этот же массив еще раз:
vec4 pointsC]: // points - массив неизвестного размера
vec4 pointsCIO]; // points - нассиа размером 10 элементов
vec4 points[20]: // это недопустимо
vec4 pointsC]: // зто тоже недопустимо
2. Все индексы, ссылающиеся на массив, - константы времени компиляции. При этом компилятор может увеличивать массив, чтобы он мог вместить все элементы с используемыми в программе индексами, например:
vec4 pointsC]: // points - массив неизвестного размера
points[2] = vec4(1.0): // points - массив размером 3 элемента points[7] - vec4(2.0): // points стал массивом на 8 элементов