summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornatrixaeria <janng@gmx.de>2019-06-02 12:36:14 +0200
committernatrixaeria <janng@gmx.de>2019-06-02 12:36:14 +0200
commit08cdc5c6e8310890b1e7102b1fcb68dd5f6009a9 (patch)
tree290253b0eef54384b23dbc54d05f78163cea077f
parent5ded8b3c6813268dd44afa5a782c55f8a4f5ecae (diff)
Send OffscreenCanvas to graphics worker
-rw-r--r--WebInterface/wasm/webhogg/Cargo.toml1
-rw-r--r--WebInterface/wasm/webhogg/game_logic.js29
-rw-r--r--WebInterface/wasm/webhogg/graphics.js40
-rw-r--r--WebInterface/wasm/webhogg/index.html2
-rw-r--r--WebInterface/wasm/webhogg/loader.js5
-rw-r--r--WebInterface/wasm/webhogg/src/lib.rs5
6 files changed, 53 insertions, 29 deletions
diff --git a/WebInterface/wasm/webhogg/Cargo.toml b/WebInterface/wasm/webhogg/Cargo.toml
index 60cee51..9d6e2ac 100644
--- a/WebInterface/wasm/webhogg/Cargo.toml
+++ b/WebInterface/wasm/webhogg/Cargo.toml
@@ -26,6 +26,7 @@ features = [
'HtmlCanvasElement',
'WorkerGlobalScope',
'DedicatedWorkerGlobalScope',
+ 'OffscreenCanvas',
'WebGl2RenderingContext',
'WebGlShader',
'WebGlProgram',
diff --git a/WebInterface/wasm/webhogg/game_logic.js b/WebInterface/wasm/webhogg/game_logic.js
index 842c3c8..d023228 100644
--- a/WebInterface/wasm/webhogg/game_logic.js
+++ b/WebInterface/wasm/webhogg/game_logic.js
@@ -28,10 +28,11 @@ __exports.game_logic_entry = game_logic_entry
/**
* @param {any} worker
+* @param {any} canvas
* @returns {void}
*/
-function graphics_entry(worker) {
- return wasm.graphics_entry(addHeapObject(worker));
+function graphics_entry(worker, canvas) {
+ return wasm.graphics_entry(addHeapObject(worker), addHeapObject(canvas));
}
__exports.graphics_entry = graphics_entry
@@ -359,9 +360,9 @@ function __wbindgen_throw(ptr, len) {
}
__exports.__wbindgen_throw = __wbindgen_throw
-function __wbindgen_closure_wrapper61(a, b, _ignored) {
- const f = wasm.__wbg_function_table.get(22);
- const d = wasm.__wbg_function_table.get(23);
+function __wbindgen_closure_wrapper59(a, b, _ignored) {
+ const f = wasm.__wbg_function_table.get(25);
+ const d = wasm.__wbg_function_table.get(26);
const cb = function(arg0) {
this.cnt++;
let a = this.a;
@@ -382,7 +383,7 @@ function __wbindgen_closure_wrapper61(a, b, _ignored) {
real.original = cb;
return addHeapObject(real);
}
-__exports.__wbindgen_closure_wrapper61 = __wbindgen_closure_wrapper61
+__exports.__wbindgen_closure_wrapper59 = __wbindgen_closure_wrapper59
function __wbindgen_object_clone_ref(idx) {
return addHeapObject(getObject(idx));
@@ -397,11 +398,15 @@ const WASM_URL = './pkg/webhogg_bg.wasm';
const imports = { './webhogg': __exports };
-let graphics = new Worker('./graphics.js', {type: 'module', credentials: 'include'});
+onmessage = function (e) {
+ console.log('transport canvas');
-let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
+ let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
-res.then(result => {
- wasm = result.instance.exports;
- game_logic_entry(graphics);
-});
+ res.then(result => {
+ wasm = result.instance.exports;
+ game_logic_entry(graphics);
+ });
+ let graphics = new Worker('./graphics.js', {type: 'module', credentials: 'include'});
+ graphics.postMessage(e.data, [e.data.canvas]);
+}
diff --git a/WebInterface/wasm/webhogg/graphics.js b/WebInterface/wasm/webhogg/graphics.js
index 3ec753b..5f817fd 100644
--- a/WebInterface/wasm/webhogg/graphics.js
+++ b/WebInterface/wasm/webhogg/graphics.js
@@ -28,10 +28,11 @@ __exports.game_logic_entry = game_logic_entry
/**
* @param {any} worker
+* @param {any} canvas
* @returns {void}
*/
-function graphics_entry(worker) {
- return wasm.graphics_entry(addHeapObject(worker));
+function graphics_entry(worker, canvas) {
+ return wasm.graphics_entry(addHeapObject(worker), addHeapObject(canvas));
}
__exports.graphics_entry = graphics_entry
@@ -359,9 +360,9 @@ function __wbindgen_throw(ptr, len) {
}
__exports.__wbindgen_throw = __wbindgen_throw
-function __wbindgen_closure_wrapper61(a, b, _ignored) {
- const f = wasm.__wbg_function_table.get(22);
- const d = wasm.__wbg_function_table.get(23);
+function __wbindgen_closure_wrapper59(a, b, _ignored) {
+ const f = wasm.__wbg_function_table.get(25);
+ const d = wasm.__wbg_function_table.get(26);
const cb = function(arg0) {
this.cnt++;
let a = this.a;
@@ -382,7 +383,7 @@ function __wbindgen_closure_wrapper61(a, b, _ignored) {
real.original = cb;
return addHeapObject(real);
}
-__exports.__wbindgen_closure_wrapper61 = __wbindgen_closure_wrapper61
+__exports.__wbindgen_closure_wrapper59 = __wbindgen_closure_wrapper59
function __wbindgen_object_clone_ref(idx) {
return addHeapObject(getObject(idx));
@@ -396,13 +397,24 @@ __exports.__wbindgen_object_drop_ref = __wbindgen_object_drop_ref
const WASM_URL = './pkg/webhogg_bg.wasm';
const imports = { './webhogg': __exports };
-let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
-res.then(result => {
- wasm = result.instance.exports;
- graphics_entry(self);
-});
+let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
-/*onmessage = function (e) {
- console.log('gooot messaaage', e.data);
-}*/
+let first = true;
+let msg = null;
+onmessage = function (e) {
+ if (first) {
+ first = false;
+ console.log('got context: ', e.data);
+ msg = e.data;
+ }
+}
+while (msg === null) {
+ console.log('yay');
+ res.then(result => {
+ wasm = result.instance.exports;
+ console.log('context sndng: ', msg);
+ graphics_entry(self, msg);
+ });
+ break;
+}
diff --git a/WebInterface/wasm/webhogg/index.html b/WebInterface/wasm/webhogg/index.html
index ced7e94..ad951a6 100644
--- a/WebInterface/wasm/webhogg/index.html
+++ b/WebInterface/wasm/webhogg/index.html
@@ -3,7 +3,6 @@
<head>
<meta charset="UTF-8">
<title>webhogg</title>
- <script src='loader.js'></script>
<style>
body {
margin: 0;
@@ -21,4 +20,5 @@
<body>
<canvas id='canvas'></canvas>
</body>
+ <script src='loader.js'></script>
</html>
diff --git a/WebInterface/wasm/webhogg/loader.js b/WebInterface/wasm/webhogg/loader.js
index e1ad8f9..51c4354 100644
--- a/WebInterface/wasm/webhogg/loader.js
+++ b/WebInterface/wasm/webhogg/loader.js
@@ -1,4 +1,9 @@
+let canvas = document.getElementById('canvas');
+
let game_logic = new Worker(
'./game_logic.js',
{type: 'module', credentials: 'include'}
);
+
+let ofc = canvas.transferControlToOffscreen();
+game_logic.postMessage({canvas: ofc}, [ofc]);
diff --git a/WebInterface/wasm/webhogg/src/lib.rs b/WebInterface/wasm/webhogg/src/lib.rs
index 05944a6..2ee7267 100644
--- a/WebInterface/wasm/webhogg/src/lib.rs
+++ b/WebInterface/wasm/webhogg/src/lib.rs
@@ -30,10 +30,11 @@ pub fn game_logic_entry(worker: web_sys::Worker) {
}
#[wasm_bindgen]
-pub fn graphics_entry(worker: web_sys::DedicatedWorkerGlobalScope) {
+pub fn graphics_entry(worker: web_sys::DedicatedWorkerGlobalScope,
+ canvas: web_sys::OffscreenCanvas) {
client_logger::init_logger();
- info!("hello from graphics wasm");
+ info!("hello from graphics wasm {:?}", canvas);
let handler = wasm_bindgen::closure::Closure::once_into_js(
(|e: web_sys::MessageEvent| {
info!("things are getting wired: {:?}", e.data());