Постоянные переменные (Uniform Variables)

Спецификатор uniform используется для объявления глобальных переменных, значения которых на протяжении всех примитивов. Все uniform переменные предназначены только для чтения и инициализируются из внешнего источника во время линковки  или через API. Инициализирующее значение времени линковки имеет либо значение инициализатора, если он… Continue Reading

Входные переменные (Input Variables)

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

Константные выражения (правка)

Итак, в течении последних дней изменился оригинал документа, в данном разделе изменился последний вариант константного выражения и список функций: значение, возвращаемое вызовом определенной встроенной функцией, все аргументы которой являются константными выражениями, и как минимум включенной в список ниже. Любая другая встроенная… Continue Reading

Константные выражения

Константное выражение — это одно из: конкретное значение (например 5 или true) переменная, объявленная со спецификатором const и инициализированная константным выражением выражение, операнды которого которого константные выражения, включая получение элемента константного массива, или члена константной структуры, или компонента константного вектора. Однако… Continue Reading

Константный спецификатор (Constant Qualifier)

Проименованная константа времени компиляции или переменная только для чтения могут быть объявлены со спецификатором const. Спецификатор const может быть использован с любым не void явным базовым типом данных, в том числе со структурами и массивами. Запись в константную переменную за… Continue Reading

Спецификаторы памяти по умолчанию (Default Storage Qualifier)

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

Спецификаторы памяти (Storage Qualifiers)

Объявление пременной может иметь не более одного спецификатором памяти, указываемого перед типом. Вот они: Классификатор Значение <none: default> локальная память для чтения/записи или параметр принимаемый функцией const переменная, чье значение не может быть изменено in переменная привязывается к шейдер посредством… Continue Reading

Области видимости (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