Difference between revisions of "Sprite:setEffectStack"

From GiderosMobile
(added example from rrraptor example)
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(One intermediate revision by the same user not shown)
Line 5: Line 5:
 
=== Description ===
 
=== Description ===
 
Sets or removes post processing effects for this sprite.
 
Sets or removes post processing effects for this sprite.
<source lang="lua">
+
<syntaxhighlight lang="lua">
 
Sprite:setEffectStack(effectStack,mode)
 
Sprite:setEffectStack(effectStack,mode)
</source>
+
</syntaxhighlight>
  
  
Line 25: Line 25:
  
 
=== Example ===
 
=== Example ===
<source lang="lua">
+
<syntaxhighlight lang="lua">
 
local blur = Shader.new("Vertex", "fBlur", 0,
 
local blur = Shader.new("Vertex", "fBlur", 0,
 
{
 
{
Line 56: Line 56:
  
 
stage:addChild(render)
 
stage:addChild(render)
</source>
+
</syntaxhighlight>
  
 
{{Sprite}}
 
{{Sprite}}

Latest revision as of 14:33, 13 July 2023

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)