From a692d06b8fad45ff8b77749b8d6d955ac8b20f81 Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 1 Jan 2014 11:38:55 -0500 Subject: try/except bizniss results in big speedup --- shader-picker.html | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) (limited to 'shader-picker.html') diff --git a/shader-picker.html b/shader-picker.html index 42d2ca8..177bc76 100644 --- a/shader-picker.html +++ b/shader-picker.html @@ -270,14 +270,13 @@ function ready(){ } } -var shader = function(){} - 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") } @@ -285,32 +284,50 @@ var shader_build = function(){ var r,g,b,a; -function shade(frame, t){ +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 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 u32 = new Uint32Array(imgData.data.buffer); +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++) { - index = (y*w+x) - a = u32[index] >> 24 & 0xff - b = u32[index] >> 16 & 0xff - g = u32[index] >> 8 & 0xff; - r = u32[index] & 0xff + 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) - u32[index] = - (a << 24) | - (b << 16) | - (g << 8) | - r; + data[q] = r + data[q+1] = g + data[q+2] = b + data[q+3] = a w = realw, h = realh } } @@ -320,8 +337,11 @@ function shade(frame, t){ throw Error ("Shader execution error") } cc.putImageData(imgData,0,0) + shade = shade_no_error_handling } +shade = shade_error_handling + function add_frame(){ var frame_count = $("#framecount").int() if (frame_count < 2) { -- cgit v1.2.3-70-g09d2