mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 15:14:50 +00:00
Revert App::run()
behavior/Remove winit
specific code from bevy_app
(#10389)
# Objective The way `bevy_app` works was changed unnecessarily in #9826 whose changes should have been specific to `bevy_winit`. I'm somewhat disappointed that happened and we can see in https://github.com/bevyengine/bevy/pull/10195 that it made things more complicated. Even worse, in #10385 it's clear that this breaks the clean abstraction over another engine someone built with Bevy! Fixes #10385. ## Solution - Move the changes made to `bevy_app` in #9826 to `bevy_winit` - Revert the changes to `ScheduleRunnerPlugin` and the `run_once` runner in #10195 as they're no longer necessary. While this code is breaking relative to `0.12.0`, it reverts the behavior of `bevy_app` back to how it was in `0.11`. Due to the nature of the breakage relative to `0.11` I hope this will be considered for `0.12.1`.
This commit is contained in:
parent
efc7dc0859
commit
bc9e159b26
3 changed files with 15 additions and 26 deletions
|
@ -309,14 +309,6 @@ impl App {
|
||||||
panic!("App::run() was called from within Plugin::build(), which is not allowed.");
|
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));
|
let runner = std::mem::replace(&mut app.runner, Box::new(run_once));
|
||||||
(runner)(app);
|
(runner)(app);
|
||||||
}
|
}
|
||||||
|
@ -986,21 +978,15 @@ impl App {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_once(mut app: App) {
|
fn run_once(mut app: App) {
|
||||||
let plugins_state = app.plugins_state();
|
|
||||||
if plugins_state != PluginsState::Cleaned {
|
|
||||||
while app.plugins_state() == PluginsState::Adding {
|
while app.plugins_state() == PluginsState::Adding {
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
bevy_tasks::tick_global_task_pools_on_main_thread();
|
bevy_tasks::tick_global_task_pools_on_main_thread();
|
||||||
}
|
}
|
||||||
app.finish();
|
app.finish();
|
||||||
app.cleanup();
|
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
|
/// An event that indicates the [`App`] should exit. This will fully exit the app process at the
|
||||||
/// start of the next tick of the schedule.
|
/// start of the next tick of the schedule.
|
||||||
|
|
|
@ -84,12 +84,7 @@ impl Plugin for ScheduleRunnerPlugin {
|
||||||
|
|
||||||
let mut app_exit_event_reader = ManualEventReader::<AppExit>::default();
|
let mut app_exit_event_reader = ManualEventReader::<AppExit>::default();
|
||||||
match run_mode {
|
match run_mode {
|
||||||
RunMode::Once => {
|
RunMode::Once => app.update(),
|
||||||
// if plugins where cleaned before the runner start, an update already ran
|
|
||||||
if plugins_state != PluginsState::Cleaned {
|
|
||||||
app.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RunMode::Loop { wait } => {
|
RunMode::Loop { wait } => {
|
||||||
let mut tick = move |app: &mut App,
|
let mut tick = move |app: &mut App,
|
||||||
wait: Option<Duration>|
|
wait: Option<Duration>|
|
||||||
|
|
|
@ -349,6 +349,14 @@ impl Default for WinitAppRunnerState {
|
||||||
/// Overriding the app's [runner](bevy_app::App::runner) while using `WinitPlugin` will bypass the
|
/// Overriding the app's [runner](bevy_app::App::runner) while using `WinitPlugin` will bypass the
|
||||||
/// `EventLoop`.
|
/// `EventLoop`.
|
||||||
pub fn winit_runner(mut app: App) {
|
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
|
let mut event_loop = app
|
||||||
.world
|
.world
|
||||||
.remove_non_send_resource::<EventLoop<()>>()
|
.remove_non_send_resource::<EventLoop<()>>()
|
||||||
|
|
Loading…
Reference in a new issue