It’s probably because he’s drawing inside a loop. Wouldn’t it be better to draw to the screen just once, outside the loop? ( Hard to say without actually doing it or knowing how he handles.)
Something like this:
render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color, [render.BUFFER_DEPTH_BIT] = 1, [render.BUFFER_STENCIL_BIT] = 0})
...
-- Draw cameras to render target
for k,v in pairs(self.cam) do
render.set_viewport(v.vp.x, v.vp.y, v.vp.z, v.vp.w)
-- draw to render target
render.set_render_target(self.render_target_world)
render.set_view(cam.get(k))
render.set_projection(vmath.matrix4_orthographic(0, v.proj.x, 0, v.proj.y, -1, 1))
set_default_renderer_state()
render.draw(self.tile_pred)
end
-- if it is a single quad ->
render.set_viewport(math.ceil(sx), math.ceil(sy), math.ceil(w), math.ceil(h))
render.set_view(IDENTITY_MATRIX)
render.set_projection(IDENTITY_MATRIX)
-- lighting pass
render.set_render_target(self.render_target_lights)
clear_with_color(ambient_color)
set_default_renderer_state()
render.draw(self.light_pred)
-- draw to screen
render.set_render_target(render.RENDER_TARGET_DEFAULT)
set_default_renderer_state()
render.enable_material(hash("lighting_quad"))
render.enable_texture(0, self.render_target_world, render.BUFFER_COLOR0_BIT)
render.enable_texture(1, self.render_target_lights, render.BUFFER_COLOR0_BIT)
render.draw(self.quad_pred)
render.disable_texture(0)
render.disable_texture(1)
render.disable_material()