WQuadtree query: reduce the amount of allocations.

This commit is contained in:
Crozet Sébastien
2020-10-06 11:22:51 +02:00
parent cf86ee40a1
commit 17c31bcc57
3 changed files with 17 additions and 13 deletions

View File

@@ -64,15 +64,10 @@ impl QueryPipeline {
ray: &Ray,
max_toi: f32,
) -> Option<(ColliderHandle, &'a Collider, RayIntersection)> {
// let t0 = instant::now();
let inter = self.quadtree.cast_ray(ray, max_toi);
// println!(
// "Found {} interferences in time {}.",
// inter.len(),
// instant::now() - t0
// );
// TODO: avoid allocation?
let mut inter = Vec::new();
self.quadtree.cast_ray(ray, max_toi, &mut inter);
// let t0 = instant::now();
let mut best = f32::MAX;
let mut result = None;
@@ -85,7 +80,6 @@ impl QueryPipeline {
}
}
}
// println!("Cast time: {}", instant::now() - t0);
result
}
@@ -107,8 +101,12 @@ impl QueryPipeline {
max_toi: f32,
mut callback: impl FnMut(ColliderHandle, &'a Collider, RayIntersection) -> bool,
) {
// FIXME: this is a brute-force approach.
for (handle, collider) in colliders.iter() {
// TODO: avoid allocation?
let mut inter = Vec::new();
self.quadtree.cast_ray(ray, max_toi, &mut inter);
for handle in inter {
let collider = &colliders[handle];
if let Some(inter) = collider.shape().cast_ray(collider.position(), ray, max_toi) {
if !callback(handle, collider, inter) {
return;