diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-19 07:42:52 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-19 07:42:52 +0200 |
| commit | 729d10592f4e802f91c555c309ff3ba4b119f843 (patch) | |
| tree | a547a6d1ba90ca9cc03f406e0160df0af987644d /rust/wasm/src/gpu.rs | |
| parent | 9da365bc01fc54f6d3f0ca9c3212eee4c0cee7cd (diff) | |
| download | opencut-729d10592f4e802f91c555c309ff3ba4b119f843.tar.gz | |
fix: WebGL frame rendering and opencut-wasm 0.2.8
Diffstat (limited to 'rust/wasm/src/gpu.rs')
| -rw-r--r-- | rust/wasm/src/gpu.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/rust/wasm/src/gpu.rs b/rust/wasm/src/gpu.rs index 4e65978c..52c051f0 100644 --- a/rust/wasm/src/gpu.rs +++ b/rust/wasm/src/gpu.rs @@ -19,9 +19,27 @@ thread_local! { static GPU_RUNTIME: RefCell<Option<GpuRuntime>> = const { RefCell::new(None) }; } +fn set_panic_hook() { + static SET_HOOK: std::sync::Once = std::sync::Once::new(); + SET_HOOK.call_once(|| { + std::panic::set_hook(Box::new(|info| { + // Store the full panic message in window.__wasmPanic so the JS catch block + // can surface it instead of the opaque "Unreachable" WASM trap message. + if let Some(window) = web_sys::window() { + let _ = Reflect::set( + &window, + &JsValue::from_str("__wasmPanic"), + &JsValue::from_str(&info.to_string()), + ); + } + console_error_panic_hook::hook(info); + })); + }); +} + #[wasm_bindgen(js_name = initializeGpu)] pub async fn initialize_gpu() -> Result<(), JsValue> { - console_error_panic_hook::set_once(); + set_panic_hook(); if GPU_RUNTIME.with(|runtime| runtime.borrow().is_some()) { return Ok(()); |
