summaryrefslogtreecommitdiff
path: root/client/src/renderer.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-05 23:24:57 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-05 23:24:57 +0100
commit1c0c8f788c8125c90a097e5241b5e8fe2518d1d2 (patch)
treeb5542fe00a472b5d5a8bcdd17fb3a34b75ad1dd0 /client/src/renderer.rs
parente15b39b2a9cf028b12cbe98f56674e58c5a6bd4c (diff)
downloadweareserver-1c0c8f788c8125c90a097e5241b5e8fe2518d1d2.tar
weareserver-1c0c8f788c8125c90a097e5241b5e8fe2518d1d2.tar.bz2
weareserver-1c0c8f788c8125c90a097e5241b5e8fe2518d1d2.tar.zst
a
Diffstat (limited to 'client/src/renderer.rs')
-rw-r--r--client/src/renderer.rs22
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(())