Difference between revisions of "Sprite:setEffectStack"

From GiderosMobile
(Created page with "__NOTOC__ <languages /> '''<translate>Available since</translate>:''' Gideros 2021.1<br/> '''<translate>Class</translate>:''' Sprite<br/> === <tr...")
 
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
<languages />
+
'''Available since:''' Gideros 2021.1<br/>
'''<translate>Available since</translate>:''' Gideros 2021.1<br/>
+
'''Class:''' [[Sprite]]<br/>
'''<translate>Class</translate>:''' [[Special:MyLanguage/Sprite|Sprite]]<br/>
+
 
=== <translate>Description</translate> ===
+
=== Description ===
Sets or remove post processing effects for this sprite. <br/>
+
Sets or removes post processing effects for this sprite.
 +
<syntaxhighlight lang="lua">
 +
Sprite:setEffectStack(effectStack,mode)
 +
</syntaxhighlight>
 +
 
 +
 
 
The effect stack is an array of tables, each one describing a post processing stage. Each table can have the following fields:
 
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
+
* '''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'''
+
* '''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'''
+
* '''transform''': a [[Matrix]] to transform the input buffer before processing '''optional'''
* '''postTransform''': A [[Matrix]] to transform the final stage output before displaying '''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'''
+
* '''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<br/>
 +
'''mode''': (number) one of the Sprite.EFFECT_MODE_* constants '''optional'''<br/>
 +
 
 +
=== 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: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)
  
<source lang="lua">
+
stage:addChild(render)
Sprite:setEffectStack(effectStack,mode)
+
</syntaxhighlight>
</source>
 
=== <translate>Parameters</translate> ===
 
'''effectStack''': (table) A table describing the post processing phases to be applied<br/>
 
'''mode''': (number) One of the Sprite.EFFECT_MODE_* constants '''optional'''<br/>
 
  
 
{{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)