diff options
Diffstat (limited to 'client/src/scene_render.rs')
-rw-r--r-- | client/src/scene_render.rs | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/client/src/scene_render.rs b/client/src/scene_render.rs index 68d0c49..366b956 100644 --- a/client/src/scene_render.rs +++ b/client/src/scene_render.rs @@ -15,8 +15,6 @@ use crate::scene_prepare::RPrefab; pub struct ScenePipeline { pipeline: RenderPipeline, bind_group: BindGroup, - prefabs: HashMap<Resource, RPrefab>, - prefabs_needed: HashSet<Resource>, } impl ScenePipeline { @@ -86,11 +84,16 @@ impl ScenePipeline { Self { bind_group, pipeline, - prefabs_needed: HashSet::new(), - prefabs: HashMap::new(), } } - pub fn draw(&mut self, commands: &mut CommandEncoder, target: &TextureView, scene: &SceneTree) { + pub fn draw( + &mut self, + commands: &mut CommandEncoder, + target: &TextureView, + scene: &SceneTree, + prefabs: &HashMap<Resource, RPrefab>, + prefabs_needed: &mut HashSet<Resource>, + ) { let mut rpass = commands.begin_render_pass(&RenderPassDescriptor { label: None, color_attachments: &[Some(RenderPassColorAttachment { @@ -112,17 +115,23 @@ impl ScenePipeline { rpass.set_pipeline(&self.pipeline); for ob in scene.objects.values() { - if let Some(prefab) = self.prefabs.get(&ob.res) { + if let Some(prefab) = prefabs.get(&ob.res) { for (affine, part) in &prefab.0 { let affine = affine.to_cols_array().map(|v| v.to_le_bytes()); rpass.set_push_constants(ShaderStages::VERTEX, 0, affine.as_flattened()); rpass.set_index_buffer(part.index.slice(..), IndexFormat::Uint16); - rpass.set_vertex_buffer(0, part.positions.slice(..)); - rpass.set_vertex_buffer(1, part.normals.slice(..)); + rpass.set_vertex_buffer(0, part.position[0].slice(..)); + rpass.set_vertex_buffer(1, part.position[1].slice(..)); + rpass.set_vertex_buffer(2, part.position[2].slice(..)); + rpass.set_vertex_buffer(3, part.normal[0].slice(..)); + rpass.set_vertex_buffer(4, part.normal[1].slice(..)); + rpass.set_vertex_buffer(5, part.normal[2].slice(..)); + rpass.set_vertex_buffer(6, part.texcoord[0].slice(..)); + rpass.set_vertex_buffer(7, part.texcoord[1].slice(..)); rpass.draw_indexed(0..part.index_count, 0, 0..1); } } else { - self.prefabs_needed.insert(ob.res); + prefabs_needed.insert(ob.res); } } } |