Move current love.graphics.setStencilMode functionality to setStencilState.

Add new higher level love.graphics.setStencilMode function.
- Add love.graphics.setStencilMode(mode [, value = 1])
- Add love.graphics.setStencilMode().
- Add mode, value = love.graphics.getStencilMode().

The possible modes are "off" (same as no parameters), "draw", and "test".
The "draw" mode disables color writes and sets the stencil state to ("replace", "always") using the given value.
The "test" mode enables color writes and sets the stencil state to ("keep", "equal") using the given value to compare to.
This commit is contained in:
Sasha Szpakowski
2024-01-04 16:23:49 -04:00
parent 77c5ea1d6b
commit 9b5851e039
15 changed files with 166 additions and 46 deletions
+9 -9
View File
@@ -53,7 +53,7 @@ function graphics.newVideo(file, settings)
end
function graphics.stencil(func, action, value, keepvalues)
love.markDeprecated(2, "love.graphics.stencil", "function", "replaced", "love.graphics.setStencilMode")
love.markDeprecated(2, "love.graphics.stencil", "function", "replaced", "love.graphics.setStencilMode or setStencilState")
if not keepvalues then
graphics.clear(false, true, false)
@@ -61,15 +61,15 @@ function graphics.stencil(func, action, value, keepvalues)
if value == nil then value = 1 end
local action2, mode2, value2, readmask2, writemask2 = graphics.getStencilMode()
local action2, mode2, value2, readmask2, writemask2 = graphics.getStencilState()
local mr, mg, mb, ma = graphics.getColorMask()
graphics.setStencilMode(action, "always", value)
graphics.setStencilState(action, "always", value)
graphics.setColorMask(false)
local success, err = pcall(func)
graphics.setStencilMode(action2, mode2, value2, readmask2, writemask2)
graphics.setStencilState(action2, mode2, value2, readmask2, writemask2)
graphics.setColorMask(mr, mg, mb, ma)
if not success then
@@ -78,19 +78,19 @@ function graphics.stencil(func, action, value, keepvalues)
end
function graphics.setStencilTest(mode, value)
love.markDeprecated(2, "love.graphics.setStencilTest", "function", "replaced", "love.graphics.setStencilMode")
love.markDeprecated(2, "love.graphics.setStencilTest", "function", "replaced", "love.graphics.setStencilMode or setStencilState")
if mode ~= nil then
graphics.setStencilMode("keep", mode, value)
graphics.setStencilState("keep", mode, value)
else
graphics.setStencilMode()
graphics.setStencilState()
end
end
function graphics.getStencilTest()
love.markDeprecated(2, "love.graphics.getStencilTest", "function", "replaced", "love.graphics.getStencilMode")
love.markDeprecated(2, "love.graphics.getStencilTest", "function", "replaced", "love.graphics.getStencilMode or getStencilState")
local action, mode, value = graphics.getStencilMode()
local action, mode, value = graphics.getStencilState()
return mode, value
end