From d400ff66f840e997e04463e7883a2c2a0205cd7a Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Tue, 16 Dec 2025 10:13:54 -0800 Subject: [PATCH] generate topological indices --- Cargo.lock | 1 + engine/graphics/Cargo.toml | 1 + engine/graphics/src/graphics.rs | 49 ++++++++++++++++++++++----------- engine/physics/src/lib.rs | 2 +- engine/physics/src/model.rs | 15 ++++++++++ 5 files changed, 51 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fc929f47..d90cb456 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3892,6 +3892,7 @@ dependencies = [ "glam", "id", "strafesnet_common", + "strafesnet_physics", "strafesnet_session", "strafesnet_settings", "wgpu", diff --git a/engine/graphics/Cargo.toml b/engine/graphics/Cargo.toml index be200d05..8ed94e6e 100644 --- a/engine/graphics/Cargo.toml +++ b/engine/graphics/Cargo.toml @@ -9,6 +9,7 @@ ddsfile = "0.5.1" glam = "0.30.0" id = { version = "0.1.0", registry = "strafesnet" } strafesnet_common = { path = "../../lib/common", registry = "strafesnet" } +strafesnet_physics = { path = "../physics", registry = "strafesnet" } strafesnet_session = { path = "../session", registry = "strafesnet" } strafesnet_settings = { path = "../settings", registry = "strafesnet" } wgpu = "28.0.0" diff --git a/engine/graphics/src/graphics.rs b/engine/graphics/src/graphics.rs index b6c5eb85..3d164eb2 100644 --- a/engine/graphics/src/graphics.rs +++ b/engine/graphics/src/graphics.rs @@ -36,8 +36,13 @@ struct GraphicsModel{ instance_count:u32, } +struct DebugGraphicsSubmesh{ + edges:Vec, + faces:Vec, +} struct DebugGraphicsMesh{ - indices:Indices, + verts:Indices, + submeshes:Vec, vertex_buf:wgpu::Buffer, } struct DebugGraphicsModel{ @@ -195,30 +200,42 @@ impl GraphicsState{ usage:wgpu::BufferUsages::VERTEX, }); - let mut indices=Vec::new(); - for physics_group in &mesh.physics_groups{ - for polygon_group_id in &physics_group.groups{ - for poly in mesh.polygon_groups[polygon_group_id.get() as usize].polys(){ + macro_rules! indices{ + ($indices:expr)=>{ + if (u32::MAX as usize){ data:&'a PhysicsMeshData, topology:&'a PhysicsMeshTopology, } +impl PhysicsMeshView<'_>{ + pub fn edge_vert_ids_iter(&self)->impl Iterator+'_{ + self.topology.edge_topology.iter().map(|edge|{ + edge.verts.map(|vert_id|self.topology.verts[vert_id.get() as usize].get()) + }) + } + pub fn face_vert_ids_iter(&self)->impl Iterator>+'_{ + self.topology.face_topology.iter().map(|face|{ + face.edges.iter().map(|edge_id|{ + let vert_id=self.topology.edge_topology[edge_id.as_undirected().get() as usize].verts[edge_id.parity() as usize]; + self.topology.verts[vert_id.get() as usize].get() + }) + }) + } +} impl MeshQuery for PhysicsMeshView<'_>{ type Face=SubmeshFaceId; type Edge=SubmeshDirectedEdgeId;