Области видимости (Scoping)

Область видимости переменной определяется тем, где она объявлена. Если она объявлена вне всех функций, то имеет глобальную область видимости, начинающуюся с места объявления и до конца текущего шейдера. Соответственно если объявлена внутри while или for, то область действие до следующей итерации. (Смотри раздел 6.2… Continue Reading

Инициализаторы (Initializers)

При объявлении переменной может быть предоставлено начальное значение, заданное при помощи знака равенства (=), за которым следует инициализатор. Инициализатор представляет собой либо присваиваемое—выражение, либо список инициализаторов, заключенных в фигурные скобки. Грамматика для инициализатора: инициализатор : присваиваемое—выражение {список-инициализаторов} {список-инициализаторов , } список-инициализаторов :… Continue Reading

Неявные преобразования (Implicit Conversions)

В некоторых ситуациях выражение и его типы будут неявно преобразованы в другой тип. В таблице ниже показаны все разрешенные неявные преобразования: Тип выражения Может быть неявно преобразован в int uint int uint float int uint float double ivec2 uvec2 ivec3… Continue Reading

Массивы (Arrays)

Однотипные переменные могут быть объединены в массивы путем объявления имени и последующих квадратных скобок ( [] ), которые могут содержать (но не обязательно) размер массива.  Размер указанный при объявлении должен быть целочисленным постоянным выражением (см. раздел 4.3.3 “Constant Expressions”) больше… Continue Reading

Структуры (Structures)

Пользовательские типы могут быть созданы путем объединения других, уже определенных, типов в структуры, используя ключевое слово struct. Например: struct light { float intensity; vec3 position; } lightVar; В данном примере light является именем нового типа, а lightVar является переменной данного типа. Что… Continue Reading

Атомарные счетчики (Atomic Counters)

Типы атомарных счетчиков (atomic_uint) являются непрозрачными дескрипторами (handles) для счетчиков, которые объявляются и ведут себя как описанные ранее непрозрачные типы. Переменные, которые они объявляют, при использовании встроенных функций счетчика атомов указывают какой счетчик для доступа переменные данного типа указывают какой счетчик будет… Continue Reading

Изображения (Images)

Типы изображений являются непрозрачными типами, объявленными и ведущими себя как описанные ранее непрозрачные типы. Они могут быть дополнительно определены с помощью спецификаторов памяти. При объединении в массивы в шейдере, сэмплеры могут индексироваться только в динамически постоянных целочисленных выражениях, в противном случае результат… Continue Reading

Сэмплеры (Samplers)

Типы сэмплеров (например sampler2D) являются непрозрачными типами, объявленными и ведущими себя как описанные ранее непрозрачные типы. При объединении в массивы в шейдере, сэмплеры могут индексироваться только в динамически постоянных целочисленных выражениях, в противном случае результат не определен. Сэмплерные переменные являются… Continue Reading

Непрозрачные типы (Opaque Types)

Непрозрачные типы описывают переменные, которые являются эффективным способом управления непрозрачностью других объектов. Доступ к этим объектам осуществляется через встроенные функции, а не через прямое чтение или запись объявленной переменной. Они могут быть объявлены только как функциональные параметры или в постоянных… Continue Reading

Матрицы (Matrices)

OpenGL Shading Language имеет встроенные типы для матриц 2х2, 2х3, 2х4, 3х2, 3х3, 3х4, 4х2, 4х3 и 4х4 для чисел с плавающей точкой. Типы матриц начинающиеся с «mat» имеют компоненты одинарной точности, Типы матриц начинающиеся с «dmat» имеют компоненты двойной точности.… Continue Reading