С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