summaryrefslogtreecommitdiff
path: root/webhogg/wasm/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'webhogg/wasm/pkg')
-rw-r--r--webhogg/wasm/pkg/main.js38
-rw-r--r--webhogg/wasm/pkg/worker-graphics.js1
-rw-r--r--webhogg/wasm/pkg/worker.js17
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);
+ }
+
+ });
+}