diff --git a/crates/bevy_render/src/view/visibility/mod.rs b/crates/bevy_render/src/view/visibility/mod.rs index b3b7c15bb2687..27323fbeb0bf2 100644 --- a/crates/bevy_render/src/view/visibility/mod.rs +++ b/crates/bevy_render/src/view/visibility/mod.rs @@ -325,6 +325,8 @@ pub enum VisibilitySystems { /// the order of systems within this set is irrelevant, as [`check_visibility`] /// assumes that its operations are irreversible during the frame. CheckVisibility, + /// Label for systems which do their own custom visibility checking. + CustomCheckVisibility, } pub struct VisibilityPlugin; @@ -336,9 +338,14 @@ impl Plugin for VisibilityPlugin { app.register_type::() .configure_sets( PostUpdate, - (CalculateBounds, UpdateFrusta, VisibilityPropagate) - .before(CheckVisibility) - .after(TransformSystem::TransformPropagate), + ( + (CalculateBounds, UpdateFrusta, VisibilityPropagate) + .before(CheckVisibility) + .after(TransformSystem::TransformPropagate), + CustomCheckVisibility + .in_set(CheckVisibility) + .after(check_visibility), + ), ) .init_resource::() .add_systems( @@ -463,7 +470,7 @@ pub struct PreviousVisibleEntities(EntityHashSet); /// Entities that are visible will be marked as such later this frame /// by a [`VisibilitySystems::CheckVisibility`] system. fn reset_view_visibility( - mut query: Query<(Entity, &ViewVisibility)>, + mut query: Query<(Entity, &ViewVisibility), Without>, mut previous_visible_entities: ResMut, ) { previous_visible_entities.clear(); @@ -476,6 +483,10 @@ fn reset_view_visibility( }); } +/// Entities with this marker won't get their visibility checked and if they aren't using custom checking/rendering then won't be rendered. +#[derive(Debug, Component)] +pub struct CustomVisibilityCheck; + /// System updating the visibility of entities each frame. /// /// The system is part of the [`VisibilitySystems::CheckVisibility`] set. Each @@ -494,17 +505,20 @@ pub fn check_visibility( &Camera, Has, )>, - mut visible_aabb_query: Query<( - Entity, - &InheritedVisibility, - &mut ViewVisibility, - &VisibilityClass, - Option<&RenderLayers>, - Option<&Aabb>, - &GlobalTransform, - Has, - Has, - )>, + mut visible_aabb_query: Query< + ( + Entity, + &InheritedVisibility, + &mut ViewVisibility, + &VisibilityClass, + Option<&RenderLayers>, + Option<&Aabb>, + &GlobalTransform, + Has, + Has, + ), + Without, + >, visible_entity_ranges: Option>, mut previous_visible_entities: ResMut, ) {