var shader_build = function(){ var fn_str = document.getElementById('shader').value if (!fn_str.length) fn_str = "" 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