Skip to content

Commit 06f832a

Browse files
make sub_app return an &App and add sub_app_mut() -> &mut App (#3309)
It's sometimes useful to have a reference to an app a sub app at the same time, which is only possible with an immutable reference.
1 parent 79d36e7 commit 06f832a

File tree

17 files changed

+37
-20
lines changed

17 files changed

+37
-20
lines changed

crates/bevy_app/src/app.rs

+20-3
Original file line numberDiff line numberDiff line change
@@ -854,21 +854,38 @@ impl App {
854854
}
855855

856856
/// Retrieves a "sub app" stored inside this [App]. This will panic if the sub app does not exist.
857-
pub fn sub_app(&mut self, label: impl AppLabel) -> &mut App {
858-
match self.get_sub_app(label) {
857+
pub fn sub_app_mut(&mut self, label: impl AppLabel) -> &mut App {
858+
match self.get_sub_app_mut(label) {
859859
Ok(app) => app,
860860
Err(label) => panic!("Sub-App with label '{:?}' does not exist", label),
861861
}
862862
}
863863

864864
/// Retrieves a "sub app" inside this [App] with the given label, if it exists. Otherwise returns
865865
/// an [Err] containing the given label.
866-
pub fn get_sub_app(&mut self, label: impl AppLabel) -> Result<&mut App, impl AppLabel> {
866+
pub fn get_sub_app_mut(&mut self, label: impl AppLabel) -> Result<&mut App, impl AppLabel> {
867867
self.sub_apps
868868
.get_mut((&label) as &dyn AppLabel)
869869
.map(|sub_app| &mut sub_app.app)
870870
.ok_or(label)
871871
}
872+
873+
/// Retrieves a "sub app" stored inside this [App]. This will panic if the sub app does not exist.
874+
pub fn sub_app(&self, label: impl AppLabel) -> &App {
875+
match self.get_sub_app(label) {
876+
Ok(app) => app,
877+
Err(label) => panic!("Sub-App with label '{:?}' does not exist", label),
878+
}
879+
}
880+
881+
/// Retrieves a "sub app" inside this [App] with the given label, if it exists. Otherwise returns
882+
/// an [Err] containing the given label.
883+
pub fn get_sub_app(&self, label: impl AppLabel) -> Result<&App, impl AppLabel> {
884+
self.sub_apps
885+
.get((&label) as &dyn AppLabel)
886+
.map(|sub_app| &sub_app.app)
887+
.ok_or(label)
888+
}
872889
}
873890

874891
fn run_once(mut app: App) {

crates/bevy_core_pipeline/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ impl Plugin for CorePipelinePlugin {
8888
fn build(&self, app: &mut App) {
8989
app.init_resource::<ClearColor>();
9090

91-
let render_app = app.sub_app(RenderApp);
91+
let render_app = app.sub_app_mut(RenderApp);
9292
render_app
9393
.init_resource::<DrawFunctions<Transparent2d>>()
9494
.init_resource::<DrawFunctions<Opaque3d>>()

crates/bevy_pbr/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ impl Plugin for PbrPlugin {
135135
},
136136
);
137137

138-
let render_app = app.sub_app(RenderApp);
138+
let render_app = app.sub_app_mut(RenderApp);
139139
render_app
140140
.add_system_to_stage(
141141
RenderStage::Extract,

crates/bevy_pbr/src/render/mesh.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ impl Plugin for MeshRenderPlugin {
5757

5858
app.add_plugin(UniformComponentPlugin::<MeshUniform>::default());
5959

60-
app.sub_app(RenderApp)
60+
app.sub_app_mut(RenderApp)
6161
.init_resource::<MeshPipeline>()
6262
.add_system_to_stage(RenderStage::Extract, extract_meshes)
6363
.add_system_to_stage(RenderStage::Queue, queue_mesh_bind_group)

crates/bevy_pbr/src/wireframe.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ impl Plugin for WireframePlugin {
3131

3232
app.init_resource::<WireframeConfig>();
3333

34-
app.sub_app(RenderApp)
34+
app.sub_app_mut(RenderApp)
3535
.add_render_command::<Opaque3d, DrawWireframes>()
3636
.init_resource::<WireframePipeline>()
3737
.init_resource::<SpecializedPipelines<WireframePipeline>>()

crates/bevy_render/src/camera/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl Plugin for CameraPlugin {
5353
CoreStage::PostUpdate,
5454
crate::camera::camera_system::<PerspectiveProjection>,
5555
);
56-
app.sub_app(RenderApp)
56+
app.sub_app_mut(RenderApp)
5757
.init_resource::<ExtractedCameraNames>()
5858
.add_system_to_stage(RenderStage::Extract, extract_cameras);
5959
}

crates/bevy_render/src/render_asset.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl<A: RenderAsset> Default for RenderAssetPlugin<A> {
5454

5555
impl<A: RenderAsset> Plugin for RenderAssetPlugin<A> {
5656
fn build(&self, app: &mut App) {
57-
let render_app = app.sub_app(RenderApp);
57+
let render_app = app.sub_app_mut(RenderApp);
5858
let prepare_asset_system = PrepareAssetSystem::<A>::system(&mut render_app.world);
5959
render_app
6060
.init_resource::<ExtractedAssets<A>>()

crates/bevy_render/src/render_component.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ impl<C> Default for UniformComponentPlugin<C> {
6262

6363
impl<C: Component + AsStd140 + Clone> Plugin for UniformComponentPlugin<C> {
6464
fn build(&self, app: &mut App) {
65-
app.sub_app(RenderApp)
65+
app.sub_app_mut(RenderApp)
6666
.insert_resource(ComponentUniforms::<C>::default())
6767
.add_system_to_stage(
6868
RenderStage::Prepare,
@@ -144,7 +144,7 @@ where
144144
{
145145
fn build(&self, app: &mut App) {
146146
let system = ExtractComponentSystem::<C>::system(&mut app.world);
147-
let render_app = app.sub_app(RenderApp);
147+
let render_app = app.sub_app_mut(RenderApp);
148148
render_app.add_system_to_stage(RenderStage::Extract, system);
149149
}
150150
}

crates/bevy_render/src/texture/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ impl Plugin for ImagePlugin {
3535
.unwrap()
3636
.set_untracked(DEFAULT_IMAGE_HANDLE, Image::default());
3737

38-
app.sub_app(RenderApp)
38+
app.sub_app_mut(RenderApp)
3939
.init_resource::<TextureCache>()
4040
.add_system_to_stage(RenderStage::Cleanup, update_texture_cache_system);
4141
}

crates/bevy_render/src/view/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ impl Plugin for ViewPlugin {
2626
fn build(&self, app: &mut App) {
2727
app.init_resource::<Msaa>().add_plugin(VisibilityPlugin);
2828

29-
app.sub_app(RenderApp)
29+
app.sub_app_mut(RenderApp)
3030
.init_resource::<ViewUniforms>()
3131
.add_system_to_stage(RenderStage::Extract, extract_msaa)
3232
.add_system_to_stage(RenderStage::Prepare, prepare_view_uniforms)

crates/bevy_render/src/view/window.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub enum WindowSystem {
2424

2525
impl Plugin for WindowRenderPlugin {
2626
fn build(&self, app: &mut App) {
27-
app.sub_app(RenderApp)
27+
app.sub_app_mut(RenderApp)
2828
.init_resource::<ExtractedWindows>()
2929
.init_resource::<WindowSurfaces>()
3030
.init_resource::<NonSendMarker>()

crates/bevy_sprite/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl Plugin for SpritePlugin {
5454
let sprite_shader = Shader::from_wgsl(include_str!("render/sprite.wgsl"));
5555
shaders.set_untracked(SPRITE_SHADER_HANDLE, sprite_shader);
5656
app.add_asset::<TextureAtlas>().register_type::<Sprite>();
57-
let render_app = app.sub_app(RenderApp);
57+
let render_app = app.sub_app_mut(RenderApp);
5858
render_app
5959
.init_resource::<ImageBindGroups>()
6060
.init_resource::<SpritePipeline>()

crates/bevy_text/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl Plugin for TextPlugin {
4949
.insert_resource(DefaultTextPipeline::default())
5050
.add_system_to_stage(CoreStage::PostUpdate, text2d_system);
5151

52-
let render_app = app.sub_app(RenderApp);
52+
let render_app = app.sub_app_mut(RenderApp);
5353
render_app.add_system_to_stage(
5454
RenderStage::Extract,
5555
extract_text2d_sprite.after(SpriteSystem::ExtractSprite),

crates/bevy_ui/src/render/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ pub fn build_ui_render(app: &mut App) {
6666
let mut active_cameras = app.world.get_resource_mut::<ActiveCameras>().unwrap();
6767
active_cameras.add(CAMERA_UI);
6868

69-
let render_app = app.sub_app(RenderApp);
69+
let render_app = app.sub_app_mut(RenderApp);
7070
render_app
7171
.init_resource::<UiPipeline>()
7272
.init_resource::<SpecializedPipelines<UiPipeline>>()

examples/shader/shader_defs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub struct IsRedPlugin;
2323
impl Plugin for IsRedPlugin {
2424
fn build(&self, app: &mut App) {
2525
app.add_plugin(ExtractComponentPlugin::<IsRed>::default());
26-
app.sub_app(RenderApp)
26+
app.sub_app_mut(RenderApp)
2727
.add_render_command::<Transparent3d, DrawIsRed>()
2828
.init_resource::<IsRedPipeline>()
2929
.init_resource::<SpecializedPipelines<IsRedPipeline>>()

examples/shader/shader_material.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ impl Plugin for CustomMaterialPlugin {
110110
app.add_asset::<CustomMaterial>()
111111
.add_plugin(ExtractComponentPlugin::<Handle<CustomMaterial>>::default())
112112
.add_plugin(RenderAssetPlugin::<CustomMaterial>::default());
113-
app.sub_app(RenderApp)
113+
app.sub_app_mut(RenderApp)
114114
.add_render_command::<Transparent3d, DrawCustom>()
115115
.init_resource::<CustomPipeline>()
116116
.init_resource::<SpecializedPipelines<CustomPipeline>>()

examples/window/multiple_windows.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fn main() {
1818
.add_startup_system(setup)
1919
.add_startup_system(create_new_window);
2020

21-
let render_app = app.sub_app(RenderApp);
21+
let render_app = app.sub_app_mut(RenderApp);
2222
render_app.add_system_to_stage(RenderStage::Extract, extract_secondary_camera_phases);
2323
let mut graph = render_app.world.get_resource_mut::<RenderGraph>().unwrap();
2424
graph.add_node(SECONDARY_PASS_DRIVER, SecondaryCameraDriver);

0 commit comments

Comments
 (0)