Fix ambiguities causing a crash (#12780)
# Objective - Disabling some plugins causes a crash due to ambiguities relying in feature flags and not checking if both plugins are enabled causing code like this to crash: `app.add_plugins(DefaultPlugins.build().disable::<AnimationPlugin>())` ## Solution - Check if plugins were added before ambiguities. - Move bevy_gizmos ambiguities from bevy_internal to bevy_gizmos since they already depend on them.
This commit is contained in:
parent
a6e37e7a2a
commit
7363268ea8
@ -105,6 +105,8 @@ const LINE_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(74148126892380
|
|||||||
const LINE_JOINT_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(1162780797909187908);
|
const LINE_JOINT_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(1162780797909187908);
|
||||||
|
|
||||||
/// A [`Plugin`] that provides an immediate mode drawing api for visual debugging.
|
/// A [`Plugin`] that provides an immediate mode drawing api for visual debugging.
|
||||||
|
///
|
||||||
|
/// Requires to be loaded after [`PbrPlugin`](bevy_pbr::PbrPlugin) or [`SpritePlugin`](bevy_sprite::SpritePlugin).
|
||||||
pub struct GizmoPlugin;
|
pub struct GizmoPlugin;
|
||||||
|
|
||||||
impl Plugin for GizmoPlugin {
|
impl Plugin for GizmoPlugin {
|
||||||
@ -146,9 +148,17 @@ impl Plugin for GizmoPlugin {
|
|||||||
render_app.add_systems(ExtractSchedule, extract_gizmo_data);
|
render_app.add_systems(ExtractSchedule, extract_gizmo_data);
|
||||||
|
|
||||||
#[cfg(feature = "bevy_sprite")]
|
#[cfg(feature = "bevy_sprite")]
|
||||||
app.add_plugins(pipeline_2d::LineGizmo2dPlugin);
|
if app.is_plugin_added::<bevy_sprite::SpritePlugin>() {
|
||||||
|
app.add_plugins(pipeline_2d::LineGizmo2dPlugin);
|
||||||
|
} else {
|
||||||
|
bevy_utils::tracing::warn!("bevy_sprite feature is enabled but bevy_sprite::SpritePlugin was not detected. Are you sure you loaded GizmoPlugin after SpritePlugin?");
|
||||||
|
}
|
||||||
#[cfg(feature = "bevy_pbr")]
|
#[cfg(feature = "bevy_pbr")]
|
||||||
app.add_plugins(pipeline_3d::LineGizmo3dPlugin);
|
if app.is_plugin_added::<bevy_pbr::PbrPlugin>() {
|
||||||
|
app.add_plugins(pipeline_3d::LineGizmo3dPlugin);
|
||||||
|
} else {
|
||||||
|
bevy_utils::tracing::warn!("bevy_pbr feature is enabled but bevy_pbr::PbrPlugin was not detected. Are you sure you loaded GizmoPlugin after PbrPlugin?");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish(&self, app: &mut bevy_app::App) {
|
fn finish(&self, app: &mut bevy_app::App) {
|
||||||
|
@ -41,7 +41,12 @@ impl Plugin for LineGizmo2dPlugin {
|
|||||||
.init_resource::<SpecializedRenderPipelines<LineJointGizmoPipeline>>()
|
.init_resource::<SpecializedRenderPipelines<LineJointGizmoPipeline>>()
|
||||||
.configure_sets(
|
.configure_sets(
|
||||||
Render,
|
Render,
|
||||||
GizmoRenderSystem::QueueLineGizmos2d.in_set(RenderSet::Queue),
|
GizmoRenderSystem::QueueLineGizmos2d
|
||||||
|
.in_set(RenderSet::Queue)
|
||||||
|
.ambiguous_with(bevy_sprite::queue_sprites)
|
||||||
|
.ambiguous_with(
|
||||||
|
bevy_sprite::queue_material2d_meshes::<bevy_sprite::ColorMaterial>,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
Render,
|
Render,
|
||||||
|
@ -43,7 +43,9 @@ impl Plugin for LineGizmo3dPlugin {
|
|||||||
.init_resource::<SpecializedRenderPipelines<LineJointGizmoPipeline>>()
|
.init_resource::<SpecializedRenderPipelines<LineJointGizmoPipeline>>()
|
||||||
.configure_sets(
|
.configure_sets(
|
||||||
Render,
|
Render,
|
||||||
GizmoRenderSystem::QueueLineGizmos3d.in_set(RenderSet::Queue),
|
GizmoRenderSystem::QueueLineGizmos3d
|
||||||
|
.in_set(RenderSet::Queue)
|
||||||
|
.ambiguous_with(bevy_pbr::queue_material_meshes::<bevy_pbr::StandardMaterial>),
|
||||||
)
|
)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
Render,
|
Render,
|
||||||
|
@ -155,35 +155,14 @@ impl Plugin for IgnoreAmbiguitiesPlugin {
|
|||||||
fn build(&self, app: &mut bevy_app::App) {
|
fn build(&self, app: &mut bevy_app::App) {
|
||||||
// bevy_ui owns the Transform and cannot be animated
|
// bevy_ui owns the Transform and cannot be animated
|
||||||
#[cfg(all(feature = "bevy_animation", feature = "bevy_ui"))]
|
#[cfg(all(feature = "bevy_animation", feature = "bevy_ui"))]
|
||||||
app.ignore_ambiguity(
|
if app.is_plugin_added::<bevy_animation::AnimationPlugin>()
|
||||||
bevy_app::PostUpdate,
|
&& app.is_plugin_added::<bevy_ui::UiPlugin>()
|
||||||
bevy_animation::advance_animations,
|
{
|
||||||
bevy_ui::ui_layout_system,
|
app.ignore_ambiguity(
|
||||||
);
|
bevy_app::PostUpdate,
|
||||||
|
bevy_animation::advance_animations,
|
||||||
#[cfg(feature = "bevy_render")]
|
bevy_ui::ui_layout_system,
|
||||||
if let Ok(render_app) = app.get_sub_app_mut(bevy_render::RenderApp) {
|
);
|
||||||
#[cfg(all(feature = "bevy_gizmos", feature = "bevy_sprite"))]
|
|
||||||
{
|
|
||||||
render_app.ignore_ambiguity(
|
|
||||||
bevy_render::Render,
|
|
||||||
bevy_gizmos::GizmoRenderSystem::QueueLineGizmos2d,
|
|
||||||
bevy_sprite::queue_sprites,
|
|
||||||
);
|
|
||||||
render_app.ignore_ambiguity(
|
|
||||||
bevy_render::Render,
|
|
||||||
bevy_gizmos::GizmoRenderSystem::QueueLineGizmos2d,
|
|
||||||
bevy_sprite::queue_material2d_meshes::<bevy_sprite::ColorMaterial>,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
#[cfg(all(feature = "bevy_gizmos", feature = "bevy_pbr"))]
|
|
||||||
{
|
|
||||||
render_app.ignore_ambiguity(
|
|
||||||
bevy_render::Render,
|
|
||||||
bevy_gizmos::GizmoRenderSystem::QueueLineGizmos3d,
|
|
||||||
bevy_pbr::queue_material_meshes::<bevy_pbr::StandardMaterial>,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user