diff options
| author | jules <jules@okfoc.us> | 2014-01-05 18:27:03 -0500 |
|---|---|---|
| committer | jules <jules@okfoc.us> | 2014-01-05 18:27:03 -0500 |
| commit | 235eb11d772fde9589c425ae13656874e76ed351 (patch) | |
| tree | 19802fe3ed5d2d88fe6d5387dd66843c9f23c82e | |
| parent | 032f3ed9f24bc5eabe8ab26088b0ac0caff19b24 (diff) | |
split shader.js, add frame methods
| -rw-r--r-- | js/shader.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/js/shader.js b/js/shader.js new file mode 100644 index 0000000..2f5fda1 --- /dev/null +++ b/js/shader.js @@ -0,0 +1,71 @@ +var shader_build = function(){ + var fn_str = document.getElementById('shader').value + if (!fn_str.length) return + try { + var fn = new Function('x','y','t','d', fn_str) + shader = fn + shade = shade_error_handling + } catch (e) { + throw Error ("Shader compilation error") + } +} + +var r,g,b,a; + +function shade_no_error_handling(frame, t){ + if (! t || isNaN(t)) throw Error ("No time specified") + if (! frame) throw Error ("No frame specified") + + var imgData = frame.ctx.getImageData(0,0,w,h) + var data = imgData.data + var clone = frame.cloneData.data + var realw = w, realh = h, v, index + + for (var x = 0; x < w; x++) { + for (var y = 0; y < h; y++) { + q = 4*(y*w+x) + r = data[q], g = data[q+1], b = data[q+2], a = data[q+3] + result = shader(x,y,t,clone) + data[q] = r + data[q+1] = g + data[q+2] = b + data[q+3] = a + w = realw, h = realh + } + } + cc.putImageData(imgData,0,0) +} + +function shade_error_handling(frame, t){ + if (! t || isNaN(t)) throw Error ("No time specified") + if (! frame) throw Error ("No frame specified") + + var imgData = frame.ctx.getImageData(0,0,w,h) + var data = imgData.data + var clone = frame.cloneData.data + + try { + var realw = w, realh = h, v, index + + for (var x = 0; x < w; x++) { + for (var y = 0; y < h; y++) { + q = 4*(y*w+x) + r = data[q], g = data[q+1], b = data[q+2], a = data[q+3] + result = shader(x,y,t,clone) + data[q] = r + data[q+1] = g + data[q+2] = b + data[q+3] = a + w = realw, h = realh + } + } + } + catch(e){ + // console.log(e.stack) + throw Error ("Shader execution error") + } + cc.putImageData(imgData,0,0) + shade = shade_no_error_handling +} + +shade = shade_error_handling |
