diff options
Diffstat (limited to 'webhogg/wasm/pkg')
-rw-r--r-- | webhogg/wasm/pkg/main.js | 38 | ||||
-rw-r--r-- | webhogg/wasm/pkg/worker-graphics.js | 1 | ||||
-rw-r--r-- | webhogg/wasm/pkg/worker.js | 17 |
3 files changed, 51 insertions, 5 deletions
diff --git a/webhogg/wasm/pkg/main.js b/webhogg/wasm/pkg/main.js index eec740d..90b3956 100644 --- a/webhogg/wasm/pkg/main.js +++ b/webhogg/wasm/pkg/main.js @@ -1,9 +1,39 @@ +workers = []; + +function exit() { + for (var worker of workers) { + worker.terminate(); + } + console.clear(); +} + async function main() { let fetchingSource = fetch('bin/webhogg-wasm.wasm'); + + let canvasElement = document.getElementById('c'); + let offCanvas = canvasElement.transferControlToOffscreen(); + let fetchedSource = await fetchingSource; - let source = await fetchedSource.text(); - //alert(source) - let workerGraphics = new Worker('pkg/worker-graphics.js'); -} + source = await fetchedSource.arrayBuffer(); + const modules = [ + { type: 'graphics', + source: source, + canvas: offCanvas, + dt: 16 }, + { type: 'logic', + source: source, + canvas: [], + dt: 10000 }, + ]; + for (var module of modules) { + let worker = new Worker('pkg/worker.js'); + if (module.type === 'graphics') { + worker.postMessage(module, [module.canvas]); + } else { + worker.postMessage(module); + } + workers.push(worker); + } +} main(); diff --git a/webhogg/wasm/pkg/worker-graphics.js b/webhogg/wasm/pkg/worker-graphics.js deleted file mode 100644 index 8360014..0000000 --- a/webhogg/wasm/pkg/worker-graphics.js +++ /dev/null @@ -1 +0,0 @@ -console.log('lelel'); diff --git a/webhogg/wasm/pkg/worker.js b/webhogg/wasm/pkg/worker.js new file mode 100644 index 0000000..780ea6f --- /dev/null +++ b/webhogg/wasm/pkg/worker.js @@ -0,0 +1,17 @@ +let data = null; + +onmessage = function (e) { + data = e.data; + + importScripts('../bin/webhogg-wasm.js'); + wasm_bindgen(data.source).then(ctx => { + if (data.type === 'graphics') { + wasm_bindgen.start_graphics(data.canvas); + setInterval(wasm_bindgen.loop_graphics, data.dt); + } else if (data.type === 'logic') { + wasm_bindgen.start_logic(); + setInterval(wasm_bindgen.loop_logic, data.dt); + } + + }); +} |