aboutsummaryrefslogtreecommitdiff
path: root/src/shader_shim.moon
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_shim.moon')
-rw-r--r--src/shader_shim.moon22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/shader_shim.moon b/src/shader_shim.moon
new file mode 100644
index 0000000..76e0aec
--- /dev/null
+++ b/src/shader_shim.moon
@@ -0,0 +1,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