Sprite:setEffectStack

From GiderosMobile
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Available since: Gideros 2021.1
Class: Sprite

Description

Sets or removes post processing effects for this sprite.

Sprite:setEffectStack(effectStack,mode)


The effect stack is an array of tables, each one describing a post processing stage. Each table can have the following fields:

  • buffer: a RenderTarget that will hold the input of this post processing stage
  • shader: a Shader that will be used to draw the buffer above onto the next stage, or on screen optional
  • transform: a Matrix to transform the input buffer before processing optional
  • postTransform: a Matrix to transform the final stage output before displaying optional
  • textures: an array of TextureBase to be used by the shader. By default the buffer is used. optional
  • clear: a boolean indicating to clear the buffer before rendering. True by default for the first effect of the stack, false otherwise. optional
  • autoBuffer: a boolean to tell Gideros to resize the buffer to match the Sprite size automatically. False by default. optional
  • autoTransform: a Matrix used in computing the Sprite size when autoBuffer is enabled. optional

Parameters

effectStack: (table) a table describing the post processing phases to be applied
mode: (number) one of the Sprite.EFFECT_MODE_* constants optional

Example

local blur = Shader.new("Vertex", "fBlur", 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="fDir", type=Shader.CFLOAT2, vertex=false},
		{name="fResolution", type=Shader.CFLOAT2, 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 texture = Texture.new("image.png")
local tw = texture:getWidth()
local th = texture:getHeight()
stage:addChild(Pixel.new(0xff00ff, 1, tw, th)) -- bg image

local image = Bitmap.new(texture)
local rt = RenderTarget.new(tw, th)
rt:draw(image)
local render = Bitmap.new(rt)

-- set effect stack
render:setEffectStack{{buffer = rt, shader = blur, clear = false}}
render:setEffectConstant(1, "fDir", Shader.CFLOAT2, 1, 1,0)
render:setEffectConstant(1, "fResolution", Shader.CFLOAT2, 1, 512,512)

stage:addChild(render)