Difference between revisions of "Shader"

From GiderosMobile
m (formatting)
Line 22: Line 22:
 
--Shaders are in vShader.glsl and fShader.glsl files
 
--Shaders are in vShader.glsl and fShader.glsl files
  
local shader=Shader.new("vShader","fShader",0, {
+
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="vMatrix",type=Shader.CMATRIX,sys=Shader.SYS_WVP,vertex=true},
{name="fTexture",type=Shader.CTEXTURE,vertex=false},  
+
{name="fColor",type=Shader.CFLOAT4,sys=Shader.SYS_COLOR,vertex=false},
{name="fTexelSize",type=Shader.CFLOAT4,vertex=false},  
+
{name="fTexture",type=Shader.CTEXTURE,vertex=false},
{name="fRad",type=Shader.CINT,vertex=false}, },  
+
{name="fTexelSize",type=Shader.CFLOAT4,vertex=false},
{ {name="vVertex",type=Shader.DFLOAT,mult=3,slot=0,offset=0},  
+
{name="fRad",type=Shader.CINT,vertex=false},
{name="vColor",type=Shader.DUBYTE,mult=4,slot=1,offset=0},  
+
},
{name="vTexCoord",type=Shader.DFLOAT,mult=2,slot=2,offset=0}, });
+
{
 +
{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("fRad",Shader.CINT,1,0) --Initial blur level  

Revision as of 02:13, 10 December 2019


Supported platforms: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.pngPlatform html5.pngPlatform winrt.pngPlatform win32.png
Available since: Gideros 2015.06.30
Inherits from: Object

Description

Gideros internally uses five distinct shaders:

  • the ‘Basic’ shader handle shapes with a constant color
  • the ‘Color’ shader handle shapes with per-vertex colors (mostly used by Mesh sprite)
  • the ‘Texture’ shader handle textured shapes (Bitmaps)
  • the ‘TextureColor’ shader handle textured and per-vertex colored shapes
  • and the ‘Particle’ shader deals with Box2D particle systems

The new shader API allows to replace 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 straight-forward: 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.

Examples

--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)

Methods

Shader.new create new shader
Shader:getEngineVersion get shader version
Shader:getProperties get graphics engine properties
Shader:getShaderLanguage Get shader language
Shader:setConstant change the value of a uniform

Events

Constants

Shader.CFLOAT
Shader.CFLOAT4
Shader.CINT
Shader.CMATRIX
Shader.CTEXTURE
Shader.DBYTE
Shader.DFLOAT
Shader.DINT
Shader.DSHORT
Shader.DUBYTE
Shader.DUSHORT
Shader.FLAG_FROM_CODE
Shader.FLAG_NONE
Shader.FLAG_NO_DEFAULT_HEADER
Shader.SYS_COLOR
Shader.SYS_NONE
Shader.SYS_PARTICLESIZE
Shader.SYS_TEXTUREINFO
Shader.SYS_WIT
Shader.SYS_WORLD
Shader.SYS_WVP