summaryrefslogtreecommitdiff
path: root/js/shader.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/shader.js')
-rw-r--r--js/shader.js71
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