Programming environment for editing various of my live apps without restarting them.
snapshot_canvas = function(global_viewport, globalw, globalh)
	-- Render the canvas at pixel perfect resolution.
	Saved_screen = {w=App.screen.width, h=App.screen.height}
	App.screen.width, App.screen.height = globalw, globalh
	local saved_viewport = Viewport
	Viewport = copy_viewport(global_viewport)
	Viewport.zoom = 1.0
	A()
	-- Things go very bad if the canvas gets too large.
	-- Even though it's in memory, LÖVE seems to use memory in the graphics card to write graphics to it.
	-- If the canvas is too big to fit in graphics card memory, you get an unrecoverable error.
	-- So I try to keep it from getting too large. But with a hard-coded constant because
	-- I don't know how to measure how much graphics memory a computer has.
	-- It might not protect older computers.
	-- This is the place to experiment with if you run into an error about SDL limits and contacting Kartik.
	Disallow_error_recovery_on_key_release = true
	local w = math.min(16000, App.screen.width)
	local h = math.min(16000, App.screen.height)
	print('creating canvas', w, h)
	local canvas = love.graphics.newCanvas(w, h)
	love.graphics.setCanvas(canvas)
	on.draw()
	love.graphics.setCanvas()
	Disallow_error_recovery_on_key_release = nil
	Viewport = saved_viewport
	App.screen.width,App.screen.height = Saved_screen.w, Saved_screen.h
	Saved_screen = nil
	return canvas
end