port a few more systems to functions and add some name clarity
This commit is contained in:
parent
913d016344
commit
5458c6daf4
@ -12,6 +12,7 @@ use bevy_app::{stage, AppBuilder, AppPlugin};
|
|||||||
use bevy_asset::AssetStorage;
|
use bevy_asset::AssetStorage;
|
||||||
use bevy_render::{render_graph::RenderGraph, shader};
|
use bevy_render::{render_graph::RenderGraph, shader};
|
||||||
use material::StandardMaterial;
|
use material::StandardMaterial;
|
||||||
|
use legion::prelude::IntoSystem;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct PbrPlugin;
|
pub struct PbrPlugin;
|
||||||
@ -23,7 +24,7 @@ impl AppPlugin for PbrPlugin {
|
|||||||
app.add_resource(AssetStorage::<StandardMaterial>::new())
|
app.add_resource(AssetStorage::<StandardMaterial>::new())
|
||||||
.add_system_to_stage(
|
.add_system_to_stage(
|
||||||
stage::POST_UPDATE,
|
stage::POST_UPDATE,
|
||||||
shader::asset_handle_shader_def_system::<StandardMaterial>(),
|
shader::asset_handle_shader_def_system::<StandardMaterial>.system(),
|
||||||
)
|
)
|
||||||
.add_system_to_stage(
|
.add_system_to_stage(
|
||||||
stage::POST_UPDATE,
|
stage::POST_UPDATE,
|
||||||
|
|||||||
@ -36,7 +36,7 @@ impl SystemNode for Camera2dNode {
|
|||||||
let mut tmp_buffer = None;
|
let mut tmp_buffer = None;
|
||||||
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
|
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
|
||||||
let mut command_queue = self.command_queue.clone();
|
let mut command_queue = self.command_queue.clone();
|
||||||
SystemBuilder::new("camera_resource_provider")
|
SystemBuilder::new("camera_2d_resource_provider")
|
||||||
.read_resource::<GlobalRenderResourceContext>()
|
.read_resource::<GlobalRenderResourceContext>()
|
||||||
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
|
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
|
||||||
.write_resource::<RenderResourceAssignments>()
|
.write_resource::<RenderResourceAssignments>()
|
||||||
|
|||||||
@ -432,7 +432,7 @@ where
|
|||||||
let mut staging_buffer_resource = None;
|
let mut staging_buffer_resource = None;
|
||||||
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
|
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
|
||||||
// TODO: maybe run "update" here
|
// TODO: maybe run "update" here
|
||||||
SystemBuilder::new("uniform_resource_provider")
|
SystemBuilder::new(format!("uniform_resource_provider::<{}>", std::any::type_name::<T>()))
|
||||||
.read_resource::<AssetStorage<Texture>>()
|
.read_resource::<AssetStorage<Texture>>()
|
||||||
.read_resource::<GlobalRenderResourceContext>()
|
.read_resource::<GlobalRenderResourceContext>()
|
||||||
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
|
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
|
||||||
|
|||||||
@ -20,14 +20,10 @@ pub trait AsUniforms: Send + Sync + 'static {
|
|||||||
fn get_vertex_buffer_descriptor() -> Option<&'static VertexBufferDescriptor>;
|
fn get_vertex_buffer_descriptor() -> Option<&'static VertexBufferDescriptor>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn shader_def_system<T>() -> Box<dyn Schedulable>
|
pub fn shader_def_system<T>(uniforms: Ref<T>, mut renderable: RefMut<Renderable>)
|
||||||
where
|
where
|
||||||
T: AsUniforms + Send + Sync + 'static,
|
T: AsUniforms + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
SystemBuilder::new(format!("shader_def::{}", std::any::type_name::<T>()))
|
|
||||||
.with_query(<(Read<T>, Write<Renderable>)>::query())
|
|
||||||
.build(|_, world, _, query| {
|
|
||||||
for (uniforms, mut renderable) in query.iter_mut(world) {
|
|
||||||
if let Some(shader_defs) = uniforms.get_shader_defs() {
|
if let Some(shader_defs) = uniforms.get_shader_defs() {
|
||||||
renderable
|
renderable
|
||||||
.render_resource_assignments
|
.render_resource_assignments
|
||||||
@ -37,26 +33,19 @@ where
|
|||||||
.extend(shader_defs)
|
.extend(shader_defs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn asset_handle_shader_def_system<T>() -> Box<dyn Schedulable>
|
pub fn asset_handle_shader_def_system<T>(
|
||||||
where
|
asset_storage: Resource<AssetStorage<T>>,
|
||||||
|
asset_handle: Ref<Handle<T>>,
|
||||||
|
mut renderable: RefMut<Renderable>,
|
||||||
|
) where
|
||||||
T: AsUniforms + Send + Sync + 'static,
|
T: AsUniforms + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
SystemBuilder::new(format!(
|
|
||||||
"asset_handle_shader_def::{}",
|
|
||||||
std::any::type_name::<T>()
|
|
||||||
))
|
|
||||||
.read_resource::<AssetStorage<T>>()
|
|
||||||
.with_query(<(Read<Handle<T>>, Write<Renderable>)>::query())
|
|
||||||
.build(|_, world, asset_storage, query| {
|
|
||||||
for (uniform_handle, mut renderable) in query.iter_mut(world) {
|
|
||||||
if !renderable.is_visible || renderable.is_instanced {
|
if !renderable.is_visible || renderable.is_instanced {
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let uniforms = asset_storage.get(&uniform_handle).unwrap();
|
let uniforms = asset_storage.get(&asset_handle).unwrap();
|
||||||
if let Some(shader_defs) = uniforms.get_shader_defs() {
|
if let Some(shader_defs) = uniforms.get_shader_defs() {
|
||||||
renderable
|
renderable
|
||||||
.render_resource_assignments
|
.render_resource_assignments
|
||||||
@ -66,8 +55,6 @@ where
|
|||||||
.extend(shader_defs)
|
.extend(shader_defs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn asset_handle_batcher_system<T>() -> Box<dyn Schedulable>
|
pub fn asset_handle_batcher_system<T>() -> Box<dyn Schedulable>
|
||||||
where
|
where
|
||||||
|
|||||||
@ -6,7 +6,7 @@ fn main() {
|
|||||||
.add_startup_system(setup)
|
.add_startup_system(setup)
|
||||||
.add_system_to_stage(
|
.add_system_to_stage(
|
||||||
stage::POST_UPDATE,
|
stage::POST_UPDATE,
|
||||||
shader::asset_handle_shader_def_system::<MyMaterial>(),
|
shader::asset_handle_shader_def_system::<MyMaterial>.system(),
|
||||||
)
|
)
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@ fn main() {
|
|||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_event::<MyEvent>()
|
.add_event::<MyEvent>()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup_system)
|
||||||
.add_system_init(built_system)
|
.add_system_init(built_system)
|
||||||
.add_system(simple_system.system())
|
.add_system(simple_system.system())
|
||||||
.add_system(closure_system())
|
.add_system(closure_system())
|
||||||
@ -22,7 +22,7 @@ struct X(usize);
|
|||||||
struct Y(usize);
|
struct Y(usize);
|
||||||
|
|
||||||
// add our resources and entities
|
// add our resources and entities
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup_system(world: &mut World, resources: &mut Resources) {
|
||||||
resources.insert(A(0));
|
resources.insert(A(0));
|
||||||
world.insert((), vec![(X(0), Y(1)), (X(2), Y(3))]);
|
world.insert((), vec![(X(0), Y(1)), (X(2), Y(3))]);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user