diff options
-rw-r--r-- | src/proxyClient.js | 19 | ||||
-rw-r--r-- | src/proxyWorker.js | 8 | ||||
-rw-r--r-- | tests/sdl_canvas_proxy.c | 3 |
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; } |