diff --git a/examples/simple_new_graph.rs b/examples/simple_new_graph.rs new file mode 100644 index 0000000000..2ccdfa404d --- /dev/null +++ b/examples/simple_new_graph.rs @@ -0,0 +1,64 @@ +use bevy::prelude::*; + +fn main() { + AppBuilder::new().add_defaults().setup_world(setup).run(); +} + +fn setup(world: &mut World) { + let cube = Mesh::load(MeshType::Cube); + let plane = Mesh::load(MeshType::Plane { size: 10.0 }); + + let (cube_handle, plane_handle) = { + let mut mesh_storage = world.resources.get_mut::>().unwrap(); + (mesh_storage.add(cube), mesh_storage.add(plane)) + }; + + world.build() + // plane + .build_archetype(MeshEntity { + mesh: plane_handle.clone(), + material: Material::new(Albedo::Color(math::vec4(0.1, 0.2, 0.1, 1.0))), + local_to_world: LocalToWorld::identity(), + translation: Translation::new(0.0, 0.0, 0.0), + }) + // cube + .build_archetype(MeshEntity { + mesh: cube_handle, + material: Material::new(Albedo::Color(math::vec4(0.5, 0.3, 0.3, 1.0))), + local_to_world: LocalToWorld::identity(), + translation: Translation::new(0.0, 0.0, 1.0), + }) + // light + .build_archetype(LightEntity { + light: Light { + color: wgpu::Color { + r: 0.8, + g: 0.8, + b: 0.5, + a: 1.0, + }, + fov: f32::to_radians(60.0), + depth: 0.1..50.0, + target_view: None, + }, + local_to_world: LocalToWorld::identity(), + translation: Translation::new(4.0, -4.0, 5.0), + rotation: Rotation::from_euler_angles(0.0, 0.0, 0.0), + }) + // camera + .build_archetype(CameraEntity { + camera: Camera::new(CameraType::Projection { + fov: std::f32::consts::PI / 4.0, + near: 1.0, + far: 1000.0, + aspect_ratio: 1.0, + }), + active_camera: ActiveCamera, + local_to_world: LocalToWorld(Mat4::look_at_rh( + Vec3::new(3.0, 8.0, 5.0), + Vec3::new(0.0, 0.0, 0.0), + Vec3::new(0.0, 0.0, 1.0), + )), + }) + .build(); +} diff --git a/src/app/app.rs b/src/app/app.rs index 2cb333233a..198c745aae 100644 --- a/src/app/app.rs +++ b/src/app/app.rs @@ -6,12 +6,13 @@ use winit::{ use legion::prelude::*; -use crate::{core::Time, render::*, app::AppBuilder}; +use crate::{core::Time, render, app::AppBuilder, render::render_graph_2::{Renderer, RenderGraph}}; pub struct App { pub universe: Universe, pub world: World, - pub legacy_render_graph: Option, + pub legacy_render_graph: Option, + pub renderer: Option>, pub schedule: Schedule, } @@ -20,13 +21,15 @@ impl App { universe: Universe, world: World, schedule: Schedule, - legacy_render_graph: Option, + legacy_render_graph: Option, + renderer: Option>, ) -> App { App { universe, world, schedule: schedule, legacy_render_graph: legacy_render_graph, + renderer: renderer, } } @@ -45,6 +48,12 @@ impl App { render_graph.render(&mut self.world); } + if let Some(ref mut renderer) = self.renderer { + if let Some(render_graph) = self.world.resources.get::() { + renderer.process_render_graph(&render_graph, &mut self.world); + } + } + if let Some(mut time) = self.world.resources.get_mut::