Difference between revisions of "Shader"
Line 58: | Line 58: | ||
=== Events === | === Events === | ||
=== Constants === | === Constants === | ||
− | [[Shader.CFLOAT]]<br/><!--GIDEROSCST:Shader.CFLOAT 1--> | + | [[Shader.CFLOAT]] ''a float value''<br/><!--GIDEROSCST:Shader.CFLOAT 1--> |
− | [[Shader.CFLOAT4]]<br/><!--GIDEROSCST:Shader.CFLOAT4 | + | [[Shader.CFLOAT2]] ''a vector of two floats''<br/><!--GIDEROSCST:Shader.CFLOAT2 2--> |
− | [[Shader.CINT]]<br/><!--GIDEROSCST:Shader.CINT 0--> | + | [[Shader.CFLOAT3]] ''a vector of three floats''<br/><!--GIDEROSCST:Shader.CFLOAT3 3--> |
− | [[Shader.CMATRIX]]<br/><!--GIDEROSCST:Shader.CMATRIX | + | [[Shader.CFLOAT4]] ''a vector of four floats''<br/><!--GIDEROSCST:Shader.CFLOAT4 4--> |
− | [[Shader.CTEXTURE]]<br/><!--GIDEROSCST:Shader.CTEXTURE | + | [[Shader.CINT]] ''an integer value''<br/><!--GIDEROSCST:Shader.CINT 0--> |
+ | [[Shader.CMATRIX]] ''a 4x4 float matrix''<br/><!--GIDEROSCST:Shader.CMATRIX 5--> | ||
+ | [[Shader.CTEXTURE]] ''a texture''<br/><!--GIDEROSCST:Shader.CTEXTURE 6--> | ||
[[Shader.DBYTE]]<br/><!--GIDEROSCST:Shader.DBYTE 0--> | [[Shader.DBYTE]]<br/><!--GIDEROSCST:Shader.DBYTE 0--> | ||
[[Shader.DFLOAT]]<br/><!--GIDEROSCST:Shader.DFLOAT 5--> | [[Shader.DFLOAT]]<br/><!--GIDEROSCST:Shader.DFLOAT 5--> | ||
Line 72: | Line 74: | ||
[[Shader.FLAG_NONE]]<br/><!--GIDEROSCST:Shader.FLAG_NONE 0--> | [[Shader.FLAG_NONE]]<br/><!--GIDEROSCST:Shader.FLAG_NONE 0--> | ||
[[Shader.FLAG_NO_DEFAULT_HEADER]]<br/><!--GIDEROSCST:Shader.FLAG_NO_DEFAULT_HEADER 1--> | [[Shader.FLAG_NO_DEFAULT_HEADER]]<br/><!--GIDEROSCST:Shader.FLAG_NO_DEFAULT_HEADER 1--> | ||
− | [[Shader.SYS_COLOR]]<br/><!--GIDEROSCST:Shader.SYS_COLOR 2--> | + | [[Shader.SYS_COLOR]] ''The current color (CFLOAT4)''<br/><!--GIDEROSCST:Shader.SYS_COLOR 2--> |
− | [[Shader.SYS_NONE]]<br/><!--GIDEROSCST:Shader.SYS_NONE 0--> | + | [[Shader.SYS_NONE]] ''Not filled by Gideros''<br/><!--GIDEROSCST:Shader.SYS_NONE 0--> |
− | [[Shader.SYS_PARTICLESIZE]]<br/><!--GIDEROSCST:Shader.SYS_PARTICLESIZE 6--> | + | [[Shader.SYS_PARTICLESIZE]] ''The particle size''<br/><!--GIDEROSCST:Shader.SYS_PARTICLESIZE 6--> |
− | [[Shader.SYS_TEXTUREINFO]]<br/><!--GIDEROSCST:Shader.SYS_TEXTUREINFO 5--> | + | [[Shader.SYS_PROJECTION]] ''The projection matrix (CMATRIX)''<br/><!--GIDEROSCST:Shader.SYS_PROJECTION 10--> |
− | [[Shader.SYS_WIT]]<br/><!--GIDEROSCST:Shader.SYS_WIT 3--> | + | [[Shader.SYS_TEXTUREINFO]] ''Real extent and texel size of the texture (CFLOAT4)''<br/><!--GIDEROSCST:Shader.SYS_TEXTUREINFO 5--> |
− | [[Shader.SYS_WORLD]]<br/><!--GIDEROSCST:Shader.SYS_WORLD 4--> | + | [[Shader.SYS_TIMER]] ''Current time (CFLOAT)''<br/><!--GIDEROSCST:Shader.SYS_TIMER 9--> |
− | [[Shader.SYS_WVP]]<br/><!--GIDEROSCST:Shader.SYS_WVP 1--> | + | [[Shader.SYS_VIEW]] ''The view matrix (CMATRIX)''<br/><!--GIDEROSCST:Shader.SYS_VIEW 8--> |
+ | [[Shader.SYS_VP]] ''Combined view/projection matrix (CMATRIX)''<br/><!--GIDEROSCST:Shader.SYS_VP 11--> | ||
+ | [[Shader.SYS_WIT]] ''The World Inverse Transpose matrix (CMATRIX)''<br/><!--GIDEROSCST:Shader.SYS_WIT 7--> | ||
+ | [[Shader.SYS_WIT3]] ''3x3 World Inverse Transpose matrix''<br/><!--GIDEROSCST:Shader.SYS_WIT3 3--> | ||
+ | [[Shader.SYS_WORLD]] ''The world or matrix (CMATRIX)''<br/><!--GIDEROSCST:Shader.SYS_WORLD 4--> | ||
+ | [[Shader.SYS_WVP]] ''The combined world/view/projection matrix (CMATRIX)''<br/><!--GIDEROSCST:Shader.SYS_WVP 1--> | ||
|} | |} | ||
{{GIDEROS IMPORTANT LINKS}} | {{GIDEROS IMPORTANT LINKS}} |
Revision as of 08:19, 18 December 2020
Supported platforms:
Available since: Gideros 2015.06.30
Inherits from: Object
Description
Gideros internally uses five distinct shaders:
- the ‘Basic’ shader handles shapes with a constant color
- the ‘Color’ shader handles shapes with per-vertex colors (mostly used by Mesh sprite)
- the ‘Texture’ shader handles textured shapes (Bitmaps)
- the ‘TextureColor’ shader handles textured and per-vertex colored shapes
- and the ‘Particle’ shader deals with Box2D particle systems
The shader API allows replacing the default shader used by Gideros with a custom one, on a sprite per sprite basis. As with most of Gideros API’s this one is straightforward: you create a Shader object and assign it to one or several sprites.
That said, since Gideros will use your shader as if it was the standard one, you will have to make sure that your custom shader is compatible with the standard one, which essentially means that it takes the same input parameters.
You can also write your shader code in Lua, it will then be automatically translated to the relevant shader language for the platform you are using, eg GLSL, HLSL or MTL. This is the recommended way.
Example
A blur shader
--Shaders are in vShader.glsl and fShader.glsl files
local shader = Shader.new("vShader", "fShader", 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="fTexelSize", type=Shader.CFLOAT4, vertex=false},
{name="fRad", type=Shader.CINT, 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},
}
);
shader:setConstant("fRad", Shader.CINT, 1, 0) -- initial blur level
shader:setConstant("fTexelSize", Shader.CFLOAT4, 1, {1/texw, 1/texh, 0, 0}) -- initial texel size
sprite:setShader(shader)
MethodsShader.new creates a new shader |
EventsConstantsShader.CFLOAT a float value |