var shader = (function(){ var fn_str, fn, lex var exports = {} var animating = false exports.init = function(){ lex = new Lex (0, 0) exports.build(demo_shader.innerHTML) } exports.build = function (fn_str){ try { new_fn = new Function('lex', 'x', 'y', 'w', 'h', 't', fn_str) new_fn(lex, 0, 0, 1, 1, 0) } catch (e) { throw 'Shader execution error' } exports.fn = fn = new_fn return fn } exports.run = function(canvas){ var t = +new Date var shader_canvas = selection.hidden ? canvas : selection.canvas; var w = shader_canvas.w, h = shader_canvas.h shader_canvas.forEach(function(lex, x, y){ fn(lex, x, y, w, h, t) lex.build() }) } exports.toggle = function(state){ animating = typeof state == "boolean" ? state : ! animating return animating } exports.pause = function(){ animating = false } exports.play = function(){ animating = true } exports.animate = function (t){ requestAnimationFrame(exports.animate) if (! animating) { return } exports.run(canvas) } return exports })()