Spec-Zone.ru › LÖVE

Сhader:send

Доступно начиная с LÖVE 0.9.0
Было переименовано из PixelEffect:send.

Отправляет одно или несколько значений в специальную (униформную) переменную внутри шейдера. Униформные переменные должны быть помечены с помощью ключевого слова uniform или extern, например:

uniform float time;  // "float" is the typical number type used in GLSL shaders.
uniform float vars[2];
uniform vec2 light_pos;
uniform vec4 colors[4];

Соответствующие вызовы send:

shader:send("time", t)
shader:send("vars",a,b)
shader:send("light_pos", {light_x, light_y})
shader:send("colors", {r1, g1, b1, a1},  {r2, g2, b2, a2},  {r3, g3, b3, a3},  {r4, g4, b4, a4})


Униформные/экстерн-переменные являются только для чтения в коде шейдера и остаются постоянными до изменения вызовом Shader:send. Униформные переменные могут быть доступны как в вершинной, так и в пиксельной составляющих шейдера, при условии объявления переменной в каждой.

Существует ошибка в версии 0.10.2, которая приводит к тому, что Shader:send игнорирует последний аргумент при отправке массивов. Простое решение — добавить дополнительный фиктивный аргумент при отправке нескольких значений в униформный массив.

Функция

Синопсис

Shader:send( name, number, ... )

Аргументы

string name
Имя числа, которое нужно отправить в шейдер.
number number
Число, которое нужно отправить для хранения в униформной переменной.
number ...
Дополнительные числа для отправки, если униформная переменная является массивом.

Возвращаемые значения

Ничего.

Примечания

Поскольку все числа в Lua являются числами с плавающей точкой, в версиях до 0.10.2 необходимо использовать функцию Shader:sendInt для отправки значений в uniform int переменные в коде шейдера.

Функция

Синопсис

Shader:send( name, vector, ... )

Аргументы

string name
Имя вектора, который нужно отправить в шейдер.
table vector
Числа, которые нужно отправить в униформную переменную как вектор. Количество элементов в таблице определяет тип вектора (например, два числа -> vec2). Можно использовать от двух до четырех чисел.
table ...
Дополнительные векторы для отправки, если униформная переменная является массивом. Все векторы должны быть одинакового размера (например, только vec3).

Возвращаемые значения

Ничего.

Функция

Синопсис

Shader:send( name, matrix, ... )

Аргументы

string name
Имя матрицы, которую нужно отправить в шейдер.
table matrix
Матрица 2x2, 3x3 или 4x4, которую нужно отправить в униформную переменную. Используя табличную форму: {{a,b,c,d}, {e,f,g,h}, ... } или (с версии 0.10.2) {a,b,c,d, e,f,g,h, ...}. Порядок в 0.10.2 — строка-столбец; начиная с 11.0 — строка-строка.
table ...
Дополнительные матрицы того же типа, что и матрица, для хранения в униформном массиве.

Возвращаемые значения

Ничего.

Функция

Синопсис

Shader:send( name, texture )

Аргументы

string name
Имя Текстуры для отправки в шейдер.
Texture texture
Текстура (Изображение или холст) для отправки в униформную переменную.

Возвращаемые значения

Ничего.

Функция

Синопсис

Shader:send( name, boolean, ... )

Аргументы

string name
Имя булевого значения для отправки в шейдер.
boolean boolean
Булево значение для хранения в униформной переменной.
boolean ...
Дополнительные булевые значения для отправки, если униформная переменная является массивом.

Возвращаемые значения

Ничего.

Функция

Доступно начиная с LÖVE 11.0
Этот вариант не поддерживается в более ранних версиях.

Синопсис

Shader:send( name, matrixlayout, matrix, ... )

Аргументы

string name
Имя матрицы для отправки в шейдер.
MatrixLayout matrixlayout
Макет (строка или столбец) матрицы.
table matrix
Матрица 2x2, 3x3 или 4x4 для отправки в униформную переменную. Используя табличную форму: {{a,b,c,d}, {e,f,g,h}, ... } или {a,b,c,d, e,f,g,h, ...}.
table ...
Дополнительные матрицы того же типа, что и матрица, для хранения в униформном массиве.

Функция

Доступно начиная с LÖVE 11.0
Этот вариант не поддерживается в более ранних версиях.

Отправляет униформные значения в шейдер из содержимого объекта Данные. Это напрямую копирует байты данных.

Синопсис

Shader:send( name, data, offset, size )

Аргументы

string name
Имя униформа, которое нужно отправить в шейдер.
Data data
Объект данных, содержащий значения для отправки.
number offset (0)
Смещение в байтах от начала объекта данных.
number size (all)
Размер в байтах отправляемых данных. Если nil, будет скопировано столько байтов, сколько использует указанный униформ.

Возвращаемые значения

Ничего.

Функция

Доступно начиная с LÖVE 11.0
Этот вариант не поддерживается в более ранних версиях.

Отправляет униформные матрицы в шейдер из содержимого объекта Данные. Это напрямую копирует байты данных.

Синопсис

Shader:send( name, data, matrixlayout, offset, size )

Аргументы

string name
Имя униформной матрицы для отправки в шейдер.
Data data
Объект данных, содержащий значения для отправки.
MatrixLayout matrixlayout
Макет (строка или столбец) матрицы в памяти.
number offset (0)
Смещение в байтах от начала объекта данных.
number size (all)
Размер в байтах отправляемых данных. Если nil, будет скопировано столько байтов, сколько использует указанный униформ.

Возвращаемые значения

Ничего.

См. также

  • Шейдер


© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/Shader:send

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API