diff --git a/bevy_derive/src/lib.rs b/bevy_derive/src/lib.rs index 490327b094..bb760cda60 100644 --- a/bevy_derive/src/lib.rs +++ b/bevy_derive/src/lib.rs @@ -368,7 +368,7 @@ pub fn derive_uniforms(input: TokenStream) -> TokenStream { }) } -#[proc_macro_derive(RegisterAppPlugin)] +#[proc_macro_derive(DynamicAppPlugin)] pub fn derive_app_plugin(input: TokenStream) -> TokenStream { let ast = parse_macro_input!(input as DeriveInput); let struct_name = &ast.ident; diff --git a/examples/plugin_loading/example_plugin/.gitignore b/examples/dynamic_plugin_loading/example_plugin/.gitignore similarity index 100% rename from examples/plugin_loading/example_plugin/.gitignore rename to examples/dynamic_plugin_loading/example_plugin/.gitignore diff --git a/examples/plugin_loading/example_plugin/Cargo.toml b/examples/dynamic_plugin_loading/example_plugin/Cargo.toml similarity index 100% rename from examples/plugin_loading/example_plugin/Cargo.toml rename to examples/dynamic_plugin_loading/example_plugin/Cargo.toml diff --git a/examples/plugin_loading/example_plugin/src/lib.rs b/examples/dynamic_plugin_loading/example_plugin/src/lib.rs similarity index 55% rename from examples/plugin_loading/example_plugin/src/lib.rs rename to examples/dynamic_plugin_loading/example_plugin/src/lib.rs index 4ff4bb3fdd..fccddf2e61 100644 --- a/examples/plugin_loading/example_plugin/src/lib.rs +++ b/examples/dynamic_plugin_loading/example_plugin/src/lib.rs @@ -1,48 +1,34 @@ -use bevy::{prelude::*, plugin::AppPlugin}; +use bevy::prelude::*; -#[derive(RegisterAppPlugin)] +#[derive(DynamicAppPlugin)] pub struct ExamplePlugin; impl AppPlugin for ExamplePlugin { fn build(&self, app_builder: AppBuilder) -> AppBuilder { app_builder.setup(setup) } - - fn name(&self) -> &str { - "example" - } } pub fn setup(world: &mut World, resources: &mut Resources) { let mut mesh_storage = resources.get_mut::>().unwrap(); + let mut material_storage = resources + .get_mut::>() + .unwrap(); let cube_handle = mesh_storage.add(Mesh::load(MeshType::Cube)); - let plane_handle = mesh_storage.add(Mesh::load(MeshType::Plane { size: 10.0 })); + let cube_material_handle = material_storage.add(StandardMaterial { + albedo: Color::rgb(0.5, 0.4, 0.3), + ..Default::default() + }); world.build() - // plane - .add_entity(MeshEntity { - mesh: plane_handle, - material: StandardMaterial { - albedo: Color::rgb(0.1, 0.2, 0.1), - }, - ..Default::default() - }) // cube .add_entity(MeshEntity { mesh: cube_handle, - material: StandardMaterial { - albedo: Color::rgb(0.5, 0.4, 0.3), - }, - translation: Translation::new(0.0, 0.0, 1.0), + material: cube_material_handle, ..Default::default() }) // light .add_entity(LightEntity { - light: Light { - color: Color::rgb(0.8, 0.8, 0.5), - fov: f32::to_radians(60.0), - depth: 0.1..50.0, - }, translation: Translation::new(4.0, -4.0, 5.0), ..Default::default() }) diff --git a/examples/plugin_loading/main.rs b/examples/dynamic_plugin_loading/main.rs similarity index 65% rename from examples/plugin_loading/main.rs rename to examples/dynamic_plugin_loading/main.rs index 549f600860..282ad3a4b9 100644 --- a/examples/plugin_loading/main.rs +++ b/examples/dynamic_plugin_loading/main.rs @@ -5,7 +5,7 @@ fn main() { .add_default_plugins() .load_plugin(concat!( env!("CARGO_MANIFEST_DIR"), - "/examples/plugin_loading/example_plugin/target/release/libexample_plugin.so" + "/examples/dynamic_plugin_loading/example_plugin/target/release/libexample_plugin.so" )) .run(); } diff --git a/src/app/app.rs b/src/app/app.rs index 79be524c4a..8c78c71a00 100644 --- a/src/app/app.rs +++ b/src/app/app.rs @@ -27,6 +27,7 @@ impl App { } pub fn build() -> AppBuilder { + env_logger::init(); AppBuilder::new() } diff --git a/src/app/app_builder.rs b/src/app/app_builder.rs index eaf2d7db06..ac01efe36e 100644 --- a/src/app/app_builder.rs +++ b/src/app/app_builder.rs @@ -226,6 +226,7 @@ impl AppBuilder { pub fn load_plugin(self, path: &str) -> Self { let (_lib, plugin) = load_plugin(path); + log::debug!("loaded plugin: {}", plugin.name()); plugin.build(self) } @@ -233,6 +234,7 @@ impl AppBuilder { where T: AppPlugin, { + log::debug!("added plugin: {}", plugin.name()); plugin.build(self) } } diff --git a/src/app/plugin.rs b/src/app/plugin.rs index 96d23724ad..a1c973f4c8 100644 --- a/src/app/plugin.rs +++ b/src/app/plugin.rs @@ -4,8 +4,9 @@ use std::any::Any; pub trait AppPlugin: Any + Send + Sync { fn build(&self, app: AppBuilder) -> AppBuilder; - // TODO: consider removing "name" in favor of calling type_name::() from the host app - fn name(&self) -> &str; + fn name(&self) -> &str { + type_name_of_val(self) + } } pub type CreateAppPlugin = unsafe fn() -> *mut dyn AppPlugin; @@ -19,3 +20,7 @@ pub fn load_plugin(path: &str) -> (Library, Box) { (lib, plugin) } } + +fn type_name_of_val(_val: &T) -> &'static str { + std::any::type_name::() +} \ No newline at end of file diff --git a/src/app/schedule_runner.rs b/src/app/schedule_runner.rs index d3339117e1..479b37b169 100644 --- a/src/app/schedule_runner.rs +++ b/src/app/schedule_runner.rs @@ -36,7 +36,4 @@ impl AppPlugin for ScheduleRunnerPlugin { }, }) } - fn name(&self) -> &str { - "ScheduleRun" - } } diff --git a/src/core/core_plugin.rs b/src/core/core_plugin.rs deleted file mode 100644 index 2b147a443e..0000000000 --- a/src/core/core_plugin.rs +++ /dev/null @@ -1,20 +0,0 @@ -use super::Time; -use crate::app::{plugin::AppPlugin, AppBuilder}; -use bevy_transform::transform_system_bundle; - -#[derive(Default)] -pub struct CorePlugin; - -impl AppPlugin for CorePlugin { - fn build(&self, mut app: AppBuilder) -> AppBuilder { - for transform_system in transform_system_bundle::build(&mut app.world).drain(..) { - app = app.add_system(transform_system); - } - - app.add_resource(Time::new()) - } - - fn name(&self) -> &str { - "Core" - } -} diff --git a/src/core/mod.rs b/src/core/mod.rs index d6ff3eff8f..70050dc528 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1,9 +1,23 @@ pub mod bytes; -mod core_plugin; pub mod event; mod time; pub use bytes::*; -pub use core_plugin::*; pub use event::*; pub use time::*; + +use crate::app::{plugin::AppPlugin, AppBuilder}; +use bevy_transform::transform_system_bundle; + +#[derive(Default)] +pub struct CorePlugin; + +impl AppPlugin for CorePlugin { + fn build(&self, mut app: AppBuilder) -> AppBuilder { + for transform_system in transform_system_bundle::build(&mut app.world).drain(..) { + app = app.add_system(transform_system); + } + + app.add_resource(Time::new()) + } +} \ No newline at end of file diff --git a/src/diagnostic/diagnostic.rs b/src/diagnostic/diagnostic.rs new file mode 100644 index 0000000000..0c64ad7c4c --- /dev/null +++ b/src/diagnostic/diagnostic.rs @@ -0,0 +1,121 @@ +use std::{ + collections::{HashMap, VecDeque}, + time::{Duration, SystemTime}, +}; +use uuid::Uuid; + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)] +pub struct DiagnosticId(pub Uuid); + +#[derive(Debug)] +pub struct DiagnosticMeasurement { + pub time: SystemTime, + pub value: f64, +} + +#[derive(Debug)] +pub struct Diagnostic { + pub id: DiagnosticId, + pub name: String, + history: VecDeque, + sum: f64, + max_history_length: usize, +} + +impl Diagnostic { + pub fn add_measurement(&mut self, value: f64) { + let time = SystemTime::now(); + if self.history.len() == self.max_history_length { + if let Some(removed_diagnostic) = self.history.pop_back() { + self.sum -= removed_diagnostic.value; + } + } + + self.sum += value; + self.history + .push_front(DiagnosticMeasurement { time, value }); + } + + pub fn new(id: DiagnosticId, name: &str, max_history_length: usize) -> Diagnostic { + Diagnostic { + id, + name: name.to_string(), + history: VecDeque::with_capacity(max_history_length), + max_history_length, + sum: 0.0, + } + } + + pub fn value(&self) -> Option { + self.history.back().map(|measurement| measurement.value) + } + + pub fn sum(&self) -> f64 { + self.sum + } + + pub fn average(&self) -> Option { + if self.history.len() > 0 { + Some(self.sum / self.history.len() as f64) + } else { + None + } + } + + pub fn history_len(&self) -> usize { + self.history.len() + } + + pub fn duration(&self) -> Option { + if self.history.len() < 2 { + return None; + } + + if let Some(oldest) = self.history.back() { + if let Some(newest) = self.history.front() { + return newest.time.duration_since(oldest.time).ok(); + } + } + + return None; + } + + pub fn get_max_history_length(&self) -> usize { + self.max_history_length + } +} + +#[derive(Default)] +pub struct Diagnostics { + diagnostics: HashMap, +} + +impl Diagnostics { + pub fn add(&mut self, diagnostic: Diagnostic) { + self.diagnostics.insert(diagnostic.id, diagnostic); + } + + pub fn get(&self, id: DiagnosticId) -> Option<&Diagnostic> { + self.diagnostics.get(&id) + } + + pub fn get_mut(&mut self, id: DiagnosticId) -> Option<&mut Diagnostic> { + self.diagnostics.get_mut(&id) + } + + pub fn get_measurement(&self, id: DiagnosticId) -> Option<&DiagnosticMeasurement> { + self.diagnostics + .get(&id) + .and_then(|diagnostic| diagnostic.history.front()) + } + + pub fn add_measurement(&mut self, id: DiagnosticId, value: f64) { + if let Some(diagnostic) = self.diagnostics.get_mut(&id) { + diagnostic.add_measurement(value); + } + } + + pub fn iter(&self) -> impl Iterator { + self.diagnostics.values() + } +} diff --git a/src/diagnostic/diagnostic_plugin.rs b/src/diagnostic/diagnostic_plugin.rs deleted file mode 100644 index 8c2bcbd303..0000000000 --- a/src/diagnostic/diagnostic_plugin.rs +++ /dev/null @@ -1,42 +0,0 @@ -use super::{ - diagnostics::{frame_time_diagnostic_system, print_diagnostics_system}, - Diagnostics, -}; -use crate::app::{plugin::AppPlugin, AppBuilder}; -use std::time::Duration; - -pub struct DiagnosticsPlugin { - pub print_wait_duration: Duration, - pub print_diagnostics: bool, - pub add_defaults: bool, -} - -impl Default for DiagnosticsPlugin { - fn default() -> Self { - DiagnosticsPlugin { - print_wait_duration: Duration::from_secs_f64(1.0), - print_diagnostics: false, - add_defaults: true, - } - } -} - -impl AppPlugin for DiagnosticsPlugin { - fn build(&self, mut app: AppBuilder) -> AppBuilder { - app = app.add_resource(Diagnostics::default()); - if self.add_defaults { - let frame_time_diagnostic_system = - { frame_time_diagnostic_system(&mut app.resources, 10) }; - app = app.add_system(frame_time_diagnostic_system) - } - - if self.print_diagnostics { - app = app.add_system(print_diagnostics_system(self.print_wait_duration)); - } - - app - } - fn name(&self) -> &str { - "Diagnostics" - } -} diff --git a/src/diagnostic/mod.rs b/src/diagnostic/mod.rs index 42288f4804..19774d6cfa 100644 --- a/src/diagnostic/mod.rs +++ b/src/diagnostic/mod.rs @@ -1,125 +1,40 @@ -mod diagnostic_plugin; +mod diagnostic; pub mod diagnostics; -pub use diagnostic_plugin::*; +pub use diagnostic::*; -use std::{ - collections::{HashMap, VecDeque}, - time::{Duration, SystemTime}, -}; -use uuid::Uuid; +use crate::app::{plugin::AppPlugin, AppBuilder}; +use std::time::Duration; +use diagnostics::{print_diagnostics_system, frame_time_diagnostic_system}; -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)] -pub struct DiagnosticId(Uuid); - -#[derive(Debug)] -pub struct DiagnosticMeasurement { - pub time: SystemTime, - pub value: f64, +pub struct DiagnosticsPlugin { + pub print_wait_duration: Duration, + pub print_diagnostics: bool, + pub add_defaults: bool, } -#[derive(Debug)] -pub struct Diagnostic { - pub id: DiagnosticId, - pub name: String, - history: VecDeque, - sum: f64, - max_history_length: usize, -} - -impl Diagnostic { - pub fn add_measurement(&mut self, value: f64) { - let time = SystemTime::now(); - if self.history.len() == self.max_history_length { - if let Some(removed_diagnostic) = self.history.pop_back() { - self.sum -= removed_diagnostic.value; - } +impl Default for DiagnosticsPlugin { + fn default() -> Self { + DiagnosticsPlugin { + print_wait_duration: Duration::from_secs_f64(1.0), + print_diagnostics: false, + add_defaults: true, } - - self.sum += value; - self.history - .push_front(DiagnosticMeasurement { time, value }); - } - - pub fn new(id: DiagnosticId, name: &str, max_history_length: usize) -> Diagnostic { - Diagnostic { - id, - name: name.to_string(), - history: VecDeque::with_capacity(max_history_length), - max_history_length, - sum: 0.0, - } - } - - pub fn value(&self) -> Option { - self.history.back().map(|measurement| measurement.value) - } - - pub fn sum(&self) -> f64 { - self.sum - } - - pub fn average(&self) -> Option { - if self.history.len() > 0 { - Some(self.sum / self.history.len() as f64) - } else { - None - } - } - - pub fn history_len(&self) -> usize { - self.history.len() - } - - pub fn duration(&self) -> Option { - if self.history.len() < 2 { - return None; - } - - if let Some(oldest) = self.history.back() { - if let Some(newest) = self.history.front() { - return newest.time.duration_since(oldest.time).ok(); - } - } - - return None; - } - - pub fn get_max_history_length(&self) -> usize { - self.max_history_length } } -#[derive(Default)] -pub struct Diagnostics { - diagnostics: HashMap, -} - -impl Diagnostics { - pub fn add(&mut self, diagnostic: Diagnostic) { - self.diagnostics.insert(diagnostic.id, diagnostic); - } - - pub fn get(&self, id: DiagnosticId) -> Option<&Diagnostic> { - self.diagnostics.get(&id) - } - - pub fn get_mut(&mut self, id: DiagnosticId) -> Option<&mut Diagnostic> { - self.diagnostics.get_mut(&id) - } - - pub fn get_measurement(&self, id: DiagnosticId) -> Option<&DiagnosticMeasurement> { - self.diagnostics - .get(&id) - .and_then(|diagnostic| diagnostic.history.front()) - } - - pub fn add_measurement(&mut self, id: DiagnosticId, value: f64) { - if let Some(diagnostic) = self.diagnostics.get_mut(&id) { - diagnostic.add_measurement(value); +impl AppPlugin for DiagnosticsPlugin { + fn build(&self, mut app: AppBuilder) -> AppBuilder { + app = app.add_resource(Diagnostics::default()); + if self.add_defaults { + let frame_time_diagnostic_system = + { frame_time_diagnostic_system(&mut app.resources, 10) }; + app = app.add_system(frame_time_diagnostic_system) } - } - pub fn iter(&self) -> impl Iterator { - self.diagnostics.values() + if self.print_diagnostics { + app = app.add_system(print_diagnostics_system(self.print_wait_duration)); + } + + app } } diff --git a/src/input/mod.rs b/src/input/mod.rs index 78903d63e3..eb61d4c45a 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -14,8 +14,4 @@ impl AppPlugin for InputPlugin { .add_event::() .add_event::() } - - fn name(&self) -> &str { - "Input" - } } diff --git a/src/render/draw_target/draw_targets/assigned_batches_draw_target.rs b/src/render/draw_target/draw_targets/assigned_batches_draw_target.rs index a53bd41202..a71999fa6d 100644 --- a/src/render/draw_target/draw_targets/assigned_batches_draw_target.rs +++ b/src/render/draw_target/draw_targets/assigned_batches_draw_target.rs @@ -21,14 +21,14 @@ impl DrawTarget for AssignedBatchesDrawTarget { render_pass: &mut dyn RenderPass, pipeline_handle: Handle, ) { - log::debug!("drawing batches for pipeline {:?}", pipeline_handle); + log::trace!("drawing batches for pipeline {:?}", pipeline_handle); let asset_batches = resources.get::().unwrap(); let global_render_resource_assignments = resources.get::().unwrap(); render_pass.set_render_resources(&global_render_resource_assignments); for batch in asset_batches.get_batches() { let indices = render_pass.set_render_resources(&batch.render_resource_assignments); - log::debug!("drawing batch {:?}", batch.render_resource_assignments.id); + log::trace!("drawing batch {:?}", batch.render_resource_assignments.id); log::trace!("{:#?}", batch); for batched_entity in batch.entities.iter() { let renderable = world.get_component::(*batched_entity).unwrap(); @@ -75,7 +75,7 @@ impl DrawTarget for AssignedBatchesDrawTarget { let mut global_render_resource_assignments = resources.get_mut::().unwrap(); - log::debug!( + log::trace!( "setting up batch bind groups for pipeline: {:?} {:?}", pipeline_handle, pipeline_descriptor.name, @@ -84,7 +84,7 @@ impl DrawTarget for AssignedBatchesDrawTarget { renderer.setup_bind_groups(&mut global_render_resource_assignments, pipeline_descriptor); for batch in asset_batches.get_batches_mut() { - log::debug!( + log::trace!( "setting up batch bind groups: {:?}", batch.render_resource_assignments.id ); diff --git a/src/render/mod.rs b/src/render/mod.rs index 920a218939..4b0af4e29d 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -1,7 +1,6 @@ mod camera; pub mod mesh; pub mod render_graph; -mod render_plugin; pub mod shader; mod color; @@ -11,7 +10,6 @@ mod vertex; pub use camera::*; pub use color::*; pub use light::*; -pub use render_plugin::*; pub use renderable::*; pub use vertex::Vertex; @@ -23,3 +21,81 @@ pub mod render_resource; mod renderable; pub mod renderer; pub mod texture; + +use self::{ + draw_target::draw_targets::{ + AssignedBatchesDrawTarget, AssignedMeshesDrawTarget, MeshesDrawTarget, UiDrawTarget, + }, + pass::passes::ForwardPassBuilder, + pipeline::{ + pipelines::ForwardPipelineBuilder, PipelineCompiler, ShaderPipelineAssignments, + VertexBufferDescriptors, + }, + render_graph::RenderGraph, + render_resource::{ + build_entity_render_resource_assignments_system, + resource_providers::{ + Camera2dResourceProvider, CameraResourceProvider, LightResourceProvider, + MeshResourceProvider, UiResourceProvider, + }, + AssetBatchers, EntityRenderResourceAssignments, RenderResourceAssignments, + }, +}; + +use crate::{prelude::*, window::WindowResized}; + +#[derive(Default)] +pub struct RenderPlugin; + +impl RenderPlugin { + pub fn setup_render_graph_defaults(app: &mut AppBuilder) { + let mut pipelines = app + .resources + .get_mut::>() + .unwrap(); + let mut shaders = app.resources.get_mut::>().unwrap(); + let mut render_graph = app.resources.get_mut::().unwrap(); + render_graph + .build(&mut pipelines, &mut shaders) + .add_draw_target(MeshesDrawTarget::default()) + .add_draw_target(AssignedBatchesDrawTarget::default()) + .add_draw_target(AssignedMeshesDrawTarget::default()) + .add_draw_target(UiDrawTarget::default()) + .add_resource_provider(CameraResourceProvider::new( + app.resources.get_event_reader::(), + )) + .add_resource_provider(Camera2dResourceProvider::new( + app.resources.get_event_reader::(), + )) + .add_resource_provider(LightResourceProvider::new(10)) + .add_resource_provider(UiResourceProvider::new()) + .add_resource_provider(MeshResourceProvider::new()) + .add_resource_provider(UniformResourceProvider::::new(true)) + .add_resource_provider(UniformResourceProvider::::new(true)) + .add_forward_pass() + .add_forward_pipeline(); + } +} + +impl AppPlugin for RenderPlugin { + fn build(&self, mut app: AppBuilder) -> AppBuilder { + let mut asset_batchers = AssetBatchers::default(); + asset_batchers.batch_types2::(); + app = app + .add_system(build_entity_render_resource_assignments_system()) + .add_resource(RenderGraph::default()) + .add_resource(AssetStorage::::new()) + .add_resource(AssetStorage::::new()) + .add_resource(AssetStorage::::new()) + .add_resource(AssetStorage::::new()) + .add_resource(AssetStorage::::new()) + .add_resource(ShaderPipelineAssignments::new()) + .add_resource(VertexBufferDescriptors::default()) + .add_resource(PipelineCompiler::new()) + .add_resource(RenderResourceAssignments::default()) + .add_resource(EntityRenderResourceAssignments::default()) + .add_resource(asset_batchers); + RenderPlugin::setup_render_graph_defaults(&mut app); + app + } +} diff --git a/src/render/render_plugin.rs b/src/render/render_plugin.rs deleted file mode 100644 index c45c22b082..0000000000 --- a/src/render/render_plugin.rs +++ /dev/null @@ -1,77 +0,0 @@ -use super::{ - draw_target::draw_targets::{ - AssignedBatchesDrawTarget, AssignedMeshesDrawTarget, MeshesDrawTarget, UiDrawTarget, - }, - pass::passes::ForwardPassBuilder, - pipeline::{pipelines::ForwardPipelineBuilder, PipelineCompiler, ShaderPipelineAssignments, VertexBufferDescriptors}, - render_graph::RenderGraph, - render_resource::{ - build_entity_render_resource_assignments_system, - resource_providers::{ - Camera2dResourceProvider, CameraResourceProvider, LightResourceProvider, - MeshResourceProvider, UiResourceProvider, - }, - AssetBatchers, EntityRenderResourceAssignments, RenderResourceAssignments, - }, -}; -use crate::{prelude::*, window::WindowResized}; - -#[derive(Default)] -pub struct RenderPlugin; - -impl RenderPlugin { - pub fn setup_render_graph_defaults(app: &mut AppBuilder) { - let mut pipelines = app - .resources - .get_mut::>() - .unwrap(); - let mut shaders = app.resources.get_mut::>().unwrap(); - let mut render_graph = app.resources.get_mut::().unwrap(); - render_graph - .build(&mut pipelines, &mut shaders) - .add_draw_target(MeshesDrawTarget::default()) - .add_draw_target(AssignedBatchesDrawTarget::default()) - .add_draw_target(AssignedMeshesDrawTarget::default()) - .add_draw_target(UiDrawTarget::default()) - .add_resource_provider(CameraResourceProvider::new( - app.resources.get_event_reader::(), - )) - .add_resource_provider(Camera2dResourceProvider::new( - app.resources.get_event_reader::(), - )) - .add_resource_provider(LightResourceProvider::new(10)) - .add_resource_provider(UiResourceProvider::new()) - .add_resource_provider(MeshResourceProvider::new()) - .add_resource_provider(UniformResourceProvider::::new(true)) - .add_resource_provider(UniformResourceProvider::::new(true)) - .add_forward_pass() - .add_forward_pipeline(); - } -} - -impl AppPlugin for RenderPlugin { - fn build(&self, mut app: AppBuilder) -> AppBuilder { - let mut asset_batchers = AssetBatchers::default(); - asset_batchers.batch_types2::(); - app = app - .add_system(build_entity_render_resource_assignments_system()) - .add_resource(RenderGraph::default()) - .add_resource(AssetStorage::::new()) - .add_resource(AssetStorage::::new()) - .add_resource(AssetStorage::::new()) - .add_resource(AssetStorage::::new()) - .add_resource(AssetStorage::::new()) - .add_resource(ShaderPipelineAssignments::new()) - .add_resource(VertexBufferDescriptors::default()) - .add_resource(PipelineCompiler::new()) - .add_resource(RenderResourceAssignments::default()) - .add_resource(EntityRenderResourceAssignments::default()) - .add_resource(asset_batchers); - RenderPlugin::setup_render_graph_defaults(&mut app); - app - } - - fn name(&self) -> &str { - "Render" - } -} diff --git a/src/render/renderer/renderers/wgpu_renderer/mod.rs b/src/render/renderer/renderers/wgpu_renderer/mod.rs index 0fcc3cae64..5c4bd17e1c 100644 --- a/src/render/renderer/renderers/wgpu_renderer/mod.rs +++ b/src/render/renderer/renderers/wgpu_renderer/mod.rs @@ -24,9 +24,6 @@ impl AppPlugin for WgpuRendererPlugin { let render_system = wgpu_render_system(&app.resources); app.add_thread_local_to_stage(system_stage::RENDER, render_system) } - fn name(&self) -> &str { - "WgpuRenderer" - } } pub fn wgpu_render_system(resources: &Resources) -> impl FnMut(&mut World, &mut Resources) { diff --git a/src/render/renderer/renderers/wgpu_renderer/wgpu_resources.rs b/src/render/renderer/renderers/wgpu_renderer/wgpu_resources.rs index 476a866060..8bf14aabbf 100644 --- a/src/render/renderer/renderers/wgpu_renderer/wgpu_resources.rs +++ b/src/render/renderer/renderers/wgpu_renderer/wgpu_resources.rs @@ -60,7 +60,7 @@ impl WgpuResources { if let Some((render_resource_set_id, _indices)) = render_resource_assignments.get_render_resource_set_id(bind_group_descriptor.id) { - log::debug!( + log::trace!( "start creating bind group for RenderResourceSet {:?}", render_resource_set_id ); @@ -132,7 +132,7 @@ impl WgpuResources { .bind_groups .insert(*render_resource_set_id, bind_group); - log::debug!( + log::trace!( "created bind group for RenderResourceSet {:?}", render_resource_set_id ); diff --git a/src/ui/mod.rs b/src/ui/mod.rs index abc82918ec..23f76b21a9 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -17,7 +17,4 @@ impl AppPlugin for UiPlugin { fn build(&self, app: AppBuilder) -> AppBuilder { app.add_system(ui_update_system()) } - fn name(&self) -> &str { - "UI" - } } diff --git a/src/window/mod.rs b/src/window/mod.rs index 89815b27c0..6f92247404 100644 --- a/src/window/mod.rs +++ b/src/window/mod.rs @@ -1,59 +1,45 @@ mod events; -mod window_plugin; +mod window; mod windows; #[cfg(feature = "winit")] pub mod winit; pub use events::*; -pub use window_plugin::*; +pub use window::*; pub use windows::*; -use uuid::Uuid; +use crate::{ + app::{plugin::AppPlugin, AppBuilder}, + core::Events, +}; -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] -pub struct WindowId(Uuid); - -impl WindowId { - pub fn to_string(&self) -> String { - self.0.to_simple().to_string() - } +pub struct WindowPlugin { + pub primary_window: Option, } -pub struct Window { - pub id: WindowId, - pub width: u32, - pub height: u32, - pub title: String, - pub vsync: bool, -} - -impl Window { - pub fn new(window_descriptor: &WindowDescriptor) -> Self { - Window { - id: WindowId(Uuid::new_v4()), - height: window_descriptor.height, - width: window_descriptor.width, - title: window_descriptor.title.clone(), - vsync: window_descriptor.vsync, - } - } -} - -#[derive(Debug, Clone)] -pub struct WindowDescriptor { - pub width: u32, - pub height: u32, - pub title: String, - pub vsync: bool, -} - -impl Default for WindowDescriptor { +impl Default for WindowPlugin { fn default() -> Self { - WindowDescriptor { - title: "bevy".to_string(), - width: 1280, - height: 720, - vsync: true, + WindowPlugin { + primary_window: Some(WindowDescriptor::default()), } } } + +impl AppPlugin for WindowPlugin { + fn build(&self, mut app: AppBuilder) -> AppBuilder { + app = app + .add_event::() + .add_event::() + .add_event::() + .add_resource(Windows::default()); + + if let Some(ref primary_window_descriptor) = self.primary_window { + let mut create_window_event = app.resources.get_mut::>().unwrap(); + create_window_event.send(CreateWindow { + descriptor: primary_window_descriptor.clone(), + }); + } + + app + } +} \ No newline at end of file diff --git a/src/window/window.rs b/src/window/window.rs new file mode 100644 index 0000000000..252104783c --- /dev/null +++ b/src/window/window.rs @@ -0,0 +1,49 @@ +use uuid::Uuid; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] +pub struct WindowId(Uuid); + +impl WindowId { + pub fn to_string(&self) -> String { + self.0.to_simple().to_string() + } +} + +pub struct Window { + pub id: WindowId, + pub width: u32, + pub height: u32, + pub title: String, + pub vsync: bool, +} + +impl Window { + pub fn new(window_descriptor: &WindowDescriptor) -> Self { + Window { + id: WindowId(Uuid::new_v4()), + height: window_descriptor.height, + width: window_descriptor.width, + title: window_descriptor.title.clone(), + vsync: window_descriptor.vsync, + } + } +} + +#[derive(Debug, Clone)] +pub struct WindowDescriptor { + pub width: u32, + pub height: u32, + pub title: String, + pub vsync: bool, +} + +impl Default for WindowDescriptor { + fn default() -> Self { + WindowDescriptor { + title: "bevy".to_string(), + width: 1280, + height: 720, + vsync: true, + } + } +} \ No newline at end of file diff --git a/src/window/window_plugin.rs b/src/window/window_plugin.rs deleted file mode 100644 index 8bf3173603..0000000000 --- a/src/window/window_plugin.rs +++ /dev/null @@ -1,40 +0,0 @@ -use super::{CreateWindow, WindowCreated, WindowDescriptor, WindowResized, Windows}; -use crate::{ - app::{plugin::AppPlugin, AppBuilder}, - core::Events, -}; - -pub struct WindowPlugin { - pub primary_window: Option, -} - -impl Default for WindowPlugin { - fn default() -> Self { - WindowPlugin { - primary_window: Some(WindowDescriptor::default()), - } - } -} - -impl AppPlugin for WindowPlugin { - fn build(&self, mut app: AppBuilder) -> AppBuilder { - app = app - .add_event::() - .add_event::() - .add_event::() - .add_resource(Windows::default()); - - if let Some(ref primary_window_descriptor) = self.primary_window { - let mut create_window_event = app.resources.get_mut::>().unwrap(); - create_window_event.send(CreateWindow { - descriptor: primary_window_descriptor.clone(), - }); - } - - app - } - - fn name(&self) -> &str { - "Window" - } -} diff --git a/src/window/winit/mod.rs b/src/window/winit/mod.rs index 5071d070b1..46297150d8 100644 --- a/src/window/winit/mod.rs +++ b/src/window/winit/mod.rs @@ -29,14 +29,9 @@ impl AppPlugin for WinitPlugin { .add_resource(WinitWindows::default()) .set_runner(winit_runner) } - - fn name(&self) -> &str { - "Winit" - } } pub fn winit_runner(mut app: App) { - env_logger::init(); let event_loop = EventLoop::new(); let mut create_window_event_reader = app.resources.get_event_reader::();