From 721db2d49e06de38a16320425f77986b308445dc Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 6 Oct 2020 10:02:21 +0200 Subject: Fix crash when deleting a collider. --- .../contact_generator/heightfield_shape_contact_generator.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/geometry/contact_generator') diff --git a/src/geometry/contact_generator/heightfield_shape_contact_generator.rs b/src/geometry/contact_generator/heightfield_shape_contact_generator.rs index f59a94b..04afc65 100644 --- a/src/geometry/contact_generator/heightfield_shape_contact_generator.rs +++ b/src/geometry/contact_generator/heightfield_shape_contact_generator.rs @@ -71,10 +71,10 @@ fn do_generate_contacts( } else { manifold.subshape_index_pair.1 }; - println!( - "Restoring for {} [chosen with {:?}]", - subshape_id, manifold.subshape_index_pair - ); + // println!( + // "Restoring for {} [chosen with {:?}]", + // subshape_id, manifold.subshape_index_pair + // ); // Use dummy shapes for the dispatch. #[cfg(feature = "dim2")] -- cgit From 8e432b298bd71df7d1b776b77c15713d9bea280e Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 6 Oct 2020 10:46:59 +0200 Subject: Make the WQuadTree more generic and use it as the trimesh acceleration structure. --- .../contact_generator/trimesh_shape_contact_generator.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'src/geometry/contact_generator') diff --git a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs index 78f26bb..d759ae3 100644 --- a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs +++ b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs @@ -5,7 +5,7 @@ use crate::geometry::{Collider, ContactManifold, Shape, Trimesh, WAABBHierarchyI use crate::ncollide::bounding_volume::{BoundingVolume, AABB}; pub struct TrimeshShapeContactGeneratorWorkspace { - interferences: WAABBHierarchyIntersections, + interferences: Vec, local_aabb2: AABB, old_interferences: Vec, old_manifolds: Vec, @@ -14,7 +14,7 @@ pub struct TrimeshShapeContactGeneratorWorkspace { impl TrimeshShapeContactGeneratorWorkspace { pub fn new() -> Self { Self { - interferences: WAABBHierarchyIntersections::new(), + interferences: Vec::new(), local_aabb2: AABB::new_invalid(), old_interferences: Vec::new(), old_manifolds: Vec::new(), @@ -74,7 +74,7 @@ fn do_generate_contacts( let local_aabb2 = new_local_aabb2; // .loosened(ctxt.prediction_distance * 2.0); // FIXME: what would be the best value? std::mem::swap( &mut workspace.old_interferences, - workspace.interferences.computed_interferences_mut(), + &mut workspace.interferences, ); std::mem::swap(&mut workspace.old_manifolds, &mut ctxt.pair.manifolds); ctxt.pair.manifolds.clear(); @@ -108,16 +108,14 @@ fn do_generate_contacts( // workspace.old_manifolds.len() // ); - trimesh1 - .waabbs() - .compute_interferences_with(local_aabb2, &mut workspace.interferences); + workspace.interferences = trimesh1.waabbs().intersect_aabb(&local_aabb2); workspace.local_aabb2 = local_aabb2; } /* * Dispatch to the specific solver by keeping the previous manifold if we already had one. */ - let new_interferences = workspace.interferences.computed_interferences(); + let new_interferences = &workspace.interferences; let mut old_inter_it = workspace.old_interferences.drain(..).peekable(); let mut old_manifolds_it = workspace.old_manifolds.drain(..); -- cgit From 17c31bcc57ec8d037ba6cc6ab5f7cfb6fa4bb09b Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 6 Oct 2020 11:22:51 +0200 Subject: WQuadtree query: reduce the amount of allocations. --- src/geometry/contact_generator/trimesh_shape_contact_generator.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/geometry/contact_generator') diff --git a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs index d759ae3..7dc0054 100644 --- a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs +++ b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs @@ -108,7 +108,10 @@ fn do_generate_contacts( // workspace.old_manifolds.len() // ); - workspace.interferences = trimesh1.waabbs().intersect_aabb(&local_aabb2); + workspace.interferences.clear(); + trimesh1 + .waabbs() + .intersect_aabb(&local_aabb2, &mut workspace.interferences); workspace.local_aabb2 = local_aabb2; } -- cgit From 60c4d01e0a756ce0af142ac698fd0adcb8c22042 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 6 Oct 2020 11:37:48 +0200 Subject: Completely remove the WAABBHierarchy structure. It is now replaced by the WQuadtree. --- src/geometry/contact_generator/trimesh_shape_contact_generator.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/geometry/contact_generator') diff --git a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs index 7dc0054..52ba9b7 100644 --- a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs +++ b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs @@ -1,7 +1,7 @@ use crate::geometry::contact_generator::{ ContactGenerationContext, PrimitiveContactGenerationContext, }; -use crate::geometry::{Collider, ContactManifold, Shape, Trimesh, WAABBHierarchyIntersections}; +use crate::geometry::{Collider, ContactManifold, Shape, Trimesh}; use crate::ncollide::bounding_volume::{BoundingVolume, AABB}; pub struct TrimeshShapeContactGeneratorWorkspace { -- cgit