diff options
| author | jules <jules@okfoc.us> | 2014-02-02 18:58:46 -0500 |
|---|---|---|
| committer | jules <jules@okfoc.us> | 2014-02-02 18:58:46 -0500 |
| commit | b125e3106727e0acb627f17f4de0a1c3a1cf6f49 (patch) | |
| tree | 36a2be85ac7ee402cd78fe9d53e4dc7da8d9c023 /js/shader.js | |
| parent | c1e6c0c182102e5d61a8ac26b403b42c5fd40591 (diff) | |
| parent | 2c0ddba2dab715a7c81a106edcfdd9f5be0592a2 (diff) | |
Merge branch 'master' into pepper
Diffstat (limited to 'js/shader.js')
| -rw-r--r-- | js/shader.js | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/js/shader.js b/js/shader.js index 19c049b..a8559ba 100644 --- a/js/shader.js +++ b/js/shader.js @@ -1,3 +1,5 @@ +function shader (x,y,t,d) {} + var shader_build = function(){ var fn_str = document.getElementById('shader').value if (!fn_str.length) fn_str = "" @@ -6,12 +8,17 @@ var shader_build = function(){ 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; - +var w, h, actual_w, actual_h; function shade_no_error_handling(frame, t){ if (! t || isNaN(t)) throw Error ("No time specified") if (! frame) throw Error ("No frame specified") @@ -36,9 +43,12 @@ function shade_no_error_handling(frame, t){ cc.putImageData(imgData,0,0) } +var chrome_stack_regexp = /<anonymous>:([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") + if (! frame || ! frame.ctx || ! frame.cloneData) throw Error ("No frame specified") var imgData = frame.ctx.getImageData(0,0,w,h) var data = imgData.data @@ -61,11 +71,24 @@ function shade_error_handling(frame, t){ } } 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 && 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 +shade = shade_error_handling
\ No newline at end of file |
