moved set_panic_hook to engine initialization for wasm builds

This commit is contained in:
Dmitry Stepanov
2025-08-26 22:01:26 +03:00
parent 48f0614ad6
commit c1f1200efc
3 changed files with 62 additions and 34 deletions
+4
View File
@@ -28,6 +28,7 @@ pub mod executor;
pub mod task;
mod hotreload;
mod wasm_utils;
use crate::scene::skybox::SkyBoxKind;
use crate::{
@@ -1441,6 +1442,9 @@ impl Engine {
task_pool,
} = params;
#[cfg(target_arch = "wasm32")]
wasm_utils::set_panic_hook();
initialize_resource_manager_loaders(&resource_manager, serialization_context.clone());
let (rx, tx) = channel();
+56
View File
@@ -0,0 +1,56 @@
// Copyright (c) 2019-present Dmitry Stepanov and Fyrox Engine contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#![cfg(target_arch = "wasm32")]
use crate::core::wasm_bindgen::{self, prelude::*};
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = console)]
fn error(msg: String);
type Error;
#[wasm_bindgen(constructor)]
fn new() -> Error;
#[wasm_bindgen(structural, method, getter)]
fn stack(error: &Error) -> String;
}
fn custom_panic_hook(info: &std::panic::PanicHookInfo) {
let mut msg = info.to_string();
msg.push_str("\n\nStack:\n\n");
let e = Error::new();
let stack = e.stack();
msg.push_str(&stack);
msg.push_str("\n\n");
error(msg);
}
#[inline]
pub(super) fn set_panic_hook() {
use std::sync::Once;
static SET_HOOK: Once = Once::new();
SET_HOOK.call_once(|| {
std::panic::set_hook(Box::new(custom_panic_hook));
});
}
+2 -34
View File
@@ -328,47 +328,15 @@ fyrox = {{workspace = true}}
format!(
r#"//! Executor with your game connected to it as a plugin.
#![cfg(target_arch = "wasm32")]
use fyrox::engine::executor::Executor;
use fyrox::event_loop::EventLoop;
use {name}::Game;
use fyrox::core::wasm_bindgen::{{self, prelude::*}};
#[wasm_bindgen]
extern "C" {{
#[wasm_bindgen(js_namespace = console)]
fn error(msg: String);
type Error;
#[wasm_bindgen(constructor)]
fn new() -> Error;
#[wasm_bindgen(structural, method, getter)]
fn stack(error: &Error) -> String;
}}
fn custom_panic_hook(info: &std::panic::PanicHookInfo) {{
let mut msg = info.to_string();
msg.push_str("\n\nStack:\n\n");
let e = Error::new();
let stack = e.stack();
msg.push_str(&stack);
msg.push_str("\n\n");
error(msg);
}}
#[inline]
pub fn set_panic_hook() {{
use std::sync::Once;
static SET_HOOK: Once = Once::new();
SET_HOOK.call_once(|| {{
std::panic::set_hook(Box::new(custom_panic_hook));
}});
}}
use {name}::Game;
#[wasm_bindgen]
pub fn main() {{
set_panic_hook();
let mut executor = Executor::new(Some(EventLoop::new().unwrap()));
executor.add_plugin(Game::default());
executor.run()