From c79adf8a409ecda45f3f619ea285e46c0ca4b560 Mon Sep 17 00:00:00 2001 From: Joda Date: Wed, 19 Nov 2025 12:17:27 -0600 Subject: [PATCH] prevent wasm from crashing on startup when using FpsOverlayPlugin --- crates/bevy_dev_tools/src/fps_overlay.rs | 67 ++++++++++++++---------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/crates/bevy_dev_tools/src/fps_overlay.rs b/crates/bevy_dev_tools/src/fps_overlay.rs index ea5c0fde4318b..fd07092ddc896 100644 --- a/crates/bevy_dev_tools/src/fps_overlay.rs +++ b/crates/bevy_dev_tools/src/fps_overlay.rs @@ -177,35 +177,46 @@ fn setup( )) .with_child((TextSpan::default(), overlay_config.text_config.clone())); - let font_size = overlay_config.text_config.font_size; - p.spawn(( - Node { - width: Val::Px(font_size * FRAME_TIME_GRAPH_WIDTH_SCALE), - height: Val::Px(font_size * FRAME_TIME_GRAPH_HEIGHT_SCALE), - display: if overlay_config.frame_time_graph_config.enabled { - bevy_ui::Display::DEFAULT - } else { - bevy_ui::Display::None - }, - ..Default::default() - }, - Pickable::IGNORE, - MaterialNode::from(frame_time_graph_materials.add(FrametimeGraphMaterial { - values: buffers.add(ShaderStorageBuffer { - // Initialize with dummy data because the default (`data: None`) will - // cause a panic in the shader if the frame time graph is constructed - // with `enabled: false`. - data: Some(vec![0, 0, 0, 0]), + #[cfg(target_arch = "wasm32")] + { + if overlay_config.frame_time_graph_config.enabled { + use tracing::warn; + + warn!("Frame time graph is not supported on wasm32 targets."); + } + } + #[cfg(not(target_arch = "wasm32"))] + { + let font_size = overlay_config.text_config.font_size; + p.spawn(( + Node { + width: Val::Px(font_size * FRAME_TIME_GRAPH_WIDTH_SCALE), + height: Val::Px(font_size * FRAME_TIME_GRAPH_HEIGHT_SCALE), + display: if overlay_config.frame_time_graph_config.enabled { + bevy_ui::Display::DEFAULT + } else { + bevy_ui::Display::None + }, ..Default::default() - }), - config: FrameTimeGraphConfigUniform::new( - overlay_config.frame_time_graph_config.target_fps, - overlay_config.frame_time_graph_config.min_fps, - true, - ), - })), - FrameTimeGraph, - )); + }, + Pickable::IGNORE, + MaterialNode::from(frame_time_graph_materials.add(FrametimeGraphMaterial { + values: buffers.add(ShaderStorageBuffer { + // Initialize with dummy data because the default (`data: None`) will + // cause a panic in the shader if the frame time graph is constructed + // with `enabled: false`. + data: Some(vec![0, 0, 0, 0]), + ..Default::default() + }), + config: FrameTimeGraphConfigUniform::new( + overlay_config.frame_time_graph_config.target_fps, + overlay_config.frame_time_graph_config.min_fps, + true, + ), + })), + FrameTimeGraph, + )); + } }); }