Views
love.graphics.setStencil
Available since LÖVE 0.8.0 |
This function is not supported in earlier versions. |
Defines or releases a stencil for the drawing operations.
The passed function draws to the stencil instead of the screen, creating an image with transparent and opaque pixels. While active, it is used to test where pixels will be drawn or discarded. Image contents do not directly affect the stencil, but see below for a workaround.
Calling the function without arguments releases the active stencil.
Function
Synopsis
Arguments
function stencilFunction
- Function that draws the stencil.
Returns
Nothing.
Function
Synopsis
Arguments
None.
Returns
Nothing.
Notes
Releases the active stencil.
Examples
Drawing circles masked by a rectangle
love.graphics.rectangle("fill", 225, 200, 350, 300)
end
love.graphics.setStencil(myStencilFunction)
love.graphics.setColor(255, 0, 0, 120)
love.graphics.circle("fill", 300, 300, 150, 50)
love.graphics.setColor(0, 255, 0, 120)
love.graphics.circle("fill", 500, 300, 150, 50)
love.graphics.setColor(0, 0, 255, 120)
love.graphics.circle("fill", 400, 400, 150, 50)
Drawing a circle with a hole
love.graphics.circle("fill", 400, 300, 50)
end
love.graphics.setInvertedStencil(myStencilFunction)
love.graphics.circle("fill", 400, 300, 150)
Drawing two masked triangles with different colors
love.graphics.circle("fill", 400, 300, 60, 25)
end
love.graphics.setStencil(myStencilFunction)
love.graphics.setColor(155, 0, 128)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)
love.graphics.setInvertedStencil(myStencilFunction)
love.graphics.setColor(144, 214, 128)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)
Using an Image as a mask
local mask = love.graphics.newImage("mymask.png")
local mask_effect = love.graphics.newPixelEffect [[
vec4 effect ( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords ) {
// a discarded fragment will fail the stencil test.
if (Texel(texture, texture_coords).rgb == vec3(0.0))
discard;
return vec4(1.0);
}
]]
myStencilFunction = function ()
love.graphics.setPixelEffect(mask_effect)
love.graphics.draw(mask, 0, 0)
love.graphics.setPixelEffect()
end
love.graphics.setStencil(myStencilFunction)
love.graphics.rectangle("fill", 0, 0, 256, 256)
See Also
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info