add resource providers to render_graph
This commit is contained in:
parent
2226292ce0
commit
7b89531268
@ -1,10 +1,11 @@
|
|||||||
use crate::render::render_graph_2::{PassDescriptor, PipelineDescriptor};
|
use crate::render::render_graph_2::{PassDescriptor, PipelineDescriptor, ResourceProvider};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
pub struct RenderGraph {
|
pub struct RenderGraph {
|
||||||
pub pipeline_descriptors: HashMap<String, PipelineDescriptor>,
|
pub pipeline_descriptors: HashMap<String, PipelineDescriptor>,
|
||||||
pub pass_descriptors: HashMap<String, PassDescriptor>,
|
pub pass_descriptors: HashMap<String, PassDescriptor>,
|
||||||
pub pass_pipelines: HashMap<String, Vec<String>>,
|
pub pass_pipelines: HashMap<String, Vec<String>>,
|
||||||
|
pub resource_providers: Vec<Box<dyn ResourceProvider>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for RenderGraph {
|
impl Default for RenderGraph {
|
||||||
@ -13,6 +14,7 @@ impl Default for RenderGraph {
|
|||||||
pipeline_descriptors: HashMap::new(),
|
pipeline_descriptors: HashMap::new(),
|
||||||
pass_descriptors: HashMap::new(),
|
pass_descriptors: HashMap::new(),
|
||||||
pass_pipelines: HashMap::new(),
|
pass_pipelines: HashMap::new(),
|
||||||
|
resource_providers: Vec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,6 +57,11 @@ impl RenderGraphBuilder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn add_resource_provider(mut self, resource_provider: Box<dyn ResourceProvider>) -> Self {
|
||||||
|
self.render_graph.resource_providers.push(resource_provider);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn build(self) -> RenderGraph {
|
pub fn build(self) -> RenderGraph {
|
||||||
self.render_graph
|
self.render_graph
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,19 +1,19 @@
|
|||||||
use crate::render::{render_graph_2::Renderer, ActiveCamera, Camera};
|
use crate::render::{render_graph_2::Renderer, ActiveCamera, Camera};
|
||||||
use bevy_transform::prelude::LocalToWorld;
|
use bevy_transform::prelude::LocalToWorld;
|
||||||
use legion::prelude::*;
|
use legion::prelude::*;
|
||||||
use zerocopy::AsBytes;
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
use zerocopy::AsBytes;
|
||||||
|
|
||||||
trait ResourceProvider {
|
pub trait ResourceProvider {
|
||||||
fn update(renderer: &mut dyn Renderer, world: &mut World);
|
fn update(&self, renderer: &mut dyn Renderer, world: &mut World);
|
||||||
fn resize(renderer: &mut dyn Renderer, world: &mut World, width: u32, height: u32);
|
fn resize(&self, renderer: &mut dyn Renderer, world: &mut World, width: u32, height: u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct CameraResourceProvider;
|
pub struct CameraResourceProvider;
|
||||||
|
|
||||||
impl ResourceProvider for CameraResourceProvider {
|
impl ResourceProvider for CameraResourceProvider {
|
||||||
fn update(renderer: &mut dyn Renderer, world: &mut World) {}
|
fn update(&self, renderer: &mut dyn Renderer, world: &mut World) {}
|
||||||
fn resize(renderer: &mut dyn Renderer, world: &mut World, width: u32, height: u32) {
|
fn resize(&self, renderer: &mut dyn Renderer, world: &mut World, width: u32, height: u32) {
|
||||||
for (mut camera, local_to_world, _) in
|
for (mut camera, local_to_world, _) in
|
||||||
<(Write<Camera>, Read<LocalToWorld>, Read<ActiveCamera>)>::query().iter_mut(world)
|
<(Write<Camera>, Read<LocalToWorld>, Read<ActiveCamera>)>::query().iter_mut(world)
|
||||||
{
|
{
|
||||||
@ -22,7 +22,8 @@ impl ResourceProvider for CameraResourceProvider {
|
|||||||
(camera.view_matrix * local_to_world.0).to_cols_array_2d();
|
(camera.view_matrix * local_to_world.0).to_cols_array_2d();
|
||||||
let matrix_size = mem::size_of::<[[f32; 4]; 4]>() as u64;
|
let matrix_size = mem::size_of::<[[f32; 4]; 4]>() as u64;
|
||||||
// TODO: use staging buffer?
|
// TODO: use staging buffer?
|
||||||
let buffer = renderer.create_buffer_with_data(camera_matrix.as_bytes(), wgpu::BufferUsage::UNIFORM);
|
let buffer = renderer
|
||||||
|
.create_buffer_with_data(camera_matrix.as_bytes(), wgpu::BufferUsage::UNIFORM);
|
||||||
// let temp_camera_buffer = render_graph
|
// let temp_camera_buffer = render_graph
|
||||||
// .device
|
// .device
|
||||||
// .create_buffer_with_data(camera_matrix.as_bytes(), wgpu::BufferUsage::COPY_SRC);
|
// .create_buffer_with_data(camera_matrix.as_bytes(), wgpu::BufferUsage::COPY_SRC);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user