Shader:send (日本語)

LÖVE 0.9.0 から使用可能
PixelEffect:send から名称変更。

シェーダーの内部にある特別な変数 (uniform) へ値を送信します。Uniform 変数は uniform または extern キーワードで区別します。例えば、

uniform float time;  // "float" は GLSL シェーダーで使用される数値型です。
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})


Uniform / extern 変数はシェーダのコード側では読み取り専用であり、 Shader:send の呼び出しにより変更されるまで不変です。変数が各々で宣言されている場合に限り、シェーダーの頂点およびピクセルの両方にある要素の Uniform 変数へアクセスできます。

O.png version 0.10.2 では Shader:send で配列を送信すると最後の引数が無視されてしまう不具合があります。解決策は複数の値を送信する時にuniform 配列へ余分な疑似引数を追加します。  

関数

概要

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

引数

string name
シェーダーへ送信する number の名前。
number number
uniform 変数へ格納するために送信する number
number ...
uniform 変数が配列である場合に送信する追加の number

返値

ありません。

注釈

Lua において全ての数値は浮動小数点数であるため、 version 0.10.2 以降ではシェーダーのコードで uniform int 変数の値を送信するには Shader:sendInt 関数を使用してください。

関数

概要

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

引数

string name
シェーダーへ送信するベクトルの名前。
table vector
ベクトルとして uniform 変数へ格納するために送信する number です。テーブルにある要素数でベクトルの種類を決定します (例えば、数値が二つであれば -> vec2)。最低2つおよび最高4つまでの数値を使用できます。
table ...
uniform 変数が配列である場合に送信する追加のベクトル。ベクトルの大きさは全て同一にしてください (例えば vec3 のみ)。

返値

ありません。

関数

概要

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

引数

string name
シェーダーへ送信する行列の名前。
table matrix
uniform 変数へ送信する 2x2, 3x3, または 4x4 の行列。テーブル形式を使用してください: {{a,b,c,d}, {e,f,g,h}, ... } または ( version 0.10.2 から) {a,b,c,d, e,f,g,h, ...} 0.10.2 以前までの順列は縦列方向でしたが、 11.0 以降の順列は横列方向へ変更されました。
table ...
uniform の配列に格納されているmatrix (行列) と同じ種類である追加対象の行列。

返値

ありません。

関数

概要

Shader:send( name, texture )

引数

string name
シェーダーへ送信する Texture の名前。
Texture texture
uniform 変数へ送信するテクスチャ (Image または Canvas)

返値

ありません。

関数

概要

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

引数

string name
シェーダーへ送信する Boolean の名前。
boolean boolean
uniform 変数へ送信する Boolean です。
boolean ...
uniform 変数が配列である場合に送信する追加の Boolean です。

返値

ありません。

関数

LÖVE 11.0 から使用可能
この異形は以前のバージョンでは非対応です。

概要

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

引数

string name
シェーダーへ送信する行列 (matrix) の名前。
MatrixLayout matrixlayout
行列の配置方法 (縦列または横列方向)。
table matrix
uniform 変数へ送信する 2x2, 3x3, または 4x4 の行列。テーブル形式を使用してください: {{a,b,c,d}, {e,f,g,h}, ... } または {a,b,c,d, e,f,g,h, ...}
table ...
uniform の配列に格納されているmatrix (行列) と同じ種類である追加対象の行列。

関数

LÖVE 11.0 から使用可能
この異形は以前のバージョンでは非対応です。

Data オブジェクトの内容を元にシェーダへ uniform 値を送信します。これはデータのバイトを直接複写します。

概要

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

引数

string name
シェーダーへ送信する uniform の名前。
Data data
送信する値がある Data オブジェクト。
number offset (0)
Data オブジェクトの先頭からのオフセット (バイト単位)。
number size (all)
送信データの大きさ (バイト単位)。 nil ならば、指定された uniform と同じバイト数を複写します。

返値

ありません。

関数

LÖVE 11.0 から使用可能
この異形は以前のバージョンでは非対応です。

Data オブジェクトの内容を元にシェーダへ uniform 行列を送信します。これはデータのバイトを直接複写します。

概要

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

引数

string name
シェーダーへ送信する uniform 行列の名前。
Data data
送信する値がある Data オブジェクト。
MatrixLayout matrixlayout
行列の配置方法 (縦列または横列方向)。
number offset (0)
Data オブジェクトの先頭からのオフセット (バイト単位)。
number size (all)
送信データの大きさ (バイト単位)。 nil ならば、指定された uniform と同じバイト数を複写します。

返値

ありません。

関連



そのほかの言語