Skip to content

Commit 06f341d

Browse files
committed
bevy_extract TemporaryRenderEntity
1 parent 61c87a7 commit 06f341d

11 files changed

Lines changed: 43 additions & 36 deletions

File tree

crates/bevy_gizmos_render/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ fn extract_gizmo_data(
211211
// The immediate mode API does not have a main world entity to refer to,
212212
// but we do need MainEntity on this render entity for the systems to find it.
213213
MainEntity::from(Entity::PLACEHOLDER),
214-
TemporaryRenderEntity,
214+
TemporaryRenderEntity::default(),
215215
));
216216
}
217217
}

crates/bevy_gizmos_render/src/retained.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ pub(crate) fn extract_linegizmos(
7575
handle: gizmo.handle.clone(),
7676
},
7777
MainEntity::from(entity),
78-
TemporaryRenderEntity,
78+
TemporaryRenderEntity::default(),
7979
));
8080
}
8181
*previous_len = values.len();

crates/bevy_render/src/extract_plugin.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ impl Plugin for ExtractPlugin {
5454
// This set applies the commands from the extract schedule while the render schedule
5555
// is running in parallel with the main app.
5656
apply_extract_commands.in_set(RenderSystems::ExtractCommands),
57-
despawn_temporary_render_entities.in_set(RenderSystems::PostCleanup),
57+
despawn_temporary_render_entities::<RenderApp>
58+
.in_set(RenderSystems::PostCleanup),
5859
),
5960
);
6061

crates/bevy_render/src/sync_world.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use bevy_app::Plugin;
1+
use std::marker::PhantomData;
2+
3+
use bevy_app::{AppLabel, Plugin};
24
use bevy_derive::{Deref, DerefMut};
35
use bevy_ecs::{
46
component::Component,
@@ -14,6 +16,8 @@ use bevy_ecs::{
1416
use bevy_platform::collections::{HashMap, HashSet};
1517
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
1618

19+
use crate::RenderApp;
20+
1721
/// A plugin that synchronizes entities with [`SyncToRenderWorld`] between the main world and the render world.
1822
///
1923
/// All entities with the [`SyncToRenderWorld`] component are kept in sync. It
@@ -189,7 +193,9 @@ pub type MainEntityHashSet = HashSet<MainEntity, EntityHash>;
189193
/// Marker component that indicates that its entity needs to be despawned at the end of the frame.
190194
#[derive(Component, Copy, Clone, Debug, Default, Reflect)]
191195
#[reflect(Component, Default, Clone)]
192-
pub struct TemporaryRenderEntity;
196+
pub struct TemporarySyncEntity<L: AppLabel>(PhantomData<L>);
197+
198+
pub type TemporaryRenderEntity = TemporarySyncEntity<RenderApp>;
193199

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

251-
pub(crate) fn despawn_temporary_render_entities(
257+
pub(crate) fn despawn_temporary_render_entities<L: AppLabel>(
252258
world: &mut World,
253-
state: &mut SystemState<Query<Entity, With<TemporaryRenderEntity>>>,
259+
state: &mut SystemState<Query<Entity, With<TemporarySyncEntity<L>>>>,
254260
mut local: Local<Vec<Entity>>,
255261
) {
256262
let query = state.get(world).unwrap();

crates/bevy_sprite_render/src/text2d/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ pub fn extract_text2d_sprite(
8282
let Ok(text_background_color) = text_background_colors_query.get(section_entity) else {
8383
continue;
8484
};
85-
let render_entity = commands.spawn(TemporaryRenderEntity).id();
85+
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
8686
let offset = run.bounds.center();
8787
let transform = *global_transform
8888
* GlobalTransform::from_translation(top_left.extend(0.))
@@ -131,7 +131,7 @@ pub fn extract_text2d_sprite(
131131
.get(i + 1)
132132
.is_none_or(|info| info.atlas_info.texture != atlas_info.texture)
133133
{
134-
let render_entity = commands.spawn(TemporaryRenderEntity).id();
134+
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
135135
extracted_sprites.sprites.push(ExtractedSprite {
136136
main_entity,
137137
render_entity,
@@ -159,7 +159,7 @@ pub fn extract_text2d_sprite(
159159
};
160160

161161
if has_strikethrough {
162-
let render_entity = commands.spawn(TemporaryRenderEntity).id();
162+
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
163163
let offset = run.strikethrough_position();
164164
let transform =
165165
shadow_transform * GlobalTransform::from_translation(offset.extend(0.));
@@ -181,7 +181,7 @@ pub fn extract_text2d_sprite(
181181
}
182182

183183
if has_underline {
184-
let render_entity = commands.spawn(TemporaryRenderEntity).id();
184+
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
185185
let offset = run.underline_position();
186186
let transform =
187187
shadow_transform * GlobalTransform::from_translation(offset.extend(0.));
@@ -241,7 +241,7 @@ pub fn extract_text2d_sprite(
241241
if text_layout_info.glyphs.get(i + 1).is_none_or(|info| {
242242
info.span_index != current_span || info.atlas_info.texture != atlas_info.texture
243243
}) {
244-
let render_entity = commands.spawn(TemporaryRenderEntity).id();
244+
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
245245
extracted_sprites.sprites.push(ExtractedSprite {
246246
main_entity,
247247
render_entity,
@@ -277,7 +277,7 @@ pub fn extract_text2d_sprite(
277277
.map(|c| c.0)
278278
.unwrap_or(text_color.0)
279279
.to_linear();
280-
let render_entity = commands.spawn(TemporaryRenderEntity).id();
280+
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
281281
let offset = run.strikethrough_position();
282282
let transform = *global_transform
283283
* GlobalTransform::from_translation(top_left.extend(0.))
@@ -305,7 +305,7 @@ pub fn extract_text2d_sprite(
305305
.map(|c| c.0)
306306
.unwrap_or(text_color.0)
307307
.to_linear();
308-
let render_entity = commands.spawn(TemporaryRenderEntity).id();
308+
let render_entity = commands.spawn(TemporaryRenderEntity::default()).id();
309309
let offset = run.underline_position();
310310
let transform = *global_transform
311311
* GlobalTransform::from_translation(top_left.extend(0.))

crates/bevy_ui_render/src/box_shadow.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ pub fn extract_shadows(
281281
};
282282

283283
extracted_box_shadows.box_shadows.push(ExtractedBoxShadow {
284-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
284+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
285285
stack_index: uinode.stack_index,
286286
transform: Affine2::from(transform) * Affine2::from_translation(offset),
287287
color: drop_shadow.color.into(),

crates/bevy_ui_render/src/debug_overlay.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ pub fn extract_debug_overlay(
215215
}
216216

217217
extracted_uinodes.uinodes.push(ExtractedUiNode {
218-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
218+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
219219
// Keep all overlays above UI, and nudge each type slightly in Z so ordering is stable.
220220
z_order,
221221
clip: maybe_clip

crates/bevy_ui_render/src/gradient.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ pub fn extract_gradients(
418418
node_type,
419419
},
420420
main_entity: entity.into(),
421-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
421+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
422422
});
423423
continue;
424424
}
@@ -442,7 +442,7 @@ pub fn extract_gradients(
442442
);
443443

444444
extracted_gradients.items.push(ExtractedGradient {
445-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
445+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
446446
stack_index: uinode.stack_index,
447447
transform: transform.into(),
448448
stops_range: range_start..extracted_color_stops.0.len(),
@@ -492,7 +492,7 @@ pub fn extract_gradients(
492492
);
493493

494494
extracted_gradients.items.push(ExtractedGradient {
495-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
495+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
496496
stack_index: uinode.stack_index,
497497
transform: transform.into(),
498498
stops_range: range_start..extracted_color_stops.0.len(),
@@ -548,7 +548,7 @@ pub fn extract_gradients(
548548
);
549549

550550
extracted_gradients.items.push(ExtractedGradient {
551-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
551+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
552552
stack_index: uinode.stack_index,
553553
transform: transform.into(),
554554
stops_range: range_start..extracted_color_stops.0.len(),

crates/bevy_ui_render/src/lib.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ pub fn extract_uinode_background_colors(
420420

421421
if !background_color.is_fully_transparent() {
422422
extracted_uinodes.uinodes.push(ExtractedUiNode {
423-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
423+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
424424
z_order: uinode.stack_index as f32 + stack_z_offsets::BACKGROUND_COLOR,
425425
clip: clip.map(|clip| clip.clip),
426426
image: AssetId::default(),
@@ -447,7 +447,7 @@ pub fn extract_uinode_background_colors(
447447
&& !outer_color.0.is_fully_transparent()
448448
{
449449
extracted_uinodes.uinodes.push(ExtractedUiNode {
450-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
450+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
451451
z_order: uinode.stack_index as f32 + stack_z_offsets::BACKGROUND_COLOR,
452452
clip: clip.map(|clip| clip.clip),
453453
image: AssetId::default(),
@@ -536,7 +536,7 @@ pub fn extract_uinode_images(
536536

537537
extracted_uinodes.uinodes.push(ExtractedUiNode {
538538
z_order: uinode.stack_index as f32 + stack_z_offsets::IMAGE,
539-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
539+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
540540
clip: clip.map(|clip| clip.clip),
541541
image: image.image.id(),
542542
extracted_camera_entity,
@@ -653,7 +653,7 @@ pub fn extract_uinode_borders(
653653
node_type: NodeType::Border(border_flags),
654654
},
655655
main_entity: entity.into(),
656-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
656+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
657657
});
658658
}
659659
}
@@ -667,7 +667,7 @@ pub fn extract_uinode_borders(
667667
let outline_size = computed_node.outlined_node_size();
668668
extracted_uinodes.uinodes.push(ExtractedUiNode {
669669
z_order: computed_node.stack_index as f32 + stack_z_offsets::BORDER,
670-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
670+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
671671
image,
672672
clip: maybe_clip.map(|clip| clip.clip),
673673
extracted_camera_entity,
@@ -795,7 +795,7 @@ pub fn extract_ui_camera_view(
795795
},
796796
// Link to the main camera view.
797797
UiViewTarget(render_entity),
798-
TemporaryRenderEntity,
798+
TemporaryRenderEntity::default(),
799799
))
800800
.id();
801801

@@ -859,7 +859,7 @@ pub fn extract_viewport_nodes(
859859

860860
extracted_uinodes.uinodes.push(ExtractedUiNode {
861861
z_order: uinode.stack_index as f32 + stack_z_offsets::IMAGE,
862-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
862+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
863863
clip: clip.map(|clip| clip.clip),
864864
image: image.id(),
865865
extracted_camera_entity,
@@ -966,7 +966,7 @@ pub fn extract_text_sections(
966966
{
967967
extracted_uinodes.uinodes.push(ExtractedUiNode {
968968
z_order: uinode.stack_index as f32 + stack_z_offsets::TEXT,
969-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
969+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
970970
image: atlas_info.texture,
971971
clip: clip.map(|clip| clip.clip),
972972
extracted_camera_entity,
@@ -1053,7 +1053,7 @@ pub fn extract_text_shadows(
10531053
extracted_uinodes.uinodes.push(ExtractedUiNode {
10541054
transform: node_transform,
10551055
z_order: uinode.stack_index as f32 + stack_z_offsets::TEXT,
1056-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
1056+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
10571057
image: atlas_info.texture,
10581058
clip: clip.map(|clip| clip.clip),
10591059
extracted_camera_entity,
@@ -1076,7 +1076,7 @@ pub fn extract_text_shadows(
10761076
if has_strikethrough {
10771077
extracted_uinodes.uinodes.push(ExtractedUiNode {
10781078
z_order: uinode.stack_index as f32 + stack_z_offsets::TEXT,
1079-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
1079+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
10801080
clip: clip.map(|clip| clip.clip),
10811081
image: AssetId::default(),
10821082
extracted_camera_entity,
@@ -1102,7 +1102,7 @@ pub fn extract_text_shadows(
11021102
if has_underline {
11031103
extracted_uinodes.uinodes.push(ExtractedUiNode {
11041104
z_order: uinode.stack_index as f32 + stack_z_offsets::TEXT,
1105-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
1105+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
11061106
clip: clip.map(|clip| clip.clip),
11071107
image: AssetId::default(),
11081108
extracted_camera_entity,
@@ -1191,7 +1191,7 @@ pub fn extract_text_decorations(
11911191
if let Some(text_background_color) = text_background_color {
11921192
extracted_uinodes.uinodes.push(ExtractedUiNode {
11931193
z_order: uinode.stack_index as f32 + stack_z_offsets::TEXT,
1194-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
1194+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
11951195
clip: clip.map(|clip| clip.clip),
11961196
image: AssetId::default(),
11971197
extracted_camera_entity,
@@ -1221,7 +1221,7 @@ pub fn extract_text_decorations(
12211221

12221222
extracted_uinodes.uinodes.push(ExtractedUiNode {
12231223
z_order: uinode.stack_index as f32 + stack_z_offsets::TEXT_STRIKETHROUGH,
1224-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
1224+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
12251225
clip: clip.map(|clip| clip.clip),
12261226
image: AssetId::default(),
12271227
extracted_camera_entity,
@@ -1251,7 +1251,7 @@ pub fn extract_text_decorations(
12511251

12521252
extracted_uinodes.uinodes.push(ExtractedUiNode {
12531253
z_order: uinode.stack_index as f32 + stack_z_offsets::TEXT_STRIKETHROUGH,
1254-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
1254+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
12551255
clip: clip.map(|clip| clip.clip),
12561256
image: AssetId::default(),
12571257
extracted_camera_entity,

crates/bevy_ui_render/src/ui_material_pipeline.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ pub fn extract_ui_material_nodes<M: UiMaterial>(
359359
};
360360

361361
extracted_uinodes.uinodes.push(ExtractedUiMaterialNode {
362-
render_entity: commands.spawn(TemporaryRenderEntity).id(),
362+
render_entity: commands.spawn(TemporaryRenderEntity::default()).id(),
363363
stack_index: computed_node.stack_index,
364364
transform: transform.into(),
365365
material: handle.id(),

0 commit comments

Comments
 (0)