bevy/crates/bevy_wgpu/src/lib.rs
2020-06-14 12:32:06 -07:00

43 lines
1.3 KiB
Rust

pub mod diagnostic;
pub mod renderer;
mod wgpu_render_pass;
mod wgpu_renderer;
mod wgpu_resources;
mod wgpu_type_converter;
pub use wgpu_render_pass::*;
pub use wgpu_renderer::*;
pub use wgpu_resources::*;
use bevy_app::{AppBuilder, AppPlugin};
use bevy_render::{renderer::RenderResourceContext, render_resource::{free_shared_buffers_system, SharedBuffers}};
use legion::prelude::*;
use renderer::WgpuRenderResourceContext;
#[derive(Default)]
pub struct WgpuPlugin;
impl AppPlugin for WgpuPlugin {
fn build(&self, app: &mut AppBuilder) {
let render_system = wgpu_render_system(app.resources_mut());
app.add_system_to_stage(bevy_render::stage::RENDER, render_system)
.add_system_to_stage(
bevy_render::stage::POST_RENDER,
free_shared_buffers_system.system(),
);
}
}
pub fn wgpu_render_system(resources: &mut Resources) -> impl FnMut(&mut World, &mut Resources) {
let mut wgpu_renderer = pollster::block_on(WgpuRenderer::new());
resources.insert::<Box<dyn RenderResourceContext>>(Box::new(WgpuRenderResourceContext::new(
wgpu_renderer.device.clone(),
)));
resources.insert(SharedBuffers::new(Box::new(
WgpuRenderResourceContext::new(wgpu_renderer.device.clone()),
)));
move |world, resources| {
wgpu_renderer.update(world, resources);
}
}