76 lines
1.7 KiB
Lua
76 lines
1.7 KiB
Lua
local love = love
|
|
local gpu = require( "gpu" )
|
|
local t = {}
|
|
|
|
local canvas
|
|
local shaders = {
|
|
matte = require( "shaders.matte" ),
|
|
}
|
|
|
|
local meshes = {}
|
|
local drawLists = {}
|
|
local isDebugging = false
|
|
local tf = love.math.newTransform()
|
|
local debugTF = love.math.newTransform()
|
|
|
|
for k in pairs( shaders ) do drawLists[k] = {} end
|
|
|
|
function t.start()
|
|
canvas = {
|
|
love.graphics.newCanvas(),
|
|
stencil = false,
|
|
depth = true,
|
|
}
|
|
end
|
|
|
|
function t.debug()
|
|
isDebugging = true
|
|
end
|
|
|
|
function t.draw( view, proj )
|
|
|
|
if isDebugging then
|
|
end
|
|
|
|
love.graphics.setScissor( 0, 0, love.graphics.getDimensions() )
|
|
love.graphics.setColor( 1, 1, 1, 1 )
|
|
love.graphics.push( "all" )
|
|
love.graphics.setCanvas( canvas )
|
|
love.graphics.clear()
|
|
love.graphics.setDepthMode( "less", true )
|
|
|
|
for name, shader in pairs( shaders ) do
|
|
love.graphics.setShader( shader )
|
|
shader:send( "view", "column", view )
|
|
shader:send( "proj", "column", proj )
|
|
|
|
for mesh in pairs( drawLists[ name ] ) do
|
|
local modelMatrix = meshes[ mesh ]
|
|
tf:setMatrix( "column", modelMatrix )
|
|
love.graphics.draw( mesh )
|
|
end
|
|
end
|
|
|
|
love.graphics.setCanvas()
|
|
love.graphics.setDepthMode( "always", false )
|
|
love.graphics.setShader()
|
|
love.graphics.draw( canvas[1] )
|
|
love.graphics.pop()
|
|
|
|
if isDebugging then
|
|
isDebugging = false
|
|
io.flush()
|
|
end
|
|
end
|
|
|
|
function t.update( mesh, modelMatrix )
|
|
meshes[mesh] = modelMatrix
|
|
end
|
|
|
|
function t.add( mesh, shaderName )
|
|
shaderName = shaderName or "matte"
|
|
meshes[mesh] = { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, {0, 0, 1, 0}, {0, 0, 0, 1} }
|
|
drawLists[shaderName][mesh] = true
|
|
end
|
|
|
|
return t |