From 14d348febd549b944d03030bf748f7817a2bedac Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 6 Jan 2025 15:34:40 +0100 Subject: a --- client/src/scene_prepare.rs | 24 ++++++++++++++++++------ client/src/scene_render.rs | 14 +++++++++----- 2 files changed, 27 insertions(+), 11 deletions(-) (limited to 'client') diff --git a/client/src/scene_prepare.rs b/client/src/scene_prepare.rs index f069b5d..30c1742 100644 --- a/client/src/scene_prepare.rs +++ b/client/src/scene_prepare.rs @@ -3,16 +3,23 @@ use std::{ collections::{HashMap, HashSet}, sync::Arc, }; -use weareshared::{packets::Resource, resources::Part, tree::SceneTree}; +use weareshared::{ + packets::{ReadWrite, Resource}, + resources::Prefab, + tree::SceneTree, +}; use wgpu::Buffer; +use crate::download::Downloader; + pub struct ScenePreparer { index_buffers: HashMap>, vertex_buffers_x3: HashMap<[Resource; 1], Arc>, vertex_buffers_x2: HashMap<[Resource; 2], Arc>, vertex_buffers_x1: HashMap<[Resource; 3], Arc>, - parts: HashMap>, + parts: HashMap>, prefabs: HashMap, + prefabs_needed: HashSet, } pub struct RPrefab(pub Vec>); @@ -32,11 +39,16 @@ impl ScenePreparer { vertex_buffers_x1: HashMap::new(), parts: HashMap::new(), prefabs: HashMap::new(), + prefabs_needed: HashSet::new(), } } - fn update(&mut self, tree: &SceneTree) -> Result<()> { - let need = tree.objects.values().map(|o| o.res).collect::>(); - - for n in need {} + fn update(&mut self, dls: &mut Downloader) -> Result<()> { + for pres in &self.prefabs_needed { + if let Some(buf) = dls.try_get(*pres)? { + let prefab = Prefab::read(&mut buf.as_slice())?; + + } + } + Ok(()) } } diff --git a/client/src/scene_render.rs b/client/src/scene_render.rs index d19b083..f80f6c2 100644 --- a/client/src/scene_render.rs +++ b/client/src/scene_render.rs @@ -1,9 +1,9 @@ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use weareshared::{packets::Resource, tree::SceneTree}; use wgpu::{ - BindGroup, BindGroupDescriptor, BindGroupLayoutDescriptor, BlendState, Buffer, Color, - ColorTargetState, ColorWrites, CommandEncoder, Device, FragmentState, FrontFace, IndexFormat, - LoadOp, MultisampleState, Operations, PipelineCompilationOptions, PipelineLayoutDescriptor, + BindGroup, BindGroupDescriptor, BindGroupLayoutDescriptor, BlendState, Color, ColorTargetState, + ColorWrites, CommandEncoder, Device, FragmentState, FrontFace, IndexFormat, LoadOp, + MultisampleState, Operations, PipelineCompilationOptions, PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, RenderPassColorAttachment, RenderPassDescriptor, RenderPipeline, RenderPipelineDescriptor, StoreOp, TextureFormat, TextureView, VertexAttribute, VertexBufferLayout, VertexFormat, VertexState, VertexStepMode, @@ -16,6 +16,7 @@ pub struct ScenePipeline { pipeline: RenderPipeline, bind_group: BindGroup, prefabs: HashMap, + prefabs_needed: HashSet, } impl ScenePipeline { @@ -85,10 +86,11 @@ impl ScenePipeline { Self { bind_group, pipeline, + prefabs_needed: HashSet::new(), prefabs: HashMap::new(), } } - pub fn draw(&self, commands: &mut CommandEncoder, target: &TextureView, scene: &SceneTree) { + pub fn draw(&mut self, commands: &mut CommandEncoder, target: &TextureView, scene: &SceneTree) { let mut rpass = commands.begin_render_pass(&RenderPassDescriptor { label: None, color_attachments: &[Some(RenderPassColorAttachment { @@ -117,6 +119,8 @@ impl ScenePipeline { rpass.set_vertex_buffer(1, part.normals.slice(..)); rpass.draw_indexed(0..part.index_count, 0, 0..1); } + } else { + self.prefabs_needed.insert(ob.res); } } } -- cgit v1.2.3-70-g09d2