make window its own plugin and rename add_defaults to add_default_plugins

This commit is contained in:
Carter Anderson 2020-04-04 12:40:32 -07:00
parent f6f8ba2cb6
commit 5cbf606ef7
35 changed files with 100 additions and 71 deletions

View File

@ -1,7 +1,7 @@
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {
App::build().add_defaults().setup(setup).run(); App::build().add_default_plugins().setup(setup).run();
} }
#[derive(Uniforms, Default)] #[derive(Uniforms, Default)]

View File

@ -1,5 +1,5 @@
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {
App::build().add_defaults().run(); App::build().add_default_plugins().run();
} }

View File

@ -1,7 +1,7 @@
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {
App::build().add_defaults().setup(setup).run(); App::build().add_default_plugins().setup(setup).run();
} }
#[allow(dead_code)] #[allow(dead_code)]

View File

@ -6,7 +6,7 @@ struct MyEvent {
fn main() { fn main() {
App::build() App::build()
.add_defaults() .add_default_plugins()
.add_event::<MyEvent>() .add_event::<MyEvent>()
.add_system(event_trigger_system()) .add_system(event_trigger_system())
.build_system(event_listener_system) .build_system(event_listener_system)

View File

@ -3,7 +3,7 @@ use rand::{rngs::StdRng, Rng, SeedableRng};
fn main() { fn main() {
App::build() App::build()
.add_defaults() .add_default_plugins()
.add_system(build_move_system()) .add_system(build_move_system())
.add_plugin(DiagnosticsPlugin { .add_plugin(DiagnosticsPlugin {
print_diagnostics: true, print_diagnostics: true,

View File

@ -2,5 +2,5 @@ use bevy::{asset, prelude::*};
fn main() { fn main() {
asset::load_gltf("examples/assets/Box.gltf").unwrap(); asset::load_gltf("examples/assets/Box.gltf").unwrap();
App::build().add_defaults().run(); App::build().add_default_plugins().run();
} }

View File

@ -1,18 +1,17 @@
use bevy::prelude::*; use bevy::{prelude::*, window::CreateWindow};
use bevy::core::window::CreateWindow;
fn main() { fn main() {
App::build().add_defaults().setup(setup).run(); App::build().add_default_plugins().setup(setup).run();
} }
fn setup(_world: &mut World, resources: &mut Resources) { fn setup(_world: &mut World, resources: &mut Resources) {
let mut create_window_events = resources.get_mut::<Event<CreateWindow>>().unwrap(); let mut create_window_events = resources.get_mut::<Events<CreateWindow>>().unwrap();
create_window_events.send(CreateWindow { create_window_events.send(CreateWindow {
descriptor: WindowDescriptor { descriptor: WindowDescriptor {
width: 800, width: 800,
height: 600, height: 600,
vsync: false, vsync: false,
title: "another window".to_string(), title: "another window".to_string(),
} },
}); });
} }

View File

@ -4,7 +4,7 @@ struct Rotator;
fn main() { fn main() {
App::build() App::build()
.add_defaults() .add_default_plugins()
.setup(setup) .setup(setup)
.add_system(build_rotator_system()) .add_system(build_rotator_system())
.run(); .run();

View File

@ -2,7 +2,7 @@ use bevy::prelude::*;
fn main() { fn main() {
App::build() App::build()
.add_defaults() .add_default_plugins()
.load_plugin(concat!( .load_plugin(concat!(
env!("CARGO_MANIFEST_DIR"), env!("CARGO_MANIFEST_DIR"),
"/examples/plugin_loading/example_plugin/target/release/libexample_plugin.so" "/examples/plugin_loading/example_plugin/target/release/libexample_plugin.so"

View File

@ -1,7 +1,7 @@
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {
App::build().add_defaults().setup(setup).run(); App::build().add_default_plugins().setup(setup).run();
} }
fn setup(world: &mut World, resources: &mut Resources) { fn setup(world: &mut World, resources: &mut Resources) {

View File

@ -2,7 +2,7 @@ use bevy::{prelude::*, serialization::*};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use type_uuid::TypeUuid; use type_uuid::TypeUuid;
fn main() { fn main() {
let app = App::build().add_defaults().setup(setup).build(); let app = App::build().add_default_plugins().setup(setup).build();
let comp_registrations = [ComponentRegistration::of::<Test>()]; let comp_registrations = [ComponentRegistration::of::<Test>()];

View File

@ -1,7 +1,7 @@
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {
App::build().add_defaults().add_setup_system(setup_system()).run(); App::build().add_default_plugins().add_setup_system(setup_system()).run();
} }
pub fn setup_system() -> Box<dyn Schedulable> { pub fn setup_system() -> Box<dyn Schedulable> {

View File

@ -3,7 +3,7 @@ use rand::{rngs::StdRng, Rng, SeedableRng};
fn main() { fn main() {
App::build() App::build()
.add_defaults() .add_default_plugins()
.add_system(build_move_system()) .add_system(build_move_system())
.add_plugin(DiagnosticsPlugin { .add_plugin(DiagnosticsPlugin {
print_diagnostics: true, print_diagnostics: true,

View File

@ -1,7 +1,7 @@
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {
App::build().add_defaults().setup(setup).run(); App::build().add_default_plugins().setup(setup).run();
} }
fn setup(world: &mut World, resources: &mut Resources) { fn setup(world: &mut World, resources: &mut Resources) {

View File

@ -1,7 +1,7 @@
use bevy::prelude::*; use bevy::prelude::*;
fn main() { fn main() {
App::build().add_defaults().setup(setup).run(); App::build().add_default_plugins().setup(setup).run();
} }
fn setup(world: &mut World, resources: &mut Resources) { fn setup(world: &mut World, resources: &mut Resources) {

View File

@ -2,7 +2,7 @@ use bevy::prelude::*;
fn main() { fn main() {
App::build() App::build()
.add_defaults() .add_default_plugins()
.setup(setup) .setup(setup)
.add_system(build_move_system()) .add_system(build_move_system())
.add_plugin(DiagnosticsPlugin { .add_plugin(DiagnosticsPlugin {

View File

@ -5,6 +5,7 @@ use crate::{
}, },
core::{CorePlugin, Events}, core::{CorePlugin, Events},
legion::prelude::{Resources, Runnable, Schedulable, Schedule, Universe, World}, legion::prelude::{Resources, Runnable, Schedulable, Schedule, Universe, World},
window::WindowPlugin,
render::RenderPlugin, render::RenderPlugin,
ui::UiPlugin, ui::UiPlugin,
}; };
@ -178,7 +179,10 @@ impl AppBuilder {
T: Send + Sync + 'static, T: Send + Sync + 'static,
{ {
self.add_resource(Events::<T>::default()) self.add_resource(Events::<T>::default())
.add_system_to_stage(system_stage::EVENT_UPDATE, Events::<T>::build_update_system()) .add_system_to_stage(
system_stage::EVENT_UPDATE,
Events::<T>::build_update_system(),
)
} }
pub fn add_resource<T>(mut self, resource: T) -> Self pub fn add_resource<T>(mut self, resource: T) -> Self
@ -194,15 +198,16 @@ impl AppBuilder {
self self
} }
pub fn add_defaults(mut self) -> Self { pub fn add_default_plugins(mut self) -> Self {
self = self self = self
.add_plugin(CorePlugin::default()) .add_plugin(CorePlugin::default())
.add_plugin(WindowPlugin::default())
.add_plugin(RenderPlugin::default()) .add_plugin(RenderPlugin::default())
.add_plugin(UiPlugin::default()); .add_plugin(UiPlugin::default());
#[cfg(feature = "winit")] #[cfg(feature = "winit")]
{ {
self = self.add_plugin(crate::core::window::winit::WinitPlugin::default()) self = self.add_plugin(crate::window::winit::WinitPlugin::default())
} }
#[cfg(not(feature = "winit"))] #[cfg(not(feature = "winit"))]
{ {

View File

@ -1,18 +1,9 @@
use super::{CreateWindow, Time, WindowCreated, WindowResized, Windows, Events, WindowDescriptor};
use crate::app::{plugin::AppPlugin, AppBuilder}; use crate::app::{plugin::AppPlugin, AppBuilder};
use bevy_transform::transform_system_bundle; use bevy_transform::transform_system_bundle;
use super::Time;
pub struct CorePlugin { #[derive(Default)]
pub primary_window: Option<WindowDescriptor>, pub struct CorePlugin;
}
impl Default for CorePlugin {
fn default() -> Self {
CorePlugin {
primary_window: Some(WindowDescriptor::default()),
}
}
}
impl AppPlugin for CorePlugin { impl AppPlugin for CorePlugin {
fn build(&self, mut app: AppBuilder) -> AppBuilder { fn build(&self, mut app: AppBuilder) -> AppBuilder {
@ -20,20 +11,8 @@ impl AppPlugin for CorePlugin {
app = app.add_system(transform_system); app = app.add_system(transform_system);
} }
app = app.add_event::<WindowResized>()
.add_event::<CreateWindow>()
.add_event::<WindowCreated>()
.add_resource(Windows::default())
.add_resource(Time::new());
if let Some(ref primary_window_descriptor) = self.primary_window {
let mut create_window_event = app.resources.get_mut::<Events<CreateWindow>>().unwrap();
create_window_event.send(CreateWindow {
descriptor: primary_window_descriptor.clone(),
});
}
app app
.add_resource(Time::new())
} }
fn name(&self) -> &'static str { fn name(&self) -> &'static str {

View File

@ -1,11 +1,9 @@
pub mod bytes; pub mod bytes;
mod time; mod time;
pub mod window;
mod core_plugin; mod core_plugin;
pub mod event; pub mod event;
pub use bytes::*; pub use bytes::*;
pub use time::*; pub use time::*;
pub use window::*;
pub use core_plugin::*; pub use core_plugin::*;
pub use event::*; pub use event::*;

View File

@ -8,6 +8,7 @@ pub mod prelude;
pub mod render; pub mod render;
pub mod serialization; pub mod serialization;
pub mod ui; pub mod ui;
pub mod window;
pub use bevy_transform as transform; pub use bevy_transform as transform;
pub use glam as math; pub use glam as math;

View File

@ -1,7 +1,8 @@
pub use crate::{ pub use crate::{
app::{plugin::AppPlugin, App, AppBuilder}, app::{plugin::AppPlugin, App, AppBuilder},
asset::{Asset, AssetStorage, Handle}, asset::{Asset, AssetStorage, Handle},
core::{Events, EventReader, GetEventReader, Time, Window, Windows, WindowDescriptor}, window::{Window, Windows, WindowDescriptor, WindowPlugin},
core::{Events, EventReader, GetEventReader, Time},
diagnostic::DiagnosticsPlugin, diagnostic::DiagnosticsPlugin,
ecs, ecs,
ecs::{ ecs::{

View File

@ -14,7 +14,7 @@ use super::{
AssetBatchers, EntityRenderResourceAssignments, RenderResourceAssignments, AssetBatchers, EntityRenderResourceAssignments, RenderResourceAssignments,
}, },
}; };
use crate::{core::WindowResized, prelude::*}; use crate::{prelude::*, window::WindowResized};
#[derive(Default)] #[derive(Default)]
pub struct RenderPlugin; pub struct RenderPlugin;

View File

@ -1,5 +1,5 @@
use crate::{ use crate::{
core::WindowResized, window::WindowResized,
prelude::*, prelude::*,
render::{ render::{
render_resource::{ render_resource::{

View File

@ -1,5 +1,5 @@
use crate::{ use crate::{
core::WindowResized, window::WindowResized,
prelude::*, prelude::*,
render::{ render::{
render_resource::{ render_resource::{

View File

@ -1,5 +1,5 @@
use crate::{ use crate::{
core::Windows, window::Windows,
prelude::World, prelude::World,
render::{ render::{
render_resource::{RenderResourceAssignments, ResourceProvider}, render_resource::{RenderResourceAssignments, ResourceProvider},

View File

@ -9,8 +9,8 @@ pub use wgpu_resources::*;
use crate::{ use crate::{
app::{plugin::AppPlugin, system_stage, AppBuilder}, app::{plugin::AppPlugin, system_stage, AppBuilder},
core::{Events, WindowCreated, WindowResized}, core::Events,
render::renderer::Renderer, render::renderer::Renderer, window::{WindowCreated, WindowResized},
}; };
use legion::prelude::*; use legion::prelude::*;

View File

@ -1,9 +1,7 @@
use super::{wgpu_type_converter::OwnedWgpuVertexBufferDescriptor, WgpuRenderPass, WgpuResources}; use super::{wgpu_type_converter::OwnedWgpuVertexBufferDescriptor, WgpuRenderPass, WgpuResources};
use crate::{ use crate::{
asset::{AssetStorage, Handle}, asset::{AssetStorage, Handle},
core::{ core::{EventReader, Events},
winit::WinitWindows, Events, EventReader, Window, WindowCreated, WindowResized, Windows,
},
legion::prelude::*, legion::prelude::*,
render::{ render::{
pass::{ pass::{
@ -20,6 +18,7 @@ use crate::{
shader::Shader, shader::Shader,
texture::{SamplerDescriptor, TextureDescriptor}, texture::{SamplerDescriptor, TextureDescriptor},
}, },
window::{winit::WinitWindows, Window, WindowCreated, WindowResized, Windows},
}; };
use std::{ use std::{
cell::RefCell, cell::RefCell,
@ -270,10 +269,12 @@ impl WgpuRenderer {
} }
_ => match global_render_resource_assignments.get(name) { _ => match global_render_resource_assignments.get(name) {
Some(resource) => wgpu_resources.textures.get(&resource).unwrap(), Some(resource) => wgpu_resources.textures.get(&resource).unwrap(),
None => if let Some(swap_chain_output) = swap_chain_outputs.get(name) { None => {
&swap_chain_output.view if let Some(swap_chain_output) = swap_chain_outputs.get(name) {
} else { &swap_chain_output.view
panic!("Color attachment {} does not exist", name); } else {
panic!("Color attachment {} does not exist", name);
}
} }
}, },
} }

View File

@ -10,7 +10,8 @@ use crate::{
}, },
renderer::Renderer, renderer::Renderer,
texture::{SamplerDescriptor, TextureDescriptor}, texture::{SamplerDescriptor, TextureDescriptor},
}, core::WindowId, },
window::WindowId,
}; };
use std::collections::HashMap; use std::collections::HashMap;
@ -59,7 +60,10 @@ impl WgpuResources {
if let Some((render_resource_set_id, _indices)) = if let Some((render_resource_set_id, _indices)) =
render_resource_assignments.get_render_resource_set_id(bind_group_descriptor.id) render_resource_assignments.get_render_resource_set_id(bind_group_descriptor.id)
{ {
log::debug!("start creating bind group for RenderResourceSet {:?}", render_resource_set_id); log::debug!(
"start creating bind group for RenderResourceSet {:?}",
render_resource_set_id
);
let bindings = bind_group_descriptor let bindings = bind_group_descriptor
.bindings .bindings
.iter() .iter()
@ -128,7 +132,10 @@ impl WgpuResources {
.bind_groups .bind_groups
.insert(*render_resource_set_id, bind_group); .insert(*render_resource_set_id, bind_group);
log::debug!("created bind group for RenderResourceSet {:?}", render_resource_set_id); log::debug!(
"created bind group for RenderResourceSet {:?}",
render_resource_set_id
);
log::trace!("{:#?}", bind_group_descriptor); log::trace!("{:#?}", bind_group_descriptor);
return true; return true;
} else { } else {

View File

@ -1,5 +1,4 @@
use crate::{ use crate::{
core::Window,
prelude::Color, prelude::Color,
render::{ render::{
pass::{LoadOp, StoreOp}, pass::{LoadOp, StoreOp},
@ -19,6 +18,7 @@ use crate::{
TextureDescriptor, TextureDimension, TextureFormat, TextureUsage, TextureViewDimension, TextureDescriptor, TextureDimension, TextureFormat, TextureUsage, TextureViewDimension,
}, },
}, },
window::Window,
}; };
impl From<VertexFormat> for wgpu::VertexFormat { impl From<VertexFormat> for wgpu::VertexFormat {

View File

@ -2,9 +2,11 @@
pub mod winit; pub mod winit;
mod events; mod events;
mod windows; mod windows;
mod window_plugin;
pub use events::*; pub use events::*;
pub use windows::*; pub use windows::*;
pub use window_plugin::*;
use uuid::Uuid; use uuid::Uuid;

View File

@ -0,0 +1,36 @@
use super::{CreateWindow, WindowCreated, WindowResized, Windows, WindowDescriptor};
use crate::{core::Events, app::{plugin::AppPlugin, AppBuilder}};
pub struct WindowPlugin {
pub primary_window: Option<WindowDescriptor>,
}
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::<WindowResized>()
.add_event::<CreateWindow>()
.add_event::<WindowCreated>()
.add_resource(Windows::default());
if let Some(ref primary_window_descriptor) = self.primary_window {
let mut create_window_event = app.resources.get_mut::<Events<CreateWindow>>().unwrap();
create_window_event.send(CreateWindow {
descriptor: primary_window_descriptor.clone(),
});
}
app
}
fn name(&self) -> &'static str {
"Window"
}
}

View File

@ -1,4 +1,4 @@
use crate::{core::WindowId, prelude::*}; use crate::{window::WindowId, prelude::*};
use std::collections::HashMap; use std::collections::HashMap;
#[derive(Default)] #[derive(Default)]