summaryrefslogtreecommitdiff
path: root/src/BulletCollision/CollisionDispatch
diff options
context:
space:
mode:
authorerwincoumans <erwin.coumans@gmail.com>2018-01-09 10:10:36 -0800
committererwincoumans <erwin.coumans@gmail.com>2018-01-09 10:10:36 -0800
commite138e85bcaa90d87a056b6d5e0484e93ee3dc4b0 (patch)
tree379c40974082d4695f1c7fa0f0bceda455c74769 /src/BulletCollision/CollisionDispatch
parentbf6d805228b542334004265896b501a8f38c3e40 (diff)
downloadbullet3-e138e85bcaa90d87a056b6d5e0484e93ee3dc4b0.tar.gz
allow to enable/disable implicit cylinder conversion through an API
p.loadURDF("r2d2.urdf", flags=p.URDF_USE_IMPLICIT_CYLINDER) allow to enable/disable deterministicOverlappingPairs through an API p.setPhysicsEngineParameter(deterministicOverlappingPairs = False)
Diffstat (limited to 'src/BulletCollision/CollisionDispatch')
-rw-r--r--src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp b/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
index 1f0067d3e..f849e31e3 100644
--- a/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
+++ b/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
@@ -334,8 +334,11 @@ void btSimulationIslandManager::buildIslands(btDispatcher* dispatcher,btCollisio
for (i=0;i<maxNumManifolds ;i++)
{
btPersistentManifold* manifold = dispatcher->getManifoldByIndexInternal(i);
- if (manifold->getNumContacts() == 0)
- continue;
+ if (collisionWorld->getDispatchInfo().m_deterministicOverlappingPairs)
+ {
+ if (manifold->getNumContacts() == 0)
+ continue;
+ }
const btCollisionObject* colObj0 = static_cast<const btCollisionObject*>(manifold->getBody0());
const btCollisionObject* colObj1 = static_cast<const btCollisionObject*>(manifold->getBody1());
@@ -397,12 +400,15 @@ void btSimulationIslandManager::buildAndProcessIslands(btDispatcher* dispatcher,
//tried a radix sort, but quicksort/heapsort seems still faster
//@todo rewrite island management
-
- //m_islandmanifold.quickSort(btPersistentManifoldSortPredicate());
-
//btPersistentManifoldSortPredicateDeterministic sorts contact manifolds based on islandid,
//but also based on object0 unique id and object1 unique id
- m_islandmanifold.quickSort(btPersistentManifoldSortPredicateDeterministic());
+ if (collisionWorld->getDispatchInfo().m_deterministicOverlappingPairs)
+ {
+ m_islandmanifold.quickSort(btPersistentManifoldSortPredicateDeterministic());
+ } else
+ {
+ m_islandmanifold.quickSort(btPersistentManifoldSortPredicate());
+ }
//m_islandmanifold.heapSort(btPersistentManifoldSortPredicate());