Difference between revisions of "Shader:send (日本語)"

(Created page with "{{newin (日本語)|0.9.0|090|type=関数|text=PixelEffect:send から名称変更}} シェーダーの内部にある特別な変数 (''e...")
 
(translation updated.)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{newin (日本語)|[[0.9.0]]|090|type=関数|text=[[PixelEffect:send (日本語)|PixelEffect:send]] から名称変更}}
+
{{newin (日本語)|[[0.9.0 (日本語)|0.9.0]]|090|type=関数|text=[[PixelEffect:send (日本語)|PixelEffect:send]] から名称変更}}
シェーダーの内部にある特別な変数 (''extern'') へ一つ以上の値を送信します。extern 変数は ''extern'' キーワードを使用して区分する必要があります。例えば、
+
シェーダーの内部にある特別な変数 (''uniform'') へ値を送信します。Uniform 変数は ''uniform'' または ''extern'' キーワードで区別します。例えば、
  
 
<source lang="glsl">
 
<source lang="glsl">
extern number time;
+
uniform float time; // "float" は GLSL シェーダーで使用される数値型です。
extern number vars[2];
+
uniform float vars[2];
extern vec2 light_pos;
+
uniform vec2 light_pos;
extern vec4 colors[4];
+
uniform vec4 colors[4];
 
</source>
 
</source>
  
相当する send 呼び出しは
+
send の相当コードは、
  
 
<source lang="lua">
 
<source lang="lua">
Line 19: Line 19:
  
  
変数が各々で宣言されている場合に限り、シェーダーの頂点およびピクセルの両方にある要素の extern 変数へアクセスできます。
+
Uniform / extern 変数はシェーダのコード側では読み取り専用であり、 Shader:send の呼び出しにより変更されるまで不変です。変数が各々で宣言されている場合に限り、シェーダーの頂点およびピクセルの両方にある要素の Uniform 変数へアクセスできます。
 +
 
 +
{{notice|version [[0.10.2 (日本語)|0.10.2]] では Shader:send で配列を送信すると最後の引数が無視されてしまう不具合があります。解決策は複数の値を送信する時にuniform 配列へ余分な疑似引数を追加します。}}
  
 
== 関数 ==
 
== 関数 ==
Line 28: Line 30:
 
=== 引数 ===
 
=== 引数 ===
 
{{param|string|name|シェーダーへ送信する number の名前。}}
 
{{param|string|name|シェーダーへ送信する number の名前。}}
{{param|number|number|extern へ格納するために送信する number}}
+
{{param|number|number|uniform 変数へ格納するために送信する number}}
{{param|number|...|extern が配列である場合に送信する追加の number}}
+
{{param|number|...|uniform 変数が配列である場合に送信する追加の number}}
 
=== 返値 ===
 
=== 返値 ===
 
ありません。
 
ありません。
 
=== 注釈 ===
 
=== 注釈 ===
Lua において全ての数値は浮動小数点数であるため、シェーダーのコードで extern int 変数の値を送信するには [[Shader:sendInt (日本語)|Shader:sendInt]] 関数を使用する必要があります。
+
Lua において全ての数値は浮動小数点数であるため、 version [[0.10.2]] 以降ではシェーダーのコードで <code>uniform int</code> 変数の値を送信するには [[Shader:send (日本語)|Shader:sendInt]] 関数を使用してください。
  
 
== 関数 ==
 
== 関数 ==
Line 42: Line 44:
 
=== 引数 ===
 
=== 引数 ===
 
{{param|string|name|シェーダーへ送信するベクトルの名前。}}
 
{{param|string|name|シェーダーへ送信するベクトルの名前。}}
{{param|table|vector|ベクトルとして extern へ格納するために送信する number です。テーブルにある要素数でベクトルの種類を決定します (例えば、数値が二つであれば -> vec2)。最低2つおよび最高4つまでの数値を使用できます。}}
+
{{param|table|vector|ベクトルとして uniform 変数へ格納するために送信する number です。テーブルにある要素数でベクトルの種類を決定します (例えば、数値が二つであれば -> vec2)。最低2つおよび最高4つまでの数値を使用できます。}}
{{param|table|...|extern が配列である場合に送信する追加のベクトル。ベクトルの大きさは全て同一である必要があります (例えば、 vec3 のものだけ)。}}
+
{{param|table|...|uniform 変数が配列である場合に送信する追加のベクトル。ベクトルの大きさは全て同一にしてください (例えば vec3 のみ)。}}
 
=== 返値 ===
 
=== 返値 ===
 
ありません。
 
ありません。
Line 54: Line 56:
 
=== 引数 ===
 
=== 引数 ===
 
{{param|string|name|シェーダーへ送信する行列の名前。}}
 
{{param|string|name|シェーダーへ送信する行列の名前。}}
{{param|table|matrix|extern へ送信する 2x2, 3x3, または 4x4 の行列。テーブル形式を使用してください:  <code><nowiki>{{a,b,c,d}, {e,f,g,h}, ... }</nowiki></code>}}
+
{{param|table|matrix|uniform 変数へ送信する 2x2, 3x3, または 4x4 の行列。テーブル形式を使用してください:  <code><nowiki>{{a,b,c,d}, {e,f,g,h}, ... }</nowiki></code> または ( version [[0.10.2]] から) <code>{a,b,c,d, e,f,g,h, ...}</code> [[0.10.2 (日本語)|0.10.2]] 以前までの順列は縦列方向でしたが、 [[11.0 (日本語)|11.0]] 以降の順列は横列方向へ変更されました。}}
{{param|table|...|extern の配列に格納されている''行列''と同じ種類である追加対象の行列。}}
+
{{param|table|...|uniform の配列に格納されている''matrix'' (行列) と同じ種類である追加対象の行列。}}
 
=== 返値 ===
 
=== 返値 ===
 
ありません。
 
ありません。
Line 66: Line 68:
 
=== 引数 ===
 
=== 引数 ===
 
{{param|string|name|シェーダーへ送信する [[Texture (日本語)|Texture]] の名前。}}
 
{{param|string|name|シェーダーへ送信する [[Texture (日本語)|Texture]] の名前。}}
{{param|Texture|texture|extern へ送信するテクスチャ ([[Image (日本語)|Image]] または [[Canvas (日本語)|Canvas]])}}
+
{{param|Texture|texture|uniform 変数へ送信するテクスチャ ([[Image (日本語)|Image]] または [[Canvas (日本語)|Canvas]])}}
 
=== 返値 ===
 
=== 返値 ===
 
ありません。
 
ありません。
Line 77: Line 79:
 
=== 引数 ===
 
=== 引数 ===
 
{{param|string|name|シェーダーへ送信する Boolean の名前。}}
 
{{param|string|name|シェーダーへ送信する Boolean の名前。}}
{{param|boolean|boolean|extern へ送信する Boolean です。}}
+
{{param|boolean|boolean|uniform 変数へ送信する Boolean です。}}
{{param|boolean|...|extern が配列である場合に送信する追加の Boolean です。}}
+
{{param|boolean|...|uniform 変数が配列である場合に送信する追加の Boolean です。}}
 +
=== 返値 ===
 +
ありません。
 +
 
 +
== 関数 ==
 +
{{newin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 +
=== 概要 ===
 +
<source lang="lua">
 +
Shader:send( name, matrixlayout, matrix, ... )
 +
</source>
 +
=== 引数 ===
 +
{{param|string|name|シェーダーへ送信する行列 (matrix) の名前。}}
 +
{{param|MatrixLayout|matrixlayout|行列の配置方法 (縦列または横列方向)。}}
 +
{{param|table|matrix|uniform 変数へ送信する 2x2, 3x3, または 4x4 の行列。テーブル形式を使用してください:  <code><nowiki>{{a,b,c,d}, {e,f,g,h}, ... }</nowiki></code> または <code>{a,b,c,d, e,f,g,h, ...}</code>}}
 +
{{param|table|...|uniform の配列に格納されている''matrix'' (行列) と同じ種類である追加対象の行列。}}
 +
 
 +
== 関数 ==
 +
{{newin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 +
[[Data (日本語)|Data]] オブジェクトの内容を元にシェーダへ uniform 値を送信します。これはデータのバイトを直接複写します。
 +
=== 概要 ===
 +
<source lang="lua">
 +
Shader:send( name, data, offset, size )
 +
</source>
 +
=== 引数 ===
 +
{{param|string|name|シェーダーへ送信する uniform の名前。}}
 +
{{param|Data|data|送信する値がある Data オブジェクト。}}
 +
{{param|number|offset (0)|Data オブジェクトの先頭からのオフセット (バイト単位)。}}
 +
{{param|number|size (all)|送信データの大きさ (バイト単位)。 nil ならば、指定された uniform と同じバイト数を複写します。}}
 +
=== 返値 ===
 +
ありません。
 +
 
 +
== 関数 ==
 +
{{newin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 +
[[Data (日本語)|Data]] オブジェクトの内容を元にシェーダへ uniform 行列を送信します。これはデータのバイトを直接複写します。
 +
=== 概要 ===
 +
<source lang="lua">
 +
Shader:send( name, data, matrixlayout, offset, size )
 +
</source>
 +
=== 引数 ===
 +
{{param|string|name|シェーダーへ送信する uniform 行列の名前。}}
 +
{{param|Data|data|送信する値がある Data オブジェクト。}}
 +
{{param|MatrixLayout|matrixlayout|行列の配置方法 (縦列または横列方向)。}}
 +
{{param|number|offset (0)|Data オブジェクトの先頭からのオフセット (バイト単位)。}}
 +
{{param|number|size (all)|送信データの大きさ (バイト単位)。 nil ならば、指定された uniform と同じバイト数を複写します。}}
 
=== 返値 ===
 
=== 返値 ===
 
ありません。
 
ありません。
Line 84: Line 129:
 
== 関連 ==
 
== 関連 ==
 
* [[parent::Shader (日本語)]]
 
* [[parent::Shader (日本語)]]
* [[Shader:sendInt (日本語)]]
+
 
 
[[Category:Functions]]
 
[[Category:Functions]]
 
{{#set:Since=090}}
 
{{#set:Since=090}}
 
{{#set:PrettySince=0.9.0}}
 
{{#set:PrettySince=0.9.0}}
{{#set:Description=一つ以上の値をシェーダーへ送信します。}}
+
{{#set:Description=シェーダーへ値を送信します。}}
 +
 
 
== そのほかの言語 ==
 
== そのほかの言語 ==
{{i18n|Shader:send}}
+
{{i18n (日本語)|Shader:send}}

Latest revision as of 03:09, 23 July 2019

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 と同じバイト数を複写します。

返値

ありません。

関連



そのほかの言語