Available since LÖVE 0.10.0
Together with love.graphics.stencil, it has replaced love.graphics.setStencil.
Configures or disables stencil testing.
When stencil testing is enabled, the geometry of everything that is drawn afterward will be clipped / stencilled out based on a comparison between the arguments of this function and the stencil value of each pixel that the geometry touches. The stencil values of pixels are affected via love.graphics.stencil.
Each Canvas has its own per-pixel stencil values.
love.graphics.setStencilTest( comparemode, comparevalue )
CompareMode comparemode
number comparevalue
Nothing.
Disables stencil testing.
love.graphics.setStencilTest( )
None.
Nothing.
local function myStencilFunction() love.graphics.rectangle("fill", 225, 200, 350, 300) end function love.draw() -- draw a rectangle as a stencil. Each pixel touched by the rectangle will have its stencil value set to 1. The rest will be 0. love.graphics.stencil(myStencilFunction, "replace", 1) -- Only allow rendering on pixels whose stencil value is greater than 0. love.graphics.setStencilTest("greater", 0) 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) love.graphics.setStencilTest() end
local function myStencilFunction() -- Draw a small circle as a stencil. This will be the hole. love.graphics.circle("fill", 400, 300, 50) end function love.draw() -- Each pixel touched by the circle will have its stencil value set to 1. The rest will be 0. love.graphics.stencil(myStencilFunction, "replace", 1) -- Configure the stencil test to only allow rendering on pixels whose stencil value is equal to 0. -- This will end up being every pixel *except* ones that were touched by the circle drawn as a stencil. love.graphics.setStencilTest("equal", 0) love.graphics.circle("fill", 400, 300, 150) love.graphics.setStencilTest() end
local function myStencilFunction() love.graphics.circle("fill", 400, 300, 60, 25) end function love.draw() -- Each pixel touched by the circle will have its stencil value set to 1. The rest will be 0. love.graphics.stencil(myStencilFunction, "replace", 1) -- Only allow rendering on pixels whose stencil value is greater than 0. love.graphics.setStencilTest("greater", 0) love.graphics.setColor(155, 0, 128) love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350) -- Now only allow rendering on pixels whose stencil value is equal to 0. love.graphics.setStencilTest("equal", 0) love.graphics.setColor(144, 214, 128) love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350) love.graphics.setStencilTest() end
The love.graphics.stencil wiki page includes more examples.
© 2006–2016 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.graphics.setStencilTest