Explicitly order CameraUpdateSystem
before UiSystem::Prepare
(#14609)
Fixes https://github.com/bevyengine/bevy/issues/14277. May also fix https://github.com/bevyengine/bevy/issues/14255, needs verification. Explicitly order `CameraUpdateSystem` before `UiSystem::Prepare`, so that when the window resizes, `camera_system` will update the `Camera`'s viewport size before `ui_layout_system` also reacts to the window resize and tries to read the new `Camera` viewport size to set UI node sizes accordingly. I tested that explicitly ordering `CameraUpdateSystem` _after_ triggers the buggy behavior, and explicitly ordering it _before_ does not trigger the buggy behavior or crash the app (which also demonstrates that the system sets are ambiguous). --- `CameraUpdateSystem` is now explicitly ordered before `UiSystem::Prepare` instead of being ambiguous with it.
This commit is contained in:
parent
7d63efe4c2
commit
216dba23cb
@ -54,6 +54,7 @@ use bevy_app::prelude::*;
|
||||
use bevy_ecs::prelude::*;
|
||||
use bevy_input::InputSystem;
|
||||
use bevy_render::{
|
||||
camera::CameraUpdateSystem,
|
||||
view::{check_visibility, VisibilitySystems},
|
||||
RenderApp,
|
||||
};
|
||||
@ -129,6 +130,16 @@ impl Plugin for UiPlugin {
|
||||
.register_type::<widget::Label>()
|
||||
.register_type::<ZIndex>()
|
||||
.register_type::<Outline>()
|
||||
.configure_sets(
|
||||
PostUpdate,
|
||||
(
|
||||
CameraUpdateSystem,
|
||||
UiSystem::Stack,
|
||||
UiSystem::Layout,
|
||||
UiSystem::Outlines,
|
||||
)
|
||||
.chain(),
|
||||
)
|
||||
.add_systems(
|
||||
PreUpdate,
|
||||
ui_focus_system.in_set(UiSystem::Focus).after(InputSystem),
|
||||
@ -205,11 +216,6 @@ fn build_text_interop(app: &mut App) {
|
||||
widget::measure_text_system
|
||||
.before(UiSystem::Layout)
|
||||
// Potential conflict: `Assets<Image>`
|
||||
// In practice, they run independently since `bevy_render::camera_update_system`
|
||||
// will only ever observe its own render target, and `widget::measure_text_system`
|
||||
// will never modify a pre-existing `Image` asset.
|
||||
.ambiguous_with(bevy_render::camera::CameraUpdateSystem)
|
||||
// Potential conflict: `Assets<Image>`
|
||||
// Since both systems will only ever insert new [`Image`] assets,
|
||||
// they will never observe each other's effects.
|
||||
.ambiguous_with(bevy_text::update_text2d_layout)
|
||||
|
Loading…
Reference in New Issue
Block a user