diff options
Diffstat (limited to 'src/shader_shim.moon')
| -rw-r--r-- | src/shader_shim.moon | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/shader_shim.moon b/src/shader_shim.moon new file mode 100644 index 0000000..05e11c1 --- /dev/null +++ b/src/shader_shim.moon @@ -0,0 +1,20 @@ +-- 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 = assert(am.load_string("shaders/" .. key .. ".vert")) + frag = assert(am.load_string("shaders/" .. key .. ".frag")) + 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 |
