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

shaders = setmetatable({},{
	__index:(self, 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))
		am.use_program(am.program(vert_subbed, frag_subbed))
})
shaders