Sprite:setEffectStack

From GiderosMobile
Revision as of 12:50, 27 April 2023 by MoKaLux (talk | contribs) (added example from rrraptor example)

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)