diff --git a/crates/bevy_app/src/app.rs b/crates/bevy_app/src/app.rs index 821612a232..296ab0c7c4 100644 --- a/crates/bevy_app/src/app.rs +++ b/crates/bevy_app/src/app.rs @@ -309,14 +309,6 @@ impl App { panic!("App::run() was called from within Plugin::build(), which is not allowed."); } - if app.plugins_state() == PluginsState::Ready { - // If we're already ready, we finish up now and advance one frame. - // This prevents black frames during the launch transition on iOS. - app.finish(); - app.cleanup(); - app.update(); - } - let runner = std::mem::replace(&mut app.runner, Box::new(run_once)); (runner)(app); } @@ -986,20 +978,14 @@ impl App { } fn run_once(mut app: App) { - let plugins_state = app.plugins_state(); - if plugins_state != PluginsState::Cleaned { - while app.plugins_state() == PluginsState::Adding { - #[cfg(not(target_arch = "wasm32"))] - bevy_tasks::tick_global_task_pools_on_main_thread(); - } - app.finish(); - app.cleanup(); + while app.plugins_state() == PluginsState::Adding { + #[cfg(not(target_arch = "wasm32"))] + bevy_tasks::tick_global_task_pools_on_main_thread(); } + app.finish(); + app.cleanup(); - // if plugins where cleaned before the runner start, an update already ran - if plugins_state != PluginsState::Cleaned { - app.update(); - } + app.update(); } /// An event that indicates the [`App`] should exit. This will fully exit the app process at the diff --git a/crates/bevy_app/src/schedule_runner.rs b/crates/bevy_app/src/schedule_runner.rs index 18b2f0b61f..1e17f8322a 100644 --- a/crates/bevy_app/src/schedule_runner.rs +++ b/crates/bevy_app/src/schedule_runner.rs @@ -84,12 +84,7 @@ impl Plugin for ScheduleRunnerPlugin { let mut app_exit_event_reader = ManualEventReader::::default(); match run_mode { - RunMode::Once => { - // if plugins where cleaned before the runner start, an update already ran - if plugins_state != PluginsState::Cleaned { - app.update(); - } - } + RunMode::Once => app.update(), RunMode::Loop { wait } => { let mut tick = move |app: &mut App, wait: Option| diff --git a/crates/bevy_winit/src/lib.rs b/crates/bevy_winit/src/lib.rs index 91c9858c79..2291f609d0 100644 --- a/crates/bevy_winit/src/lib.rs +++ b/crates/bevy_winit/src/lib.rs @@ -349,6 +349,14 @@ impl Default for WinitAppRunnerState { /// Overriding the app's [runner](bevy_app::App::runner) while using `WinitPlugin` will bypass the /// `EventLoop`. pub fn winit_runner(mut app: App) { + if app.plugins_state() == PluginsState::Ready { + // If we're already ready, we finish up now and advance one frame. + // This prevents black frames during the launch transition on iOS. + app.finish(); + app.cleanup(); + app.update(); + } + let mut event_loop = app .world .remove_non_send_resource::>()