From d16c1b615f1bded37f3094cd26bd9dece9e03726 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Sun, 22 Jun 2008 03:30:55 +0000 Subject: [PATCH] pass in reference to actual contact point in cache, rather then temporary value, should fix issue 53 http://code.google.com/p/bullet/issues/detail?id=53 Thanks Alex Silverman for reporting and suggested fix Changed addContactPoint to lowercase --- .../SpuNarrowPhaseCollisionTask/SpuContactResult.cpp | 2 +- src/BulletCollision/CollisionDispatch/btManifoldResult.cpp | 6 +++--- .../NarrowPhaseCollision/btPersistentManifold.cpp | 3 ++- .../NarrowPhaseCollision/btPersistentManifold.h | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Extras/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp b/Extras/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp index 4918f9566..4cc00afb9 100644 --- a/Extras/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp +++ b/Extras/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp @@ -150,7 +150,7 @@ bool ManifoldResultAddContactPoint(const btVector3& normalOnBInWorld, (*gContactAddedCallback)(newPt,m_body0,m_partId0,m_index0,m_body1,m_partId1,m_index1); } */ - manifoldPtr->AddManifoldPoint(newPt); + manifoldPtr->addManifoldPoint(newPt); return true; } diff --git a/src/BulletCollision/CollisionDispatch/btManifoldResult.cpp b/src/BulletCollision/CollisionDispatch/btManifoldResult.cpp index b6bc609ed..d5b12598b 100644 --- a/src/BulletCollision/CollisionDispatch/btManifoldResult.cpp +++ b/src/BulletCollision/CollisionDispatch/btManifoldResult.cpp @@ -100,9 +100,9 @@ void btManifoldResult::addContactPoint(const btVector3& normalOnBInWorld,const b m_manifoldPtr->replaceContactPoint(newPt,insertIndex); } else { - m_manifoldPtr->AddManifoldPoint(newPt); + insertIndex = m_manifoldPtr->addManifoldPoint(newPt); } - + //User can override friction and/or restitution if (gContactAddedCallback && //and if either of the two bodies requires custom material @@ -112,7 +112,7 @@ void btManifoldResult::addContactPoint(const btVector3& normalOnBInWorld,const b //experimental feature info, for per-triangle material etc. btCollisionObject* obj0 = isSwapped? m_body1 : m_body0; btCollisionObject* obj1 = isSwapped? m_body0 : m_body1; - (*gContactAddedCallback)(newPt,obj0,m_partId0,m_index0,obj1,m_partId1,m_index1); + (*gContactAddedCallback)(m_manifoldPtr->getContactPoint(insertIndex),obj0,m_partId0,m_index0,obj1,m_partId1,m_index1); } } diff --git a/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp b/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp index 702ead716..386885d2a 100644 --- a/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp +++ b/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp @@ -162,7 +162,7 @@ int btPersistentManifold::getCacheEntry(const btManifoldPoint& newPoint) const return nearestPoint; } -void btPersistentManifold::AddManifoldPoint(const btManifoldPoint& newPoint) +int btPersistentManifold::addManifoldPoint(const btManifoldPoint& newPoint) { assert(validContactDistance(newPoint)); @@ -185,6 +185,7 @@ void btPersistentManifold::AddManifoldPoint(const btManifoldPoint& newPoint) } btAssert(m_pointCache[insertIndex].m_userPersistentData==0); m_pointCache[insertIndex] = newPoint; + return insertIndex; } btScalar btPersistentManifold::getContactBreakingThreshold() const diff --git a/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h b/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h index 2c83e1dfe..c122eb865 100644 --- a/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h +++ b/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h @@ -111,7 +111,7 @@ public: int getCacheEntry(const btManifoldPoint& newPoint) const; - void AddManifoldPoint( const btManifoldPoint& newPoint); + int addManifoldPoint( const btManifoldPoint& newPoint); void removeContactPoint (int index) {