asciiblaster- draw irc art in your web browser |
git clone git://git.acid.vegas/asciiblaster.git |
Log | Files | Refs | Archive | README |
shader.js (1444B)
1 var shader = (function(){ 2 var fn_str, fn, lex 3 var exports = {} 4 var animating = false 5 6 exports.init = function(){ 7 lex = new Lex (0, 0) 8 exports.build(demo_shader.innerHTML) 9 } 10 exports.build = function (fn_str){ 11 try { 12 new_fn = new Function('lex', 'x', 'y', 'w', 'h', 't', fn_str) 13 new_fn(lex, 0, 0, 1, 1, 0) 14 } 15 catch (e) { 16 throw 'Shader execution error' 17 } 18 exports.fn = fn = new_fn 19 return fn 20 } 21 exports.run = function(canvas){ 22 var t = +new Date 23 shader.canvas = shader.canvas || canvas 24 var w = shader.canvas.w, h = shader.canvas.h 25 shader.canvas.forEach(function(lex, x, y){ 26 fn(lex, x, y, w, h, t) 27 lex.build() 28 }) 29 } 30 exports.toggle = function(state){ 31 animating = typeof state == "boolean" ? state : ! animating 32 shader_fps_el.classList.toggle('hidden') 33 return animating 34 } 35 exports.pause = function(){ 36 animating = false 37 shader_fps_el.classList.add('hidden') 38 shader.fps_time = 0 39 } 40 exports.play = function(){ 41 animating = true 42 shader_fps_el.classList.remove('hidden') 43 } 44 exports.animate = function (t){ 45 requestAnimationFrame(exports.animate) 46 if (! animating) { return } 47 if (shader.fps_time){ 48 var ms = Date.now() - shader.fps_time 49 fps = 1000 / ms 50 shader_fps_el.innerHTML = (fps | 0) + ' fps' 51 } 52 shader.fps_time = Date.now() 53 exports.run(canvas) 54 } 55 56 return exports 57 58 })()