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
|