summaryrefslogtreecommitdiff
path: root/shader-picker.html
diff options
context:
space:
mode:
authorjules <jules@okfoc.us>2014-01-01 11:38:55 -0500
committerjules <jules@okfoc.us>2014-01-01 11:38:55 -0500
commita692d06b8fad45ff8b77749b8d6d955ac8b20f81 (patch)
treebcc05680888ed708fd51a1282ebe8f21ffab52a9 /shader-picker.html
parent95e72fbdf718a04aa567c706fba11a8e7688bce9 (diff)
try/except bizniss results in big speedup
Diffstat (limited to 'shader-picker.html')
-rw-r--r--shader-picker.html50
1 files changed, 35 insertions, 15 deletions
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) {