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) { try { acorn.parse(fn_str) } catch(e){ //e.loc = {column: 0, line: 1} line is 1-based error_highlight.on(e.loc.line-1) } 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) } var chrome_stack_regexp = /:([0-9]+)/; var firefox_stack_regexp = /:([0-9]+)$/; 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){ var lines = (e.stack + "").split('\n') if (lines[0].substr(0,10) === "anonymous@") { // firefox var matches = lines[0].match(firefox_stack_regexp) if (matches.length > 1) error_highlight.on(parseInt(matches[1]) - 5) } else if (lines.length > 1) { // attempt chrome match var matches = lines[1].match(chrome_stack_regexp) if (matches.length > 1) error_highlight.on(parseInt(matches[1]) - 3) } // console.log(e.stack) throw Error ("Shader execution error") } cc.putImageData(imgData,0,0) shade = shade_no_error_handling error_highlight.off() } shade = shade_error_handling