summaryrefslogtreecommitdiff
path: root/client/src/scene_render.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-06 20:04:29 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-06 20:04:29 +0100
commit44ef37bca0aa633f8c59d849946faf2319c5446b (patch)
treedbfcb7104dc6621cb766148ab2289d32d5f261e0 /client/src/scene_render.rs
parent6af8b165fe8cbab35721a8797ca85cda454a5ff4 (diff)
downloadweareserver-44ef37bca0aa633f8c59d849946faf2319c5446b.tar
weareserver-44ef37bca0aa633f8c59d849946faf2319c5446b.tar.bz2
weareserver-44ef37bca0aa633f8c59d849946faf2319c5446b.tar.zst
a
Diffstat (limited to 'client/src/scene_render.rs')
-rw-r--r--client/src/scene_render.rs27
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);
}
}
}