diff options
author | natrixaeria <janng@gmx.de> | 2019-06-02 12:36:14 +0200 |
---|---|---|
committer | natrixaeria <janng@gmx.de> | 2019-06-02 12:36:14 +0200 |
commit | 08cdc5c6e8310890b1e7102b1fcb68dd5f6009a9 (patch) | |
tree | 290253b0eef54384b23dbc54d05f78163cea077f | |
parent | 5ded8b3c6813268dd44afa5a782c55f8a4f5ecae (diff) |
Send OffscreenCanvas to graphics worker
-rw-r--r-- | WebInterface/wasm/webhogg/Cargo.toml | 1 | ||||
-rw-r--r-- | WebInterface/wasm/webhogg/game_logic.js | 29 | ||||
-rw-r--r-- | WebInterface/wasm/webhogg/graphics.js | 40 | ||||
-rw-r--r-- | WebInterface/wasm/webhogg/index.html | 2 | ||||
-rw-r--r-- | WebInterface/wasm/webhogg/loader.js | 5 | ||||
-rw-r--r-- | WebInterface/wasm/webhogg/src/lib.rs | 5 |
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()); |