diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/src/scene_prepare.rs | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/client/src/scene_prepare.rs b/client/src/scene_prepare.rs index 6d50035..e58e77a 100644 --- a/client/src/scene_prepare.rs +++ b/client/src/scene_prepare.rs @@ -11,7 +11,7 @@ use std::{ use weareshared::{ Affine3A, packets::{ReadWrite, Resource}, - resources::{Part, Prefab}, + resources::{MeshPart, Prefab}, }; use wgpu::{ BindGroup, BindGroupDescriptor, BindGroupEntry, BindGroupLayout, BindingResource, Buffer, @@ -55,12 +55,12 @@ pub struct ScenePreparer { index_buffers: DemandMap<Resource, (Arc<Buffer>, u32)>, vertex_buffers: DemandMap<Resource, (Arc<Buffer>, u32)>, placeholder_vertex_buffers: DemandMap<(u32, bool), Arc<Buffer>>, - parts: DemandMap<Resource, Arc<RPart>>, + mesh_parts: DemandMap<Resource, Arc<RMeshPart>>, pub prefabs: DemandMap<Resource, Arc<RPrefab>>, } -pub struct RPrefab(pub Vec<(Affine3A, Arc<RPart>)>); -pub struct RPart { +pub struct RPrefab(pub Vec<(Affine3A, Arc<RMeshPart>)>); +pub struct RMeshPart { pub index_count: u32, pub index: Arc<Buffer>, pub position: [Arc<Buffer>; 3], @@ -75,7 +75,7 @@ impl ScenePreparer { texture_bgl, index_buffers: DemandMap::new(), vertex_buffers: DemandMap::new(), - parts: DemandMap::new(), + mesh_parts: DemandMap::new(), prefabs: DemandMap::new(), textures: DemandMap::new(), placeholder_vertex_buffers: DemandMap::new(), @@ -89,12 +89,12 @@ impl ScenePreparer { if let Some(buf) = dls.try_get(pres)? { let prefab = Prefab::read(&mut buf.as_slice()).context("parsing prefab")?; let mut rprefab = RPrefab(Vec::new()); - for (aff, partres) in &prefab.0 { - if let Some(part) = self.parts.try_get(*partres) { + for (aff, partres) in &prefab.mesh { + if let Some(part) = self.mesh_parts.try_get(*partres) { rprefab.0.push((*aff, part.clone())); } } - if rprefab.0.len() == prefab.0.len() { + if rprefab.0.len() == prefab.mesh.len() { self.prefabs.insert(pres, Arc::new(rprefab)); debug!("prefab created ({pres})"); } @@ -169,9 +169,10 @@ impl ScenePreparer { ); self.placeholder_textures.insert(pres, tex_bg); } - for pres in self.parts.needed.clone() { + for pres in self.mesh_parts.needed.clone() { if let Some(buf) = dls.try_get(pres)? { - let part = Part::read(&mut buf.as_slice()).context("parsing part")?; + let part = MeshPart::read(&mut buf.as_slice()).context("parsing part")?; + if let (Some(indexres), Some(positionres)) = (part.index, part.va_position) { let Some((index, index_count)) = self.index_buffers.try_get(indexres) else { self.index_buffers.needed.insert(indexres); @@ -238,9 +239,9 @@ impl ScenePreparer { && texture.is_some() { debug!("part created ({pres})"); - self.parts.insert( + self.mesh_parts.insert( pres, - Arc::new(RPart { + Arc::new(RMeshPart { index_count, index, texcoord: texcoord.try_into().unwrap(), |