From 5ded8b3c6813268dd44afa5a782c55f8a4f5ecae Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Sun, 2 Jun 2019 08:52:36 +0200 Subject: Add communicating between worker wasms --- WebInterface/wasm/webhogg/Cargo.toml | 5 + WebInterface/wasm/webhogg/game_logic.js | 407 ++++++++++++++++++++++ WebInterface/wasm/webhogg/graphics.js | 204 +++++++++-- WebInterface/wasm/webhogg/loader.js | 280 +-------------- WebInterface/wasm/webhogg/src/client_logger.rs | 3 +- WebInterface/wasm/webhogg/src/lib.rs | 22 +- WebInterface/wasm/webhogg/target/.rustc_info.json | 2 +- WebInterface/wasm/webhogg/update.py | 4 +- 8 files changed, 605 insertions(+), 322 deletions(-) create mode 100644 WebInterface/wasm/webhogg/game_logic.js diff --git a/WebInterface/wasm/webhogg/Cargo.toml b/WebInterface/wasm/webhogg/Cargo.toml index a2e5f8e..60cee51 100644 --- a/WebInterface/wasm/webhogg/Cargo.toml +++ b/WebInterface/wasm/webhogg/Cargo.toml @@ -11,6 +11,7 @@ edition = "2018" crate-type = ["cdylib"] [dependencies] +js-sys = "0.3" wasm-bindgen = "0.2" log = "0.4" fern = "0.5" @@ -19,8 +20,12 @@ fern = "0.5" version = "0.3.22" features = [ 'Document', + 'Event', + 'MessageEvent', 'Element', 'HtmlCanvasElement', + 'WorkerGlobalScope', + 'DedicatedWorkerGlobalScope', 'WebGl2RenderingContext', 'WebGlShader', 'WebGlProgram', diff --git a/WebInterface/wasm/webhogg/game_logic.js b/WebInterface/wasm/webhogg/game_logic.js new file mode 100644 index 0000000..842c3c8 --- /dev/null +++ b/WebInterface/wasm/webhogg/game_logic.js @@ -0,0 +1,407 @@ +const __exports = {}; +let wasm; + +const heap = new Array(32); + +heap.fill(undefined); + +heap.push(undefined, null, true, false); + +let heap_next = heap.length; + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} +/** +* @param {any} worker +* @returns {void} +*/ +function game_logic_entry(worker) { + return wasm.game_logic_entry(addHeapObject(worker)); +} +__exports.game_logic_entry = game_logic_entry + +/** +* @param {any} worker +* @returns {void} +*/ +function graphics_entry(worker) { + return wasm.graphics_entry(addHeapObject(worker)); +} +__exports.graphics_entry = graphics_entry + +let cachedTextDecoder = new TextDecoder('utf-8'); + +let cachegetUint8Memory = null; +function getUint8Memory() { + if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) { + cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory; +} + +function getStringFromWasm(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory().subarray(ptr, ptr + len)); +} + +function __wbg_debug_eacd5b227c4c01c7(arg0, arg1, arg2, arg3, arg4, arg5) { + let varg0 = getStringFromWasm(arg0, arg1); + let varg2 = getStringFromWasm(arg2, arg3); + let varg4 = getStringFromWasm(arg4, arg5); + console.debug(varg0, varg2, varg4); +} +__exports.__wbg_debug_eacd5b227c4c01c7 = __wbg_debug_eacd5b227c4c01c7 + +function __wbg_info_be654745b6a55079(arg0, arg1, arg2, arg3, arg4, arg5) { + let varg0 = getStringFromWasm(arg0, arg1); + let varg2 = getStringFromWasm(arg2, arg3); + let varg4 = getStringFromWasm(arg4, arg5); + console.info(varg0, varg2, varg4); +} +__exports.__wbg_info_be654745b6a55079 = __wbg_info_be654745b6a55079 + +function __wbg_warn_804a0523852c6d10(arg0, arg1, arg2, arg3, arg4, arg5) { + let varg0 = getStringFromWasm(arg0, arg1); + let varg2 = getStringFromWasm(arg2, arg3); + let varg4 = getStringFromWasm(arg4, arg5); + console.warn(varg0, varg2, varg4); +} +__exports.__wbg_warn_804a0523852c6d10 = __wbg_warn_804a0523852c6d10 + +function __wbg_error_56a861ecc80f27e1(arg0, arg1, arg2, arg3, arg4, arg5) { + let varg0 = getStringFromWasm(arg0, arg1); + let varg2 = getStringFromWasm(arg2, arg3); + let varg4 = getStringFromWasm(arg4, arg5); + console.error(varg0, varg2, varg4); +} +__exports.__wbg_error_56a861ecc80f27e1 = __wbg_error_56a861ecc80f27e1 + +function getObject(idx) { return heap[idx]; } + +function __widl_f_set_onmessage_DedicatedWorkerGlobalScope(arg0, arg1) { + getObject(arg0).onmessage = getObject(arg1); +} +__exports.__widl_f_set_onmessage_DedicatedWorkerGlobalScope = __widl_f_set_onmessage_DedicatedWorkerGlobalScope + +function isLikeNone(x) { + return x === undefined || x === null; +} + +function __widl_f_get_element_by_id_Document(arg0, arg1, arg2) { + let varg1 = getStringFromWasm(arg1, arg2); + + const val = getObject(arg0).getElementById(varg1); + return isLikeNone(val) ? 0 : addHeapObject(val); + +} +__exports.__widl_f_get_element_by_id_Document = __widl_f_get_element_by_id_Document + +function __widl_instanceof_HTMLCanvasElement(idx) { return getObject(idx) instanceof HTMLCanvasElement ? 1 : 0; } +__exports.__widl_instanceof_HTMLCanvasElement = __widl_instanceof_HTMLCanvasElement + +let cachegetUint32Memory = null; +function getUint32Memory() { + if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) { + cachegetUint32Memory = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory; +} + +function handleError(exnptr, e) { + const view = getUint32Memory(); + view[exnptr / 4] = 1; + view[exnptr / 4 + 1] = addHeapObject(e); +} + +function __widl_f_get_context_HTMLCanvasElement(arg0, arg1, arg2, exnptr) { + let varg1 = getStringFromWasm(arg1, arg2); + try { + + const val = getObject(arg0).getContext(varg1); + return isLikeNone(val) ? 0 : addHeapObject(val); + + } catch (e) { + handleError(exnptr, e); + } +} +__exports.__widl_f_get_context_HTMLCanvasElement = __widl_f_get_context_HTMLCanvasElement + +function __widl_f_data_MessageEvent(arg0) { + return addHeapObject(getObject(arg0).data); +} +__exports.__widl_f_data_MessageEvent = __widl_f_data_MessageEvent + +function __widl_instanceof_WebGL2RenderingContext(idx) { return getObject(idx) instanceof WebGL2RenderingContext ? 1 : 0; } +__exports.__widl_instanceof_WebGL2RenderingContext = __widl_instanceof_WebGL2RenderingContext + +function __widl_instanceof_Window(idx) { return getObject(idx) instanceof Window ? 1 : 0; } +__exports.__widl_instanceof_Window = __widl_instanceof_Window + +function __widl_f_document_Window(arg0) { + + const val = getObject(arg0).document; + return isLikeNone(val) ? 0 : addHeapObject(val); + +} +__exports.__widl_f_document_Window = __widl_f_document_Window + +function __widl_f_post_message_Worker(arg0, arg1, exnptr) { + try { + getObject(arg0).postMessage(getObject(arg1)); + } catch (e) { + handleError(exnptr, e); + } +} +__exports.__widl_f_post_message_Worker = __widl_f_post_message_Worker + +function __wbg_newnoargs_a172f39151049128(arg0, arg1) { + let varg0 = getStringFromWasm(arg0, arg1); + return addHeapObject(new Function(varg0)); +} +__exports.__wbg_newnoargs_a172f39151049128 = __wbg_newnoargs_a172f39151049128 + +function __wbg_call_8a9c8b0a32a202ff(arg0, arg1, exnptr) { + try { + return addHeapObject(getObject(arg0).call(getObject(arg1))); + } catch (e) { + handleError(exnptr, e); + } +} +__exports.__wbg_call_8a9c8b0a32a202ff = __wbg_call_8a9c8b0a32a202ff + +function __wbg_new0_b4c0f6100aa61878() { + return addHeapObject(new Date()); +} +__exports.__wbg_new0_b4c0f6100aa61878 = __wbg_new0_b4c0f6100aa61878 + +function __wbg_toISOString_580e1bcc780bf968(arg0) { + return addHeapObject(getObject(arg0).toISOString()); +} +__exports.__wbg_toISOString_580e1bcc780bf968 = __wbg_toISOString_580e1bcc780bf968 + +function __wbindgen_string_new(p, l) { return addHeapObject(getStringFromWasm(p, l)); } +__exports.__wbindgen_string_new = __wbindgen_string_new + +let WASM_VECTOR_LEN = 0; + +let cachedTextEncoder = new TextEncoder('utf-8'); + +let passStringToWasm; +if (typeof cachedTextEncoder.encodeInto === 'function') { + passStringToWasm = function(arg) { + + + let size = arg.length; + let ptr = wasm.__wbindgen_malloc(size); + let offset = 0; + { + const mem = getUint8Memory(); + for (; offset < arg.length; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + } + + if (offset !== arg.length) { + arg = arg.slice(offset); + ptr = wasm.__wbindgen_realloc(ptr, size, size = offset + arg.length * 3); + const view = getUint8Memory().subarray(ptr + offset, ptr + size); + const ret = cachedTextEncoder.encodeInto(arg, view); + + offset += ret.written; + } + WASM_VECTOR_LEN = offset; + return ptr; + }; +} else { + passStringToWasm = function(arg) { + + + let size = arg.length; + let ptr = wasm.__wbindgen_malloc(size); + let offset = 0; + { + const mem = getUint8Memory(); + for (; offset < arg.length; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + } + + if (offset !== arg.length) { + const buf = cachedTextEncoder.encode(arg.slice(offset)); + ptr = wasm.__wbindgen_realloc(ptr, size, size = offset + buf.length); + getUint8Memory().set(buf, ptr + offset); + offset += buf.length; + } + WASM_VECTOR_LEN = offset; + return ptr; + }; +} + +function __wbindgen_string_get(i, len_ptr) { + let obj = getObject(i); + if (typeof(obj) !== 'string') return 0; + const ptr = passStringToWasm(obj); + getUint32Memory()[len_ptr / 4] = WASM_VECTOR_LEN; + return ptr; +} +__exports.__wbindgen_string_get = __wbindgen_string_get + +function __wbindgen_debug_string(i, len_ptr) { + const debug_str = + val => { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debug_str(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debug_str(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message} + ${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} +; +const toString = Object.prototype.toString; +const val = getObject(i); +const debug = debug_str(val); +const ptr = passStringToWasm(debug); +getUint32Memory()[len_ptr / 4] = WASM_VECTOR_LEN; +return ptr; +} +__exports.__wbindgen_debug_string = __wbindgen_debug_string + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function __wbindgen_cb_drop(i) { + const obj = takeObject(i).original; + if (obj.cnt-- == 1) { + obj.a = 0; + return 1; + } + return 0; +} +__exports.__wbindgen_cb_drop = __wbindgen_cb_drop + +function __wbindgen_throw(ptr, len) { + throw new Error(getStringFromWasm(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); + const cb = function(arg0) { + this.cnt++; + let a = this.a; + this.a = 0; + try { + return f(a, b, addHeapObject(arg0)); + + } finally { + if (--this.cnt === 0) d(a, b); + else this.a = a; + + } + + }; + cb.a = a; + cb.cnt = 1; + let real = cb.bind(cb); + real.original = cb; + return addHeapObject(real); +} +__exports.__wbindgen_closure_wrapper61 = __wbindgen_closure_wrapper61 + +function __wbindgen_object_clone_ref(idx) { + return addHeapObject(getObject(idx)); +} +__exports.__wbindgen_object_clone_ref = __wbindgen_object_clone_ref + +function __wbindgen_object_drop_ref(i) { dropObject(i); } +__exports.__wbindgen_object_drop_ref = __wbindgen_object_drop_ref + +//!IMPORTANT_STUFF +const WASM_URL = './pkg/webhogg_bg.wasm'; + +const imports = { './webhogg': __exports }; + +let graphics = new Worker('./graphics.js', {type: 'module', credentials: 'include'}); + +let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports); + +res.then(result => { + wasm = result.instance.exports; + game_logic_entry(graphics); +}); diff --git a/WebInterface/wasm/webhogg/graphics.js b/WebInterface/wasm/webhogg/graphics.js index bafae3d..3ec753b 100644 --- a/WebInterface/wasm/webhogg/graphics.js +++ b/WebInterface/wasm/webhogg/graphics.js @@ -1,6 +1,40 @@ const __exports = {}; let wasm; +const heap = new Array(32); + +heap.fill(undefined); + +heap.push(undefined, null, true, false); + +let heap_next = heap.length; + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} +/** +* @param {any} worker +* @returns {void} +*/ +function game_logic_entry(worker) { + return wasm.game_logic_entry(addHeapObject(worker)); +} +__exports.game_logic_entry = game_logic_entry + +/** +* @param {any} worker +* @returns {void} +*/ +function graphics_entry(worker) { + return wasm.graphics_entry(addHeapObject(worker)); +} +__exports.graphics_entry = graphics_entry + let cachedTextDecoder = new TextDecoder('utf-8'); let cachegetUint8Memory = null; @@ -47,40 +81,28 @@ function __wbg_error_56a861ecc80f27e1(arg0, arg1, arg2, arg3, arg4, arg5) { } __exports.__wbg_error_56a861ecc80f27e1 = __wbg_error_56a861ecc80f27e1 -const heap = new Array(32); +function getObject(idx) { return heap[idx]; } -heap.fill(undefined); +function __widl_f_set_onmessage_DedicatedWorkerGlobalScope(arg0, arg1) { + getObject(arg0).onmessage = getObject(arg1); +} +__exports.__widl_f_set_onmessage_DedicatedWorkerGlobalScope = __widl_f_set_onmessage_DedicatedWorkerGlobalScope -heap.push(undefined, null, true, false); +function isLikeNone(x) { + return x === undefined || x === null; +} -let heap_next = heap.length; +function __widl_f_get_element_by_id_Document(arg0, arg1, arg2) { + let varg1 = getStringFromWasm(arg1, arg2); -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; + const val = getObject(arg0).getElementById(varg1); + return isLikeNone(val) ? 0 : addHeapObject(val); - heap[idx] = obj; - return idx; -} -/** -* @param {any} worker -* @returns {void} -*/ -function game_logic_entry(worker) { - return wasm.game_logic_entry(addHeapObject(worker)); } -__exports.game_logic_entry = game_logic_entry +__exports.__widl_f_get_element_by_id_Document = __widl_f_get_element_by_id_Document -/** -* @returns {void} -*/ -function graphics_entry() { - return wasm.graphics_entry(); -} -__exports.graphics_entry = graphics_entry - -function getObject(idx) { return heap[idx]; } +function __widl_instanceof_HTMLCanvasElement(idx) { return getObject(idx) instanceof HTMLCanvasElement ? 1 : 0; } +__exports.__widl_instanceof_HTMLCanvasElement = __widl_instanceof_HTMLCanvasElement let cachegetUint32Memory = null; function getUint32Memory() { @@ -96,6 +118,38 @@ function handleError(exnptr, e) { view[exnptr / 4 + 1] = addHeapObject(e); } +function __widl_f_get_context_HTMLCanvasElement(arg0, arg1, arg2, exnptr) { + let varg1 = getStringFromWasm(arg1, arg2); + try { + + const val = getObject(arg0).getContext(varg1); + return isLikeNone(val) ? 0 : addHeapObject(val); + + } catch (e) { + handleError(exnptr, e); + } +} +__exports.__widl_f_get_context_HTMLCanvasElement = __widl_f_get_context_HTMLCanvasElement + +function __widl_f_data_MessageEvent(arg0) { + return addHeapObject(getObject(arg0).data); +} +__exports.__widl_f_data_MessageEvent = __widl_f_data_MessageEvent + +function __widl_instanceof_WebGL2RenderingContext(idx) { return getObject(idx) instanceof WebGL2RenderingContext ? 1 : 0; } +__exports.__widl_instanceof_WebGL2RenderingContext = __widl_instanceof_WebGL2RenderingContext + +function __widl_instanceof_Window(idx) { return getObject(idx) instanceof Window ? 1 : 0; } +__exports.__widl_instanceof_Window = __widl_instanceof_Window + +function __widl_f_document_Window(arg0) { + + const val = getObject(arg0).document; + return isLikeNone(val) ? 0 : addHeapObject(val); + +} +__exports.__widl_f_document_Window = __widl_f_document_Window + function __widl_f_post_message_Worker(arg0, arg1, exnptr) { try { getObject(arg0).postMessage(getObject(arg1)); @@ -105,6 +159,31 @@ function __widl_f_post_message_Worker(arg0, arg1, exnptr) { } __exports.__widl_f_post_message_Worker = __widl_f_post_message_Worker +function __wbg_newnoargs_a172f39151049128(arg0, arg1) { + let varg0 = getStringFromWasm(arg0, arg1); + return addHeapObject(new Function(varg0)); +} +__exports.__wbg_newnoargs_a172f39151049128 = __wbg_newnoargs_a172f39151049128 + +function __wbg_call_8a9c8b0a32a202ff(arg0, arg1, exnptr) { + try { + return addHeapObject(getObject(arg0).call(getObject(arg1))); + } catch (e) { + handleError(exnptr, e); + } +} +__exports.__wbg_call_8a9c8b0a32a202ff = __wbg_call_8a9c8b0a32a202ff + +function __wbg_new0_b4c0f6100aa61878() { + return addHeapObject(new Date()); +} +__exports.__wbg_new0_b4c0f6100aa61878 = __wbg_new0_b4c0f6100aa61878 + +function __wbg_toISOString_580e1bcc780bf968(arg0) { + return addHeapObject(getObject(arg0).toISOString()); +} +__exports.__wbg_toISOString_580e1bcc780bf968 = __wbg_toISOString_580e1bcc780bf968 + function __wbindgen_string_new(p, l) { return addHeapObject(getStringFromWasm(p, l)); } __exports.__wbindgen_string_new = __wbindgen_string_new @@ -167,6 +246,15 @@ if (typeof cachedTextEncoder.encodeInto === 'function') { }; } +function __wbindgen_string_get(i, len_ptr) { + let obj = getObject(i); + if (typeof(obj) !== 'string') return 0; + const ptr = passStringToWasm(obj); + getUint32Memory()[len_ptr / 4] = WASM_VECTOR_LEN; + return ptr; +} +__exports.__wbindgen_string_get = __wbindgen_string_get + function __wbindgen_debug_string(i, len_ptr) { const debug_str = val => { @@ -244,33 +332,77 @@ return ptr; } __exports.__wbindgen_debug_string = __wbindgen_debug_string +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function __wbindgen_cb_drop(i) { + const obj = takeObject(i).original; + if (obj.cnt-- == 1) { + obj.a = 0; + return 1; + } + return 0; +} +__exports.__wbindgen_cb_drop = __wbindgen_cb_drop + function __wbindgen_throw(ptr, len) { throw new Error(getStringFromWasm(ptr, len)); } __exports.__wbindgen_throw = __wbindgen_throw -function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; +function __wbindgen_closure_wrapper61(a, b, _ignored) { + const f = wasm.__wbg_function_table.get(22); + const d = wasm.__wbg_function_table.get(23); + const cb = function(arg0) { + this.cnt++; + let a = this.a; + this.a = 0; + try { + return f(a, b, addHeapObject(arg0)); + + } finally { + if (--this.cnt === 0) d(a, b); + else this.a = a; + + } + + }; + cb.a = a; + cb.cnt = 1; + let real = cb.bind(cb); + real.original = cb; + return addHeapObject(real); } +__exports.__wbindgen_closure_wrapper61 = __wbindgen_closure_wrapper61 + +function __wbindgen_object_clone_ref(idx) { + return addHeapObject(getObject(idx)); +} +__exports.__wbindgen_object_clone_ref = __wbindgen_object_clone_ref function __wbindgen_object_drop_ref(i) { dropObject(i); } __exports.__wbindgen_object_drop_ref = __wbindgen_object_drop_ref //!IMPORTANT_STUFF - const WASM_URL = './pkg/webhogg_bg.wasm'; const imports = { './webhogg': __exports }; let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports); res.then(result => { - console.log(result); wasm = result.instance.exports; - graphics_entry(); + graphics_entry(self); }); -onmessage = function (e) { +/*onmessage = function (e) { console.log('gooot messaaage', e.data); -} +}*/ diff --git a/WebInterface/wasm/webhogg/loader.js b/WebInterface/wasm/webhogg/loader.js index 1fc8584..e1ad8f9 100644 --- a/WebInterface/wasm/webhogg/loader.js +++ b/WebInterface/wasm/webhogg/loader.js @@ -1,276 +1,4 @@ -const __exports = {}; -let wasm; - -let cachedTextDecoder = new TextDecoder('utf-8'); - -let cachegetUint8Memory = null; -function getUint8Memory() { - if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) { - cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory; -} - -function getStringFromWasm(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory().subarray(ptr, ptr + len)); -} - -function __wbg_debug_eacd5b227c4c01c7(arg0, arg1, arg2, arg3, arg4, arg5) { - let varg0 = getStringFromWasm(arg0, arg1); - let varg2 = getStringFromWasm(arg2, arg3); - let varg4 = getStringFromWasm(arg4, arg5); - console.debug(varg0, varg2, varg4); -} -__exports.__wbg_debug_eacd5b227c4c01c7 = __wbg_debug_eacd5b227c4c01c7 - -function __wbg_info_be654745b6a55079(arg0, arg1, arg2, arg3, arg4, arg5) { - let varg0 = getStringFromWasm(arg0, arg1); - let varg2 = getStringFromWasm(arg2, arg3); - let varg4 = getStringFromWasm(arg4, arg5); - console.info(varg0, varg2, varg4); -} -__exports.__wbg_info_be654745b6a55079 = __wbg_info_be654745b6a55079 - -function __wbg_warn_804a0523852c6d10(arg0, arg1, arg2, arg3, arg4, arg5) { - let varg0 = getStringFromWasm(arg0, arg1); - let varg2 = getStringFromWasm(arg2, arg3); - let varg4 = getStringFromWasm(arg4, arg5); - console.warn(varg0, varg2, varg4); -} -__exports.__wbg_warn_804a0523852c6d10 = __wbg_warn_804a0523852c6d10 - -function __wbg_error_56a861ecc80f27e1(arg0, arg1, arg2, arg3, arg4, arg5) { - let varg0 = getStringFromWasm(arg0, arg1); - let varg2 = getStringFromWasm(arg2, arg3); - let varg4 = getStringFromWasm(arg4, arg5); - console.error(varg0, varg2, varg4); -} -__exports.__wbg_error_56a861ecc80f27e1 = __wbg_error_56a861ecc80f27e1 - -const heap = new Array(32); - -heap.fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} -/** -* @param {any} worker -* @returns {void} -*/ -function game_logic_entry(worker) { - return wasm.game_logic_entry(addHeapObject(worker)); -} -__exports.game_logic_entry = game_logic_entry - -/** -* @returns {void} -*/ -function graphics_entry() { - return wasm.graphics_entry(); -} -__exports.graphics_entry = graphics_entry - -function getObject(idx) { return heap[idx]; } - -let cachegetUint32Memory = null; -function getUint32Memory() { - if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) { - cachegetUint32Memory = new Uint32Array(wasm.memory.buffer); - } - return cachegetUint32Memory; -} - -function handleError(exnptr, e) { - const view = getUint32Memory(); - view[exnptr / 4] = 1; - view[exnptr / 4 + 1] = addHeapObject(e); -} - -function __widl_f_post_message_Worker(arg0, arg1, exnptr) { - try { - getObject(arg0).postMessage(getObject(arg1)); - } catch (e) { - handleError(exnptr, e); - } -} -__exports.__widl_f_post_message_Worker = __widl_f_post_message_Worker - -function __wbindgen_string_new(p, l) { return addHeapObject(getStringFromWasm(p, l)); } -__exports.__wbindgen_string_new = __wbindgen_string_new - -let WASM_VECTOR_LEN = 0; - -let cachedTextEncoder = new TextEncoder('utf-8'); - -let passStringToWasm; -if (typeof cachedTextEncoder.encodeInto === 'function') { - passStringToWasm = function(arg) { - - - let size = arg.length; - let ptr = wasm.__wbindgen_malloc(size); - let offset = 0; - { - const mem = getUint8Memory(); - for (; offset < arg.length; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - } - - if (offset !== arg.length) { - arg = arg.slice(offset); - ptr = wasm.__wbindgen_realloc(ptr, size, size = offset + arg.length * 3); - const view = getUint8Memory().subarray(ptr + offset, ptr + size); - const ret = cachedTextEncoder.encodeInto(arg, view); - - offset += ret.written; - } - WASM_VECTOR_LEN = offset; - return ptr; - }; -} else { - passStringToWasm = function(arg) { - - - let size = arg.length; - let ptr = wasm.__wbindgen_malloc(size); - let offset = 0; - { - const mem = getUint8Memory(); - for (; offset < arg.length; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - } - - if (offset !== arg.length) { - const buf = cachedTextEncoder.encode(arg.slice(offset)); - ptr = wasm.__wbindgen_realloc(ptr, size, size = offset + buf.length); - getUint8Memory().set(buf, ptr + offset); - offset += buf.length; - } - WASM_VECTOR_LEN = offset; - return ptr; - }; -} - -function __wbindgen_debug_string(i, len_ptr) { - const debug_str = - val => { - // primitive types - const type = typeof val; - if (type == 'number' || type == 'boolean' || val == null) { - return `${val}`; - } - if (type == 'string') { - return `"${val}"`; - } - if (type == 'symbol') { - const description = val.description; - if (description == null) { - return 'Symbol'; - } else { - return `Symbol(${description})`; - } - } - if (type == 'function') { - const name = val.name; - if (typeof name == 'string' && name.length > 0) { - return `Function(${name})`; - } else { - return 'Function'; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = '['; - if (length > 0) { - debug += debug_str(val[0]); - } - for(let i = 1; i < length; i++) { - debug += ', ' + debug_str(val[i]); - } - debug += ']'; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == 'Object') { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return 'Object(' + JSON.stringify(val) + ')'; - } catch (_) { - return 'Object'; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message} - ${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} -; -const toString = Object.prototype.toString; -const val = getObject(i); -const debug = debug_str(val); -const ptr = passStringToWasm(debug); -getUint32Memory()[len_ptr / 4] = WASM_VECTOR_LEN; -return ptr; -} -__exports.__wbindgen_debug_string = __wbindgen_debug_string - -function __wbindgen_throw(ptr, len) { - throw new Error(getStringFromWasm(ptr, len)); -} -__exports.__wbindgen_throw = __wbindgen_throw - -function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function __wbindgen_object_drop_ref(i) { dropObject(i); } -__exports.__wbindgen_object_drop_ref = __wbindgen_object_drop_ref - -//!IMPORTANT_STUFF - -const WASM_URL = './pkg/webhogg_bg.wasm'; - -const imports = { './webhogg': __exports }; -let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports); - -let graphics = new Worker('./graphics.js', {type: 'module', credentials: 'include'}); - -res.then(result => { - console.log(result); - wasm = result.instance.exports; - console.log('jsjs value', graphics); - game_logic_entry(graphics); -}); - +let game_logic = new Worker( + './game_logic.js', + {type: 'module', credentials: 'include'} +); diff --git a/WebInterface/wasm/webhogg/src/client_logger.rs b/WebInterface/wasm/webhogg/src/client_logger.rs index f71918f..f537631 100644 --- a/WebInterface/wasm/webhogg/src/client_logger.rs +++ b/WebInterface/wasm/webhogg/src/client_logger.rs @@ -32,8 +32,9 @@ fn log(rec: &log::Record) { pub fn init_logger() { fern::Dispatch::new().format(|out, message, record|{ out.finish(format_args!( - "%c{}%c {} > {}", + "%c{}%c |{}| {} > {}", record.level(), + String::from(js_sys::Date::new_0().to_iso_string()), record.target(), message ) diff --git a/WebInterface/wasm/webhogg/src/lib.rs b/WebInterface/wasm/webhogg/src/lib.rs index 9d052cd..05944a6 100644 --- a/WebInterface/wasm/webhogg/src/lib.rs +++ b/WebInterface/wasm/webhogg/src/lib.rs @@ -22,20 +22,30 @@ fn run_application() { pub fn game_logic_entry(worker: web_sys::Worker) { client_logger::init_logger(); - info!("game logic initialisation"); - info!("js value: {:?}", worker); - worker.post_message(&wasm_bindgen::JsValue::from_str("msg frm wasm_gLe")).unwrap(); + info!("hello from game logic wasm"); + info!("begin long calculation in game logic thread"); + worker.post_message(&wasm_bindgen::JsValue::from_str("premsg frm wasm_gLe")) + .unwrap(); + info!("killed game logic"); } #[wasm_bindgen] -pub fn graphics_entry() { +pub fn graphics_entry(worker: web_sys::DedicatedWorkerGlobalScope) { client_logger::init_logger(); - info!("graphics initialisation"); + info!("hello from graphics wasm"); + let handler = wasm_bindgen::closure::Closure::once_into_js( + (|e: web_sys::MessageEvent| { + info!("things are getting wired: {:?}", e.data()); + })); + + worker.set_onmessage(Some(&js_sys::Function::from(handler))); + entry2(); + info!("killed graphics"); } pub fn entry2() { - client_logger::init_logger(); + // client_logger::init_logger(); info!("begin running wasm application"); diff --git a/WebInterface/wasm/webhogg/target/.rustc_info.json b/WebInterface/wasm/webhogg/target/.rustc_info.json index 94a43da..6f83518 100644 --- a/WebInterface/wasm/webhogg/target/.rustc_info.json +++ b/WebInterface/wasm/webhogg/target/.rustc_info.json @@ -1 +1 @@ -{"rustc_fingerprint":7082560745936267572,"outputs":{"1617349019360157463":["___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n",""],"6217262102979750783":["___.wasm\nlib___.rlib\n___.wasm\nlib___.a\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"wasm32\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_os=\"unknown\"\ntarget_pointer_width=\"32\"\ntarget_vendor=\"unknown\"\n","warning: dropping unsupported crate type `dylib` for target `wasm32-unknown-unknown`\n\nwarning: dropping unsupported crate type `proc-macro` for target `wasm32-unknown-unknown`\n\n"],"1164083562126845933":["rustc 1.34.1 (fc50f328b 2019-04-24)\nbinary: rustc\ncommit-hash: fc50f328b0353b285421b8ff5d4100966387a997\ncommit-date: 2019-04-24\nhost: x86_64-unknown-linux-gnu\nrelease: 1.34.1\nLLVM version: 8.0\n",""]},"successes":{}} \ No newline at end of file +{"rustc_fingerprint":5653700290818914945,"outputs":{"1164083562126845933":["rustc 1.34.1 (fc50f328b 2019-04-24)\nbinary: rustc\ncommit-hash: fc50f328b0353b285421b8ff5d4100966387a997\ncommit-date: 2019-04-24\nhost: x86_64-unknown-linux-gnu\nrelease: 1.34.1\nLLVM version: 8.0\n",""],"6217262102979750783":["___.wasm\nlib___.rlib\n___.wasm\nlib___.a\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"wasm32\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_os=\"unknown\"\ntarget_pointer_width=\"32\"\ntarget_vendor=\"unknown\"\n","warning: dropping unsupported crate type `dylib` for target `wasm32-unknown-unknown`\n\nwarning: dropping unsupported crate type `proc-macro` for target `wasm32-unknown-unknown`\n\n"],"1617349019360157463":["___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n",""]},"successes":{}} \ No newline at end of file diff --git a/WebInterface/wasm/webhogg/update.py b/WebInterface/wasm/webhogg/update.py index 0a0171f..aad9395 100644 --- a/WebInterface/wasm/webhogg/update.py +++ b/WebInterface/wasm/webhogg/update.py @@ -9,7 +9,7 @@ def rf(fn): return c nc = rf('pkg/webhogg.js') -m1 = rf('loader.js') +m1 = rf('game_logic.js') m2 = rf('graphics.js') nc = nc.split('function init(module) {')[0].strip('\n') @@ -22,7 +22,7 @@ nc += '\n' * 2 + ISC m1 = nc + m1 m2 = nc + m2 -with open('loader.js', 'w') as f: +with open('game_logic.js', 'w') as f: f.write(m1) with open('graphics.js', 'w') as f: -- cgit v1.2.3-54-g00ecf From 08cdc5c6e8310890b1e7102b1fcb68dd5f6009a9 Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Sun, 2 Jun 2019 12:36:14 +0200 Subject: Send OffscreenCanvas to graphics worker --- WebInterface/wasm/webhogg/Cargo.toml | 1 + WebInterface/wasm/webhogg/game_logic.js | 29 ++++++++++++++---------- WebInterface/wasm/webhogg/graphics.js | 40 +++++++++++++++++++++------------ WebInterface/wasm/webhogg/index.html | 2 +- WebInterface/wasm/webhogg/loader.js | 5 +++++ 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 @@ webhogg -