reverted 'getActiveObjects', island management will be improved for Bullet 2.74 release.

The implementation was error-prone and could lead to crashes.

See http://code.google.com/p/bullet/issues/detail?id=128
This commit is contained in:
erwin.coumans
2008-11-11 16:19:20 +00:00
parent 0384562db0
commit 1381394dd8
4 changed files with 16 additions and 57 deletions

View File

@@ -117,28 +117,15 @@ void btCollisionWorld::addCollisionObject(btCollisionObject* collisionObject,sho
}
void btCollisionWorld::findActiveObjects()
{
m_activeObjects.resize(0);
for ( int i=0;i<m_collisionObjects.size();i++)
{
btCollisionObject* colObj = m_collisionObjects[i];
if (colObj->isActive())
{
m_activeObjects.push_back(colObj);
}
}
}
void btCollisionWorld::updateAabbs()
{
BT_PROFILE("updateAabbs");
btTransform predictedTrans;
for ( int i=0;i<m_activeObjects.size();i++)
for ( int i=0;i<m_collisionObjects.size();i++)
{
btCollisionObject* colObj = m_activeObjects[i];
btCollisionObject* colObj = m_collisionObjects[i];
//only update aabb of active objects
if (colObj->isActive())

View File

@@ -84,10 +84,6 @@ protected:
btAlignedObjectArray<btCollisionObject*> m_collisionObjects;
///temporarily solution to keep track of active objects. This work-in-progress will improve when we refactor island management.
btAlignedObjectArray<btCollisionObject*> m_activeObjects;
btDispatcher* m_dispatcher1;
btDispatcherInfo m_dispatchInfo;
@@ -98,9 +94,6 @@ protected:
btIDebugDraw* m_debugDrawer;
protected:
void findActiveObjects();
public:
@@ -142,15 +135,6 @@ public:
virtual void updateAabbs();
btCollisionObjectArray& getActiveObjects()
{
return m_activeObjects;
}
const btCollisionObjectArray& getActiveObjects() const
{
return m_activeObjects;
}
virtual void setDebugDrawer(btIDebugDraw* debugDrawer)
{

View File

@@ -273,18 +273,10 @@ void btSimulationIslandManager::buildIslands(btDispatcher* dispatcher,btCollisio
//kinematic objects don't merge islands, but wake up all connected objects
if (colObj0->isKinematicObject() && colObj0->getActivationState() != ISLAND_SLEEPING)
{
if (!colObj1->isActive())
{
collisionWorld->getActiveObjects().push_back(colObj1);
}
colObj1->activate();
}
if (colObj1->isKinematicObject() && colObj1->getActivationState() != ISLAND_SLEEPING)
{
if (!colObj0->isActive())
{
collisionWorld->getActiveObjects().push_back(colObj0);
}
colObj0->activate();
}
#ifdef SPLIT_ISLANDS