From 00aa27175e3156a6ecf5af9b9955917dbe8e1336 Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 16 Jul 2026 10:07:19 +0800 Subject: [PATCH] fix(web): silence spurious console errors (meta + AudioContext) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two independent sources of noise in the web console, both from the default plugin set: 1. 'Failed to deserialize meta for asset shaders/*.wgsl' DefaultPlugins adds AssetPlugin with meta_check = Always, so bevy fetches .meta for every shader. The shaders ship raw (no .meta files); on the trunk dev server those requests don't return a clean 404 that bevy maps to NotFound, so bevy receives bytes and tries to RON-deserialize them as AssetMetaMinimal, logging a SpannedError per shader. Set meta_check = Never: it skips the meta lookup and uses the loader's default meta — correct for processor-free raw assets. 2. 'AudioContext was not allowed to start' The default AudioPlugin opens a WebAudio sink at startup; browsers block that until a user gesture and log it as a JS error. This app has no audio, so disable AudioPlugin entirely — removes the noise and shrinks the wasm binary. --- src/main.rs | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7452503..71c0841 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,15 +21,35 @@ fn main() { } App::new() - .add_plugins(DefaultPlugins.set(WindowPlugin { - primary_window: Some(Window { - title: "singularity-rs".into(), - // On web, make the canvas track the browser window size. - fit_canvas_to_parent: true, - ..default() - }), - ..default() - })) + .add_plugins( + DefaultPlugins + .set(WindowPlugin { + primary_window: Some(Window { + title: "singularity-rs".into(), + // On web, make the canvas track the browser window size. + fit_canvas_to_parent: true, + ..default() + }), + ..default() + }) + // The shaders ship as raw `.wgsl` files with no companion + // `.meta` files. The default `AssetMetaCheck::Always` makes bevy + // fetch `.meta` for every asset; on the web dev server + // those requests don't return a clean 404, so bevy receives + // bytes it tries to RON-deserialize as `AssetMetaMinimal` and + // logs a deserialization error per shader. `Never` skips the + // meta lookup entirely and uses the loader's default meta — + // exactly right for processor-free assets. + .set(AssetPlugin { + meta_check: bevy::asset::AssetMetaCheck::Never, + ..default() + }) + // The app has no audio. The default AudioPlugin opens a WebAudio + // sink at startup, which browsers block until a user gesture and + // log as a noisy "AudioContext was not allowed to start" error. + // Dropping it removes that noise and shrinks the wasm binary. + .disable::(), + ) .add_plugins(render::BlackHolePlugin) .run(); }