diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-05 23:24:57 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-05 23:24:57 +0100 |
commit | 1c0c8f788c8125c90a097e5241b5e8fe2518d1d2 (patch) | |
tree | b5542fe00a472b5d5a8bcdd17fb3a34b75ad1dd0 /client/src/renderer.rs | |
parent | e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c (diff) | |
download | weareserver-1c0c8f788c8125c90a097e5241b5e8fe2518d1d2.tar weareserver-1c0c8f788c8125c90a097e5241b5e8fe2518d1d2.tar.bz2 weareserver-1c0c8f788c8125c90a097e5241b5e8fe2518d1d2.tar.zst |
a
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(()) |