The update_frame_count system should be placed in CorePlugin (#6676)
				
					
				
			# Objective Latest Release, "bevy 0.9" move the FrameCount updater into RenderPlugin, it leads to user who only run app with Core/Minimal Plugin cannot get the right number of FrameCount, it always return 0. As for use cases like a server app, we don't want to add render dependencies to the app. More detail in #6656 ## Solution - Move the `update_frame_count` into CorePlugin
This commit is contained in:
		
							parent
							
								
									bdd5cee92a
								
							
						
					
					
						commit
						ed2ea0d417
					
				@ -6,7 +6,7 @@ mod name;
 | 
				
			|||||||
mod serde;
 | 
					mod serde;
 | 
				
			||||||
mod task_pool_options;
 | 
					mod task_pool_options;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use bevy_ecs::system::Resource;
 | 
					use bevy_ecs::system::{ResMut, Resource};
 | 
				
			||||||
pub use bytemuck::{bytes_of, cast_slice, Pod, Zeroable};
 | 
					pub use bytemuck::{bytes_of, cast_slice, Pod, Zeroable};
 | 
				
			||||||
pub use name::*;
 | 
					pub use name::*;
 | 
				
			||||||
pub use task_pool_options::*;
 | 
					pub use task_pool_options::*;
 | 
				
			||||||
@ -53,6 +53,7 @@ impl Plugin for CorePlugin {
 | 
				
			|||||||
        register_math_types(app);
 | 
					        register_math_types(app);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        app.init_resource::<FrameCount>();
 | 
					        app.init_resource::<FrameCount>();
 | 
				
			||||||
 | 
					        app.add_system(update_frame_count);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -108,6 +109,10 @@ fn register_math_types(app: &mut App) {
 | 
				
			|||||||
#[derive(Default, Resource, Clone, Copy)]
 | 
					#[derive(Default, Resource, Clone, Copy)]
 | 
				
			||||||
pub struct FrameCount(pub u32);
 | 
					pub struct FrameCount(pub u32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn update_frame_count(mut frame_count: ResMut<FrameCount>) {
 | 
				
			||||||
 | 
					    frame_count.0 = frame_count.0.wrapping_add(1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
mod tests {
 | 
					mod tests {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
@ -145,4 +150,14 @@ mod tests {
 | 
				
			|||||||
        compute_rx.try_recv().unwrap();
 | 
					        compute_rx.try_recv().unwrap();
 | 
				
			||||||
        io_rx.try_recv().unwrap();
 | 
					        io_rx.try_recv().unwrap();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn frame_counter_update() {
 | 
				
			||||||
 | 
					        let mut app = App::new();
 | 
				
			||||||
 | 
					        app.add_plugin(CorePlugin::default());
 | 
				
			||||||
 | 
					        app.update();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let frame_count = app.world.resource::<FrameCount>();
 | 
				
			||||||
 | 
					        assert_eq!(1, frame_count.0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -18,12 +18,17 @@ impl Plugin for GlobalsPlugin {
 | 
				
			|||||||
            render_app
 | 
					            render_app
 | 
				
			||||||
                .init_resource::<GlobalsBuffer>()
 | 
					                .init_resource::<GlobalsBuffer>()
 | 
				
			||||||
                .init_resource::<Time>()
 | 
					                .init_resource::<Time>()
 | 
				
			||||||
 | 
					                .add_system_to_stage(RenderStage::Extract, extract_frame_count)
 | 
				
			||||||
                .add_system_to_stage(RenderStage::Extract, extract_time)
 | 
					                .add_system_to_stage(RenderStage::Extract, extract_time)
 | 
				
			||||||
                .add_system_to_stage(RenderStage::Prepare, prepare_globals_buffer);
 | 
					                .add_system_to_stage(RenderStage::Prepare, prepare_globals_buffer);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn extract_frame_count(mut commands: Commands, frame_count: Extract<Res<FrameCount>>) {
 | 
				
			||||||
 | 
					    commands.insert_resource(**frame_count);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn extract_time(mut commands: Commands, time: Extract<Res<Time>>) {
 | 
					fn extract_time(mut commands: Commands, time: Extract<Res<Time>>) {
 | 
				
			||||||
    commands.insert_resource(time.clone());
 | 
					    commands.insert_resource(time.clone());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,6 @@ mod spatial_bundle;
 | 
				
			|||||||
pub mod texture;
 | 
					pub mod texture;
 | 
				
			||||||
pub mod view;
 | 
					pub mod view;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use bevy_core::FrameCount;
 | 
					 | 
				
			||||||
use bevy_hierarchy::ValidParentCheckPlugin;
 | 
					use bevy_hierarchy::ValidParentCheckPlugin;
 | 
				
			||||||
pub use extract_param::Extract;
 | 
					pub use extract_param::Extract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -333,8 +332,7 @@ impl Plugin for RenderPlugin {
 | 
				
			|||||||
            .add_plugin(CameraPlugin)
 | 
					            .add_plugin(CameraPlugin)
 | 
				
			||||||
            .add_plugin(ViewPlugin)
 | 
					            .add_plugin(ViewPlugin)
 | 
				
			||||||
            .add_plugin(MeshPlugin)
 | 
					            .add_plugin(MeshPlugin)
 | 
				
			||||||
            .add_plugin(GlobalsPlugin)
 | 
					            .add_plugin(GlobalsPlugin);
 | 
				
			||||||
            .add_plugin(FrameCountPlugin);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -368,22 +366,3 @@ fn extract(app_world: &mut World, render_app: &mut App) {
 | 
				
			|||||||
    // see <https://github.com/bevyengine/bevy/issues/5082>
 | 
					    // see <https://github.com/bevyengine/bevy/issues/5082>
 | 
				
			||||||
    extract.apply_buffers(running_world);
 | 
					    extract.apply_buffers(running_world);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
pub struct FrameCountPlugin;
 | 
					 | 
				
			||||||
impl Plugin for FrameCountPlugin {
 | 
					 | 
				
			||||||
    fn build(&self, app: &mut bevy_app::App) {
 | 
					 | 
				
			||||||
        app.add_system(update_frame_count);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if let Ok(render_app) = app.get_sub_app_mut(RenderApp) {
 | 
					 | 
				
			||||||
            render_app.add_system_to_stage(RenderStage::Extract, extract_frame_count);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fn update_frame_count(mut frame_count: ResMut<FrameCount>) {
 | 
					 | 
				
			||||||
    frame_count.0 = frame_count.0.wrapping_add(1);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fn extract_frame_count(mut commands: Commands, frame_count: Extract<Res<FrameCount>>) {
 | 
					 | 
				
			||||||
    commands.insert_resource(**frame_count);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user