light_world.lua/lib/util.lua

61 lines
1.7 KiB
Lua
Raw Normal View History

local util = {}
2016-02-03 14:45:22 +00:00
--TODO: the whole stencil/canvas system should be reviewed since it has been changed in a naive way
function util.process(canvas, options)
2016-02-03 14:45:22 +00:00
--TODO: now you cannot draw a canvas to itself
util.drawCanvasToCanvas(canvas, canvas, options)
end
function util.drawCanvasToCanvas(canvas, other_canvas, options)
options = options or {}
util.drawto(other_canvas, 0, 0, 1, function()
if options["blendmode"] then
love.graphics.setBlendMode(options["blendmode"])
end
if options["shader"] then
love.graphics.setShader(options["shader"])
end
if options["stencil"] then
2016-02-03 14:45:22 +00:00
love.graphics.stencil(options["stencil"])
2016-02-04 16:33:22 +00:00
love.graphics.setStencilTest("greater",0)
end
if options["istencil"] then
2016-02-03 14:45:22 +00:00
love.graphics.stencil(options["istencil"])
2016-02-04 16:33:22 +00:00
love.graphics.setStencilTest("equal", 0)
end
if options["color"] then
love.graphics.setColor(unpack(options["color"]))
else
love.graphics.setColor(255,255,255)
end
2016-02-04 16:33:22 +00:00
if love.graphics.getCanvas() ~= canvas then
love.graphics.draw(canvas,0,0)
end
if options["blendmode"] then
love.graphics.setBlendMode("alpha")
end
if options["shader"] then
love.graphics.setShader()
end
2016-02-04 16:33:22 +00:00
if options["stencil"] or options["istencil"] then
2016-02-03 14:45:22 +00:00
--love.graphics.setInvertedStencil()
2016-02-04 16:33:22 +00:00
love.graphics.setStencilTest()
end
end)
end
function util.drawto(canvas, x, y, scale, cb)
local last_buffer = love.graphics.getCanvas()
love.graphics.push()
love.graphics.origin()
love.graphics.setCanvas(canvas)
love.graphics.translate(x, y)
love.graphics.scale(scale)
cb()
love.graphics.setCanvas(last_buffer)
love.graphics.pop()
end
return util