From cf77d17d9e6c425b1899c03db8e07f265259791b Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Wed, 3 Feb 2021 16:33:08 +0100 Subject: Experiment with incremental island computation. --- src_testbed/harness/mod.rs | 12 ++++++++---- src_testbed/physics/mod.rs | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs index afdc23a..b31faf9 100644 --- a/src_testbed/harness/mod.rs +++ b/src_testbed/harness/mod.rs @@ -4,7 +4,7 @@ use crate::{ }; use kiss3d::window::Window; use plugin::HarnessPlugin; -use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet}; +use rapier::dynamics::{IntegrationParameters, IslandSet, JointSet, RigidBodySet}; use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase}; use rapier::math::Vector; use rapier::pipeline::{ChannelEventCollector, PhysicsPipeline, QueryPipeline}; @@ -129,6 +129,7 @@ impl Harness { self.physics.joints = joints; self.physics.broad_phase = BroadPhase::new(); self.physics.narrow_phase = NarrowPhase::new(); + self.physics.islands = IslandSet::new(); self.state.timestep_id = 0; self.physics.query_pipeline = QueryPipeline::new(); self.physics.pipeline = PhysicsPipeline::new(); @@ -189,6 +190,7 @@ impl Harness { &self.physics.integration_parameters, &mut self.physics.broad_phase, &mut self.physics.narrow_phase, + &mut self.physics.islands, &mut self.physics.bodies, &mut self.physics.colliders, &mut self.physics.joints, @@ -197,9 +199,11 @@ impl Harness { &self.event_handler, ); - self.physics - .query_pipeline - .update(&self.physics.bodies, &self.physics.colliders); + self.physics.query_pipeline.update( + &self.physics.islands, + &self.physics.bodies, + &self.physics.colliders, + ); for plugin in &mut self.plugins { plugin.step(&mut self.physics, &self.state) diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index 808e9bd..014276c 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -1,5 +1,5 @@ use crossbeam::channel::Receiver; -use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet}; +use rapier::dynamics::{IntegrationParameters, IslandSet, JointSet, RigidBodySet}; use rapier::geometry::{BroadPhase, ColliderSet, ContactEvent, IntersectionEvent, NarrowPhase}; use rapier::math::Vector; use rapier::pipeline::{PhysicsPipeline, QueryPipeline}; @@ -70,6 +70,7 @@ impl PhysicsSnapshot { pub struct PhysicsState { pub broad_phase: BroadPhase, pub narrow_phase: NarrowPhase, + pub islands: IslandSet, pub bodies: RigidBodySet, pub colliders: ColliderSet, pub joints: JointSet, @@ -84,6 +85,7 @@ impl PhysicsState { Self { broad_phase: BroadPhase::new(), narrow_phase: NarrowPhase::new(), + islands: IslandSet::new(), bodies: RigidBodySet::new(), colliders: ColliderSet::new(), joints: JointSet::new(), -- cgit