diff options
Diffstat (limited to 'client/src/renderer.rs')
-rw-r--r-- | client/src/renderer.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/client/src/renderer.rs b/client/src/renderer.rs index cc44446..35bc0ef 100644 --- a/client/src/renderer.rs +++ b/client/src/renderer.rs @@ -1,6 +1,9 @@ +use crate::part::{PartData, PartRenderer}; use anyhow::{Result, anyhow}; use log::info; use pollster::FutureExt; +use std::collections::HashMap; +use weareshared::{packets::Resource, tree::SceneTree}; use wgpu::{ Backends, BindGroup, BindGroupDescriptor, BindGroupLayoutDescriptor, BlendState, Color, ColorTargetState, ColorWrites, CommandEncoderDescriptor, Device, DeviceDescriptor, Features, @@ -20,6 +23,9 @@ pub struct Renderer<'a> { queue: Queue, device: Device, surface_configuration: SurfaceConfiguration, + + prefabs_loading: HashMap<Resource, Vec<PartData>>, + prefabs: HashMap<Resource, Vec<PartRenderer>>, } impl<'a> Renderer<'a> { pub fn new(window: &'a Window) -> Result<Self> { @@ -111,6 +117,8 @@ impl<'a> Renderer<'a> { device, queue, surface_configuration, + prefabs: HashMap::new(), + prefabs_loading: HashMap::new(), }) } @@ -121,7 +129,7 @@ impl<'a> Renderer<'a> { .configure(&self.device, &self.surface_configuration); } - pub fn draw(&mut self) -> Result<()> { + pub fn draw(&mut self, scene: &SceneTree) -> Result<()> { let target = self.surface.get_current_texture()?; let target_view = target .texture @@ -150,9 +158,19 @@ impl<'a> Renderer<'a> { rpass.draw(0..3, 0..1); } + for data in scene.objects.values() { + if let Some(ob) = self.prefabs.get(&data.res) { + for p in ob { + p.draw(&mut commands, &target_view); + } + } else { + let loading = self.prefabs_loading.entry(data.res).or_default(); + + } + } + let i = self.queue.submit(Some(commands.finish())); self.device.poll(MaintainBase::WaitForSubmissionIndex(i)); - target.present(); Ok(()) |