Sprite:setEffectStack

From GiderosMobile
Revision as of 14:31, 13 July 2023 by Hgy29 (talk | contribs) (Text replacement - "<source" to "<syntaxhighlight")

Available since: Gideros 2021.1
Class: Sprite

Description

Sets or removes post processing effects for this sprite. <syntaxhighlight lang="lua"> Sprite:setEffectStack(effectStack,mode) </source>


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

<syntaxhighlight lang="lua"> 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:setEffectStackTemplate: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) </source>