Difference between revisions of "Shader:send"

m (extern -> uniform)
Line 1: Line 1:
 
{{newin|[[0.9.0]]|090|type=function|text=It has been renamed from [[PixelEffect:send]]}}
 
{{newin|[[0.9.0]]|090|type=function|text=It has been renamed from [[PixelEffect:send]]}}
Sends one or more values to a special (''extern'') variable inside the shader. Extern variables have to be marked using the ''extern'' keyword, e.g.
+
Sends one or more values to a special (''uniform'') variable inside the shader. Uniform variables have to be marked using the ''uniform'' or ''extern'' keyword, e.g.
  
 
<source lang="glsl">
 
<source lang="glsl">
extern number time;
+
uniform number time;
extern number vars[2];
+
uniform number vars[2];
extern vec2 light_pos;
+
uniform vec2 light_pos;
extern vec4 colors[4];
+
uniform vec4 colors[4];
 
</source>
 
</source>
  
Line 19: Line 19:
  
  
Extern variables can be accessed in both the Vertex and Pixel components of a shader, as long as the variable is declared in each.
+
Uniform / extern variables can be accessed in both the Vertex and Pixel components of a shader, as long as the variable is declared in each.
  
 
== Function ==
 
== Function ==
Line 28: Line 28:
 
=== Arguments ===
 
=== Arguments ===
 
{{param|string|name|Name of the number to send to the shader.}}
 
{{param|string|name|Name of the number to send to the shader.}}
{{param|number|number|Number to send to store in the extern.}}
+
{{param|number|number|Number to send to store in the uniform variable.}}
{{param|number|...|Additional numbers to send in case the extern is an array.}}
+
{{param|number|...|Additional numbers to send if the uniform variable is an array.}}
 
=== Returns ===
 
=== Returns ===
 
Nothing.
 
Nothing.
 
=== Notes ===
 
=== Notes ===
Because all numbers in Lua are floating point, you must use the function [[Shader:sendInt]] to send values to <code>extern int</code> variables in the shader's code.
+
Because all numbers in Lua are floating point, in versions prior to [[0.10.2]] you must use the function [[Shader:sendInt]] to send values to <code>uniform int</code> variables in the shader's code.
  
 
== Function ==
 
== Function ==
Line 42: Line 42:
 
=== Arguments ===
 
=== Arguments ===
 
{{param|string|name|Name of the vector to send to the shader.}}
 
{{param|string|name|Name of the vector to send to the shader.}}
{{param|table|vector|Numbers to send to the extern as a vector. The number of elements in the table determines the type of the vector (e.g. two numbers -> vec2). At least two and at most four numbers can be used.}}
+
{{param|table|vector|Numbers to send to the uniform variable as a vector. The number of elements in the table determines the type of the vector (e.g. two numbers -> vec2). At least two and at most four numbers can be used.}}
{{param|table|...|Additional vectors to send in case the extern is an array. All vectors need to be of the same size (e.g. only vec3's)}}
+
{{param|table|...|Additional vectors to send if the uniform variable is an array. All vectors need to be of the same size (e.g. only vec3's)}}
 
=== Returns ===
 
=== Returns ===
 
Nothing.
 
Nothing.
Line 54: Line 54:
 
=== Arguments ===
 
=== Arguments ===
 
{{param|string|name|Name of the matrix to send to the shader.}}
 
{{param|string|name|Name of the matrix to send to the shader.}}
{{param|table|matrix|2x2, 3x3, or 4x4 matrix to send to the extern. Using table form: <code><nowiki>{{a,b,c,d}, {e,f,g,h}, ... }</nowiki></code>}}
+
{{param|table|matrix|2x2, 3x3, or 4x4 matrix to send to the uniform variable. Using table form: <code><nowiki>{{a,b,c,d}, {e,f,g,h}, ... }</nowiki></code>}}
{{param|table|...|Additional matrices of the same type as ''matrix'' to store in the extern array.}}
+
{{param|table|...|Additional matrices of the same type as ''matrix'' to store in a uniform array.}}
 
=== Returns ===
 
=== Returns ===
 
Nothing.
 
Nothing.
Line 66: Line 66:
 
=== Arguments ===
 
=== Arguments ===
 
{{param|string|name|Name of the [[Texture]] to send to the shader.}}
 
{{param|string|name|Name of the [[Texture]] to send to the shader.}}
{{param|Texture|texture|Texture ([[Image]] or [[Canvas]]) to send to the extern.}}
+
{{param|Texture|texture|Texture ([[Image]] or [[Canvas]]) to send to the uniform variable.}}
 
=== Returns ===
 
=== Returns ===
 
Nothing.
 
Nothing.
Line 77: Line 77:
 
=== Arguments ===
 
=== Arguments ===
 
{{param|string|name|Name of the boolean to send to the shader.}}
 
{{param|string|name|Name of the boolean to send to the shader.}}
{{param|boolean|boolean|Boolean to send to store in the extern.}}
+
{{param|boolean|boolean|Boolean to send to store in the uniform variable.}}
{{param|boolean|...|Additional booleans to send in case the extern is an array.}}
+
{{param|boolean|...|Additional booleans to send if the uniform variable is an array.}}
 
=== Returns ===
 
=== Returns ===
 
Nothing.
 
Nothing.

Revision as of 22:18, 31 October 2016

Available since LÖVE 0.9.0
It has been renamed from PixelEffect:send.

Sends one or more values to a special (uniform) variable inside the shader. Uniform variables have to be marked using the uniform or extern keyword, e.g.

uniform number time;
uniform number vars[2];
uniform vec2 light_pos;
uniform vec4 colors[4];

The corresponding send calls would be

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 variables can be accessed in both the Vertex and Pixel components of a shader, as long as the variable is declared in each.

Function

Synopsis

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

Arguments

string name
Name of the number to send to the shader.
number number
Number to send to store in the uniform variable.
number ...
Additional numbers to send if the uniform variable is an array.

Returns

Nothing.

Notes

Because all numbers in Lua are floating point, in versions prior to 0.10.2 you must use the function Shader:sendInt to send values to uniform int variables in the shader's code.

Function

Synopsis

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

Arguments

string name
Name of the vector to send to the shader.
table vector
Numbers to send to the uniform variable as a vector. The number of elements in the table determines the type of the vector (e.g. two numbers -> vec2). At least two and at most four numbers can be used.
table ...
Additional vectors to send if the uniform variable is an array. All vectors need to be of the same size (e.g. only vec3's)

Returns

Nothing.

Function

Synopsis

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

Arguments

string name
Name of the matrix to send to the shader.
table matrix
2x2, 3x3, or 4x4 matrix to send to the uniform variable. Using table form: {{a,b,c,d}, {e,f,g,h}, ... }
table ...
Additional matrices of the same type as matrix to store in a uniform array.

Returns

Nothing.

Function

Synopsis

Shader:send( name, texture )

Arguments

string name
Name of the Texture to send to the shader.
Texture texture
Texture (Image or Canvas) to send to the uniform variable.

Returns

Nothing.

Function

Synopsis

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

Arguments

string name
Name of the boolean to send to the shader.
boolean boolean
Boolean to send to store in the uniform variable.
boolean ...
Additional booleans to send if the uniform variable is an array.

Returns

Nothing.

See Also

Other Languages