Difference between revisions of "Shader Attribute Descriptors"
From GiderosMobile
Line 1: | Line 1: | ||
+ | __NOTOC__ | ||
+ | '''Available since:''' Gideros 2015.06.30<br/> | ||
+ | '''Class:''' [[Shader]]<br/> | ||
+ | |||
+ | === Description === | ||
Each attribute descriptor entry is a Lua table with the following fields: | Each attribute descriptor entry is a Lua table with the following fields: | ||
− | * name: the name of the attribute/vertex data stream. Must match the name used in GLSL and HLSL code | + | * '''name''': the name of the attribute/vertex data stream. Must match the name used in '''GLSL''' and '''HLSL''' code |
− | * type: data type used from the host point of view. One of Shader.DFLOAT, Shader.DBYTE, Shader.DUBYTE, Shader.DSHORT, Shader.DUSHORT or Shader.DINT | + | * '''type''': data type used from the host point of view. One of '''Shader.DFLOAT''', '''Shader.DBYTE''', '''Shader.DUBYTE''', '''Shader.DSHORT''', '''Shader.DUSHORT''' or '''Shader.DINT''' |
− | * mult: number of components of the input vector | + | * '''mult''': number of components of the input vector |
− | * slot: index of the input slot (HLSL only) | + | * '''slot''': index of the input slot (HLSL only) |
− | * offset: offset within the input slot (HLSL only, should be 0) | + | * '''offset''': offset within the input slot (HLSL only, should be 0) |
The first three attributes have fixed meaning. Those are, in order: | The first three attributes have fixed meaning. Those are, in order: | ||
− | * the vertex coordinate stream. Type must be Shader.DFLOAT and mult should be 3 | + | * '''the vertex coordinate stream'''. Type must be Shader.DFLOAT and mult should be 3 |
− | * the per-vertex color. Type must be Shader.DUBYTE and mult should be 4 | + | * '''the per-vertex color'''. Type must be Shader.DUBYTE and mult should be 4 |
− | * the texture coordinates. Type must be Shader.DFLOAT and mult should be 2 | + | * '''the texture coordinates'''. Type must be Shader.DFLOAT and mult should be 2 |
'''If one of these fixed attributes is not used by the custom shader program, it should still be defined with a ''mult'' value of 0 to serve as a placeholder.''' | '''If one of these fixed attributes is not used by the custom shader program, it should still be defined with a ''mult'' value of 0 to serve as a placeholder.''' | ||
+ | |||
+ | === 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}, | ||
+ | } | ||
+ | ) | ||
+ | </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} | ||
+ | } | ||
+ | ) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{Shader}} |
Revision as of 21:58, 4 November 2023
Available since: Gideros 2015.06.30
Class: Shader
Description
Each attribute descriptor entry is a Lua table with the following fields:
- name: the name of the attribute/vertex data stream. Must match the name used in GLSL and HLSL code
- type: data type used from the host point of view. One of Shader.DFLOAT, Shader.DBYTE, Shader.DUBYTE, Shader.DSHORT, Shader.DUSHORT or Shader.DINT
- mult: number of components of the input vector
- slot: index of the input slot (HLSL only)
- offset: offset within the input slot (HLSL only, should be 0)
The first three attributes have fixed meaning. Those are, in order:
- the vertex coordinate stream. Type must be Shader.DFLOAT and mult should be 3
- the per-vertex color. Type must be Shader.DUBYTE and mult should be 4
- the texture coordinates. Type must be Shader.DFLOAT and mult should be 2
If one of these fixed attributes is not used by the custom shader program, it should still be defined with a mult value of 0 to serve as a placeholder.
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},
}
)
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}
}
)