Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions _release-content/migration-guides/extract-extract-a.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
title: Extract Extract
pull_requests: []
---

Extraction used to be specific of Main World to Render World, but will now be generic

- Use `TemporaryRenderEntity::default()` instead of `TemporaryRenderEntity`

NOTE: more to come
2 changes: 1 addition & 1 deletion crates/bevy_gizmos_render/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ fn extract_gizmo_data(
// The immediate mode API does not have a main world entity to refer to,
// but we do need MainEntity on this render entity for the systems to find it.
MainEntity::from(Entity::PLACEHOLDER),
TemporaryRenderEntity,
TemporaryRenderEntity::default(),
));
}
}
Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_gizmos_render/src/retained.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ pub(crate) fn extract_linegizmos(
handle: gizmo.handle.clone(),
},
MainEntity::from(entity),
TemporaryRenderEntity,
TemporaryRenderEntity::default(),
));
}
*previous_len = values.len();
Expand Down
4 changes: 2 additions & 2 deletions crates/bevy_render/src/extract_plugin.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
sync_world::{despawn_temporary_render_entities, entity_sync_system, SyncWorldPlugin},
sync_world::{despawn_temporary_entities, entity_sync_system, SyncWorldPlugin},
Render, RenderApp, RenderSystems,
};
use bevy_app::{App, Plugin, SubApp};
Expand Down Expand Up @@ -54,7 +54,7 @@ impl Plugin for ExtractPlugin {
// This set applies the commands from the extract schedule while the render schedule
// is running in parallel with the main app.
apply_extract_commands.in_set(RenderSystems::ExtractCommands),
despawn_temporary_render_entities.in_set(RenderSystems::PostCleanup),
despawn_temporary_entities::<RenderApp>.in_set(RenderSystems::PostCleanup),
),
);

Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_render/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ impl Render {
pub(crate) struct FutureRenderResources(Arc<Mutex<Option<RenderResources>>>);

/// A label for the rendering sub-app.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, AppLabel)]
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, AppLabel, Default)]
pub struct RenderApp;

impl Plugin for RenderPlugin {
Expand Down
12 changes: 8 additions & 4 deletions crates/bevy_render/src/sync_world.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
use bevy_app::Plugin;
use core::marker::PhantomData;

use bevy_app::{AppLabel, Plugin};
use bevy_derive::{Deref, DerefMut};
use bevy_ecs::{
component::Component,
Expand Down Expand Up @@ -189,7 +191,9 @@ pub type MainEntityHashSet = HashSet<MainEntity, EntityHash>;
/// Marker component that indicates that its entity needs to be despawned at the end of the frame.
#[derive(Component, Copy, Clone, Debug, Default, Reflect)]
#[reflect(Component, Default, Clone)]
pub struct TemporaryRenderEntity;
pub struct TemporaryEntity<L: AppLabel + Clone + Eq + Copy + Default>(PhantomData<L>);

pub type TemporaryRenderEntity = TemporaryEntity<crate::RenderApp>;

/// A record enum to what entities with [`SyncToRenderWorld`] have been added or removed.
#[derive(Debug)]
Expand Down Expand Up @@ -248,9 +252,9 @@ pub(crate) fn entity_sync_system(main_world: &mut World, render_world: &mut Worl
});
}

pub(crate) fn despawn_temporary_render_entities(
pub(crate) fn despawn_temporary_entities<L: AppLabel + Copy + Default + Eq>(
world: &mut World,
state: &mut SystemState<Query<Entity, With<TemporaryRenderEntity>>>,
state: &mut SystemState<Query<Entity, With<TemporaryEntity<L>>>>,
mut local: Local<Vec<Entity>>,
) {
let query = state.get(world).unwrap();
Expand Down
14 changes: 7 additions & 7 deletions crates/bevy_sprite_render/src/text2d/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ pub fn extract_text2d_sprite(
let Ok(text_background_color) = text_background_colors_query.get(section_entity) else {
continue;
};
let render_entity = commands.spawn(TemporaryRenderEntity).id();
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
let offset = run.bounds.center();
let transform = *global_transform
* GlobalTransform::from_translation(top_left.extend(0.))
Expand Down Expand Up @@ -135,7 +135,7 @@ pub fn extract_text2d_sprite(
.get(i + 1)
.is_none_or(|info| info.atlas_info.texture != atlas_info.texture)
{
let render_entity = commands.spawn(TemporaryRenderEntity).id();
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
extracted_sprites.sprites.push(ExtractedSprite {
main_entity,
render_entity,
Expand Down Expand Up @@ -163,7 +163,7 @@ pub fn extract_text2d_sprite(
};

if has_strikethrough {
let render_entity = commands.spawn(TemporaryRenderEntity).id();
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
let offset = run.strikethrough_position();
let transform =
shadow_transform * GlobalTransform::from_translation(offset.extend(0.));
Expand All @@ -185,7 +185,7 @@ pub fn extract_text2d_sprite(
}

if has_underline {
let render_entity = commands.spawn(TemporaryRenderEntity).id();
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
let offset = run.underline_position();
let transform =
shadow_transform * GlobalTransform::from_translation(offset.extend(0.));
Expand Down Expand Up @@ -246,7 +246,7 @@ pub fn extract_text2d_sprite(
info.section_index != current_section
|| info.atlas_info.texture != atlas_info.texture
}) {
let render_entity = commands.spawn(TemporaryRenderEntity).id();
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
extracted_sprites.sprites.push(ExtractedSprite {
main_entity,
render_entity,
Expand Down Expand Up @@ -282,7 +282,7 @@ pub fn extract_text2d_sprite(
.map(|c| c.0)
.unwrap_or(text_color.0)
.to_linear();
let render_entity = commands.spawn(TemporaryRenderEntity).id();
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
let offset = run.strikethrough_position();
let transform = *global_transform
* GlobalTransform::from_translation(top_left.extend(0.))
Expand Down Expand Up @@ -310,7 +310,7 @@ pub fn extract_text2d_sprite(
.map(|c| c.0)
.unwrap_or(text_color.0)
.to_linear();
let render_entity = commands.spawn(TemporaryRenderEntity).id();
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
let offset = run.underline_position();
let transform = *global_transform
* GlobalTransform::from_translation(top_left.extend(0.))
Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_ui_render/src/box_shadow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ pub fn extract_shadows(
};

extracted_box_shadows.box_shadows.push(ExtractedBoxShadow {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
stack_index: stack_index.0,
transform: Affine2::from(transform) * Affine2::from_translation(offset),
color: drop_shadow.color.into(),
Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_ui_render/src/debug_overlay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ pub fn extract_debug_overlay(
}

extracted_uinodes.uinodes.push(ExtractedUiNode {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
// Keep all overlays above UI, and nudge each type slightly in Z so ordering is stable.
z_order,
clip: maybe_clip
Expand Down
8 changes: 4 additions & 4 deletions crates/bevy_ui_render/src/gradient.rs
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ pub fn extract_gradients(
node_type,
},
main_entity: entity.into(),
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
});
continue;
}
Expand All @@ -440,7 +440,7 @@ pub fn extract_gradients(
);

extracted_gradients.items.push(ExtractedGradient {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
stack_index: stack_index.0,
transform: transform.into(),
stops_range: range_start..extracted_color_stops.0.len(),
Expand Down Expand Up @@ -490,7 +490,7 @@ pub fn extract_gradients(
);

extracted_gradients.items.push(ExtractedGradient {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
stack_index: stack_index.0,
transform: transform.into(),
stops_range: range_start..extracted_color_stops.0.len(),
Expand Down Expand Up @@ -546,7 +546,7 @@ pub fn extract_gradients(
);

extracted_gradients.items.push(ExtractedGradient {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
stack_index: stack_index.0,
transform: transform.into(),
stops_range: range_start..extracted_color_stops.0.len(),
Expand Down
28 changes: 14 additions & 14 deletions crates/bevy_ui_render/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ pub fn extract_uinode_background_colors(

if !background_color.is_fully_transparent() {
extracted_uinodes.uinodes.push(ExtractedUiNode {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
z_order: stack_index.0 as f32 + stack_z_offsets::BACKGROUND_COLOR,
clip: clip.map(|clip| clip.clip),
image: AssetId::default(),
Expand All @@ -460,7 +460,7 @@ pub fn extract_uinode_background_colors(
&& !outer_color.0.is_fully_transparent()
{
extracted_uinodes.uinodes.push(ExtractedUiNode {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
z_order: stack_index.0 as f32 + stack_z_offsets::BACKGROUND_COLOR,
clip: clip.map(|clip| clip.clip),
image: AssetId::default(),
Expand Down Expand Up @@ -578,7 +578,7 @@ pub fn extract_uinode_images(

extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::IMAGE,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
clip: clip.map(|clip| clip.clip),
image: image.image.id(),
extracted_camera_entity,
Expand Down Expand Up @@ -697,7 +697,7 @@ pub fn extract_uinode_borders(
node_type: NodeType::Border(border_flags),
},
main_entity: entity.into(),
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
});
}
}
Expand All @@ -711,7 +711,7 @@ pub fn extract_uinode_borders(
let outline_size = computed_node.outlined_node_size();
extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::BORDER,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
image,
clip: maybe_clip.map(|clip| clip.clip),
extracted_camera_entity,
Expand Down Expand Up @@ -853,7 +853,7 @@ pub fn extract_ui_camera_view(
},
// Link to the main camera view.
UiViewTarget(render_entity),
TemporaryRenderEntity,
TemporaryRenderEntity::default(),
))
.id();

Expand Down Expand Up @@ -929,7 +929,7 @@ pub fn extract_viewport_nodes(

extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::IMAGE,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
clip: clip.map(|clip| clip.clip),
image: image.id(),
extracted_camera_entity,
Expand Down Expand Up @@ -1079,7 +1079,7 @@ pub fn extract_text_sections(
{
extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
image: atlas_info.texture,
clip,
extracted_camera_entity,
Expand Down Expand Up @@ -1183,7 +1183,7 @@ pub fn extract_text_shadows(
extracted_uinodes.uinodes.push(ExtractedUiNode {
transform: node_transform,
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
image: atlas_info.texture,
clip,
extracted_camera_entity,
Expand Down Expand Up @@ -1212,7 +1212,7 @@ pub fn extract_text_shadows(
if has_strikethrough {
extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
clip,
image: AssetId::default(),
extracted_camera_entity,
Expand All @@ -1238,7 +1238,7 @@ pub fn extract_text_shadows(
if has_underline {
extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
clip,
image: AssetId::default(),
extracted_camera_entity,
Expand Down Expand Up @@ -1350,7 +1350,7 @@ pub fn extract_text_decorations(
if let Some(text_background_color) = text_background_color {
extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
clip,
image: AssetId::default(),
extracted_camera_entity,
Expand Down Expand Up @@ -1380,7 +1380,7 @@ pub fn extract_text_decorations(

extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT_STRIKETHROUGH,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
clip,
image: AssetId::default(),
extracted_camera_entity,
Expand Down Expand Up @@ -1410,7 +1410,7 @@ pub fn extract_text_decorations(

extracted_uinodes.uinodes.push(ExtractedUiNode {
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT_STRIKETHROUGH,
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
clip,
image: AssetId::default(),
extracted_camera_entity,
Expand Down
6 changes: 3 additions & 3 deletions crates/bevy_ui_render/src/text.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ pub fn extract_text_cursor(
}

extracted_uinodes.uinodes.push(ExtractedUiNode {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT_SELECTION,
clip,
image: AssetId::default(),
Expand Down Expand Up @@ -166,7 +166,7 @@ pub fn extract_text_cursor(
&& !cursor_style.color.is_fully_transparent()
{
extracted_uinodes.uinodes.push(ExtractedUiNode {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT_CURSOR,
clip,
image: AssetId::default(),
Expand Down Expand Up @@ -259,7 +259,7 @@ pub fn extract_preedit_underlines(

for rect in text_layout_info.preedit_underline_rects.iter() {
extracted_uinodes.uinodes.push(ExtractedUiNode {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
z_order: stack_index.0 as f32 + stack_z_offsets::TEXT_STRIKETHROUGH,
clip,
image: AssetId::default(),
Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_ui_render/src/ui_material_pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ pub fn extract_ui_material_nodes<M: UiMaterial>(
};

extracted_uinodes.uinodes.push(ExtractedUiMaterialNode {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
stack_index: stack_index.0,
transform: transform.into(),
material: handle.id(),
Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_ui_render/src/ui_texture_slice_pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ pub fn extract_ui_texture_slices(
};

extracted_ui_slicers.slices.push(ExtractedUiTextureSlice {
render_entity: commands.spawn(TemporaryRenderEntity).id(),
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
stack_index: stack_index.0,
transform: Affine2::from(*transform) * Affine2::from_translation(visual_box.center()),
color: image.color.into(),
Expand Down
Loading