summaryrefslogtreecommitdiff
path: root/js/shader.js
diff options
context:
space:
mode:
authorjules <jules@okfoc.us>2014-02-02 18:58:46 -0500
committerjules <jules@okfoc.us>2014-02-02 18:58:46 -0500
commitb125e3106727e0acb627f17f4de0a1c3a1cf6f49 (patch)
tree36a2be85ac7ee402cd78fe9d53e4dc7da8d9c023 /js/shader.js
parentc1e6c0c182102e5d61a8ac26b403b42c5fd40591 (diff)
parent2c0ddba2dab715a7c81a106edcfdd9f5be0592a2 (diff)
Merge branch 'master' into pepper
Diffstat (limited to 'js/shader.js')
-rw-r--r--js/shader.js29
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