aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-09-08 17:06:59 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-09-08 17:06:59 -0700
commit82a80c6724f7a8f17daf0ee7a01f124a9ab193ec (patch)
tree231db84039a946ebdba764bbc914547dfc2042e2
parent4b23f881076704b5279657d43f4f599a15de9750 (diff)
proxy canvas writes
-rw-r--r--src/proxyClient.js19
-rw-r--r--src/proxyWorker.js8
-rw-r--r--tests/sdl_canvas_proxy.c3
3 files changed, 24 insertions, 6 deletions
diff --git a/src/proxyClient.js b/src/proxyClient.js
index e3e2dfea..f102ed86 100644
--- a/src/proxyClient.js
+++ b/src/proxyClient.js
@@ -1,6 +1,8 @@
// proxy to/from worker
+Module.ctx = Module.canvas.getContext('2d');
+
var worker = new Worker('{{{ filename }}}.js');
worker.onmessage = function(event) {
@@ -10,6 +12,23 @@ worker.onmessage = function(event) {
window[data.method]();
break;
}
+ case 'canvas': {
+ switch (data.op) {
+ case 'resize': {
+ Module.canvas.width = data.width;
+ Module.canvas.height = data.height;
+ Module.canvasData = Module.ctx.getImageData(0, 0, data.width, data.height);
+ break;
+ }
+ case 'render': {
+ Module.canvasData.data.set(data.image.data);
+ Module.ctx.putImageData(Module.canvasData, 0, 0);
+ break;
+ }
+ default: throw 'eh?';
+ }
+ break;
+ }
default: throw 'what?';
}
};
diff --git a/src/proxyWorker.js b/src/proxyWorker.js
index e69882a9..b9f71614 100644
--- a/src/proxyWorker.js
+++ b/src/proxyWorker.js
@@ -25,8 +25,9 @@ document.createElement = function(what) {
canvas.data = {
width: canvas.width,
height: canvas.height,
- buffer: new Uint8Array(canvas.width*canvas.height*4)
+ data: new Uint8Array(canvas.width*canvas.height*4)
};
+ postMessage({ target: 'canvas', op: 'resize', width: canvas.width, height: canvas.height });
}
};
canvas.getContext = function(type) {
@@ -38,13 +39,14 @@ document.createElement = function(what) {
return {
width: canvas.data.width,
height: canvas.data.height,
- data: new Uint8Array(canvas.data.buffer) // TODO: can we avoid this copy?
+ data: new Uint8Array(canvas.data.data) // TODO: can we avoid this copy?
};
},
putImageData: function(image, x, y) {
canvas.ensureData();
assert(x == 0 && y == 0 && image.width == canvas.width && image.height == canvas.height);
- canvas.data.buffer.set(image.data); // TODO: can we avoid this copy?
+ canvas.data.data.set(image.data); // TODO: can we avoid this copy?
+ postMessage({ target: 'canvas', op: 'render', image: canvas.data });
}
};
};
diff --git a/tests/sdl_canvas_proxy.c b/tests/sdl_canvas_proxy.c
index a9e9179b..ae0a8f23 100644
--- a/tests/sdl_canvas_proxy.c
+++ b/tests/sdl_canvas_proxy.c
@@ -19,9 +19,6 @@ int main(int argc, char **argv) {
printf("done.\n");
- int result = 1;
- REPORT_RESULT();
-
return 0;
}