Difference between revisions of "Shader Uniform Descriptors"
From GiderosMobile
(Created page with "Each uniform descriptor entry is a lua table with the following fields: * name: Name of the uniform. Must match the name used in GLSL program. * type: Type of data this unifo...") |
|||
(2 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | __NOTOC__ | ||
+ | '''Available since:''' Gideros 2015.06.30<br/> | ||
+ | '''Class:''' [[Shader]]<br/> | ||
+ | |||
+ | === Description === | ||
Each uniform descriptor entry is a lua table with the following fields: | Each uniform descriptor entry is a lua table with the following fields: | ||
− | * name: | + | * '''name''': name of the uniform. Must match the name used in GLSL program |
− | * type: | + | * '''type''': type of data this uniform holds. Must be one of Shader.CFLOAT, Shader.CFLOAT4, Shader.CINT, Shader.CMATRIX or Shader.CTEXTURE |
− | * mult: | + | * '''mult''': the number of elements if this uniform is an array |
− | * sys: | + | * '''vertex''': boolean which must be set to true if the uniform is defined in the vertex shader, and false if it is defined in the fragment shader |
− | + | * '''sys''': indicates that this uniform has a special meaning and should be set by Gideros when appropriate. Current possible values are: | |
− | + | ** '''Shader.SYS_WVP''': this uniform of type CMATRIX will hold the World/View/Projection matrix | |
− | + | ** '''Shader.SYS_COLOR''': this uniform of type CFLOAT4 will hold the constant color to be used to draw the shape | |
− | + | ** '''Shader.SYS_WORLD''': this uniform of type CMATRIX will hold the World transform matrix | |
− | + | ** '''Shader.SYS_WIT''': this uniform of type CMATRIX will hold the World Inverse Transpose matrix | |
− | + | ** '''Shader.SYS_TEXTUREINFO''': this uniform of type CFLOAT4 will hold information about the texture used in a particle shader | |
+ | ** '''Shader.SYS_PARTICLESIZE''': the uniform of type CFLOAT will hold the particle size to use in a particle shader | ||
The uniforms must be declared in the order they appear in the constant block of the HLSL version of the shader. If shaders are only GLSL, then the order is not relevant. | The uniforms must be declared in the order they appear in the constant block of the HLSL version of the shader. If shaders are only GLSL, then the order is not relevant. | ||
+ | |||
+ | === Examples === | ||
+ | <syntaxhighlight lang="lua"> | ||
+ | local shadergrey=Shader.new("openglshader/vShaderGrey","openglshader/fShaderGrey", 0, | ||
+ | { | ||
+ | {name="vMatrix", type=Shader.CMATRIX, sys=Shader.SYS_WVP, vertex=true}, | ||
+ | {name="fColor", type=Shader.CFLOAT4, sys=Shader.SYS_COLOR, vertex=false}, | ||
+ | {name="fTexture", type=Shader.CTEXTURE, vertex=false}, | ||
+ | }, | ||
+ | { | ||
+ | {name="vVertex", type=Shader.DFLOAT, mult=3, slot=0, offset=0}, | ||
+ | {name="vColor", type=Shader.DUBYTE, mult=4, slot=1, offset=0}, | ||
+ | {name="vTexCoord", type=Shader.DFLOAT, mult=2, slot=2, offset=0}, | ||
+ | }, | ||
+ | { | ||
+ | {name="fTexCoord", type=Shader.CFLOAT2}, | ||
+ | } | ||
+ | ) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang="lua"> | ||
+ | local shaderwave=Shader.new("openglshader/vShaderWave","openglshader/fShaderWave", 0, | ||
+ | { | ||
+ | {name="g_MVPMatrix", type=Shader.CMATRIX, sys=Shader.SYS_WVP, vertex=true}, | ||
+ | {name="g_Color", type=Shader.CFLOAT4, mult=1, sys=Shader.SYS_COLOR}, | ||
+ | {name="g_Texture", type=Shader.CTEXTURE, mult=1, vertex=false}, | ||
+ | {name="time", type=Shader.CFLOAT, mult=1, vertex=false} | ||
+ | }, | ||
+ | { | ||
+ | {name="POSITION0", type=Shader.DFLOAT, mult=3, slot=0, offset=0}, | ||
+ | {name="vColor", type=Shader.DUBYTE, mult=0, slot=1, offset=0}, | ||
+ | {name="TEXCOORD0", type=Shader.DFLOAT, mult=2, slot=2, offset=0} | ||
+ | }, | ||
+ | { | ||
+ | {name="fTexCoord", type=Shader.CFLOAT2}, | ||
+ | } | ||
+ | ) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{Shader}} |
Latest revision as of 09:16, 15 November 2024
Available since: Gideros 2015.06.30
Class: Shader
Description
Each uniform descriptor entry is a lua table with the following fields:
- name: name of the uniform. Must match the name used in GLSL program
- type: type of data this uniform holds. Must be one of Shader.CFLOAT, Shader.CFLOAT4, Shader.CINT, Shader.CMATRIX or Shader.CTEXTURE
- mult: the number of elements if this uniform is an array
- vertex: boolean which must be set to true if the uniform is defined in the vertex shader, and false if it is defined in the fragment shader
- sys: indicates that this uniform has a special meaning and should be set by Gideros when appropriate. Current possible values are:
- Shader.SYS_WVP: this uniform of type CMATRIX will hold the World/View/Projection matrix
- Shader.SYS_COLOR: this uniform of type CFLOAT4 will hold the constant color to be used to draw the shape
- Shader.SYS_WORLD: this uniform of type CMATRIX will hold the World transform matrix
- Shader.SYS_WIT: this uniform of type CMATRIX will hold the World Inverse Transpose matrix
- Shader.SYS_TEXTUREINFO: this uniform of type CFLOAT4 will hold information about the texture used in a particle shader
- Shader.SYS_PARTICLESIZE: the uniform of type CFLOAT will hold the particle size to use in a particle shader
The uniforms must be declared in the order they appear in the constant block of the HLSL version of the shader. If shaders are only GLSL, then the order is not relevant.
Examples
local shadergrey=Shader.new("openglshader/vShaderGrey","openglshader/fShaderGrey", 0,
{
{name="vMatrix", type=Shader.CMATRIX, sys=Shader.SYS_WVP, vertex=true},
{name="fColor", type=Shader.CFLOAT4, sys=Shader.SYS_COLOR, vertex=false},
{name="fTexture", type=Shader.CTEXTURE, vertex=false},
},
{
{name="vVertex", type=Shader.DFLOAT, mult=3, slot=0, offset=0},
{name="vColor", type=Shader.DUBYTE, mult=4, slot=1, offset=0},
{name="vTexCoord", type=Shader.DFLOAT, mult=2, slot=2, offset=0},
},
{
{name="fTexCoord", type=Shader.CFLOAT2},
}
)
local shaderwave=Shader.new("openglshader/vShaderWave","openglshader/fShaderWave", 0,
{
{name="g_MVPMatrix", type=Shader.CMATRIX, sys=Shader.SYS_WVP, vertex=true},
{name="g_Color", type=Shader.CFLOAT4, mult=1, sys=Shader.SYS_COLOR},
{name="g_Texture", type=Shader.CTEXTURE, mult=1, vertex=false},
{name="time", type=Shader.CFLOAT, mult=1, vertex=false}
},
{
{name="POSITION0", type=Shader.DFLOAT, mult=3, slot=0, offset=0},
{name="vColor", type=Shader.DUBYTE, mult=0, slot=1, offset=0},
{name="TEXCOORD0", type=Shader.DFLOAT, mult=2, slot=2, offset=0}
},
{
{name="fTexCoord", type=Shader.CFLOAT2},
}
)