summaryrefslogtreecommitdiff
path: root/src/shader_shim.moon
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_shim.moon')
-rw-r--r--src/shader_shim.moon24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/shader_shim.moon b/src/shader_shim.moon
index 76e0aec..77ad5a2 100644
--- a/src/shader_shim.moon
+++ b/src/shader_shim.moon
@@ -6,17 +6,21 @@ inputs = {
"@height": win.height
}
+verts, frags = {}, {}
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))
+ 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