summaryrefslogtreecommitdiff
path: root/webhogg/wasm/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'webhogg/wasm/pkg')
-rw-r--r--webhogg/wasm/pkg/main.js22
-rw-r--r--webhogg/wasm/pkg/worker.js12
2 files changed, 26 insertions, 8 deletions
diff --git a/webhogg/wasm/pkg/main.js b/webhogg/wasm/pkg/main.js
index ce96ee5..f16a775 100644
--- a/webhogg/wasm/pkg/main.js
+++ b/webhogg/wasm/pkg/main.js
@@ -1,12 +1,28 @@
+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;
source = await fetchedSource.arrayBuffer();
- let workers = [];
- for (var type of ['graphics', 'logic']) {
+ const modules = [
+ ['graphics', source, [offCanvas], 100],
+ ['logic', source, [], 1000]
+ ];
+ for (var module of modules) {
let worker = new Worker('pkg/worker.js');
- worker.postMessage([type, source]);
+ worker.postMessage(module, module[2]);
workers.push(worker);
}
}
diff --git a/webhogg/wasm/pkg/worker.js b/webhogg/wasm/pkg/worker.js
index bd11676..0b68374 100644
--- a/webhogg/wasm/pkg/worker.js
+++ b/webhogg/wasm/pkg/worker.js
@@ -1,9 +1,11 @@
onmessage = async function (e) {
importScripts('../bin/webhogg-wasm.js');
- let ctx = await wasm_bindgen(e.data[1]);
+ let type = e.data[0];
+ let source = e.data[1];
+ let args = e.data[2];
+ let dt = e.data[3];
+ let ctx = await wasm_bindgen(source);
- if (e.data[0] === 'graphics')
- ctx.start_graphics();
- else if (e.data[0] === 'logic')
- ctx.start_logic();
+ ctx['start_' + type].apply(args);
+ setInterval(ctx['loop_' + type], dt);
}