summaryrefslogtreecommitdiff
path: root/src/shader_shim.moon
blob: 77ad5a2a181f690a0252d2528ff283621ff841d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- Sometimes we want to compile shaders, use the syntax
-- {variable} to adress a variable
win = require("window")
inputs = {
	"@width": win.width
	"@height": win.height
}

verts, frags = {}, {}
shaders = setmetatable({},{
	__index:(self, key) ->
		if not (verts[key] and frags[key])
			vert_name = "shaders/" .. key .. ".vert"
			frag_name = "shaders/" .. key .. ".frag"
			vert = assert(am.load_string(vert_name), "Failed to find " .. vert_name)
			frag = assert(am.load_string(frag_name), "Failed to find " .. frag_name)
			vert_subbed = vert\gsub("@%b{}",(n) -> tostring(inputs[n]))
			frag_subbed = frag\gsub("@%b{}",(n) -> tostring(inputs[n]))
			succ, program = pcall(am.program, vert_subbed, frag_subbed)
			if not succ
				error(string.format("Failed compiling shader %q: %s vertex shader: %s fragment shader: %s", key, program, vert_subbed, frag_subbed))
			verts[key] = vert_subbed
			frags[key] = frag_subbed
		am.use_program(am.program(verts[key], frags[key]))
})
shaders