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:
@@ -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()
|
void btCollisionWorld::updateAabbs()
|
||||||
{
|
{
|
||||||
BT_PROFILE("updateAabbs");
|
BT_PROFILE("updateAabbs");
|
||||||
|
|
||||||
btTransform predictedTrans;
|
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
|
//only update aabb of active objects
|
||||||
if (colObj->isActive())
|
if (colObj->isActive())
|
||||||
|
|||||||
@@ -84,10 +84,6 @@ protected:
|
|||||||
|
|
||||||
btAlignedObjectArray<btCollisionObject*> m_collisionObjects;
|
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;
|
btDispatcher* m_dispatcher1;
|
||||||
|
|
||||||
btDispatcherInfo m_dispatchInfo;
|
btDispatcherInfo m_dispatchInfo;
|
||||||
@@ -98,9 +94,6 @@ protected:
|
|||||||
|
|
||||||
btIDebugDraw* m_debugDrawer;
|
btIDebugDraw* m_debugDrawer;
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void findActiveObjects();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -142,15 +135,6 @@ public:
|
|||||||
|
|
||||||
virtual void updateAabbs();
|
virtual void updateAabbs();
|
||||||
|
|
||||||
btCollisionObjectArray& getActiveObjects()
|
|
||||||
{
|
|
||||||
return m_activeObjects;
|
|
||||||
}
|
|
||||||
|
|
||||||
const btCollisionObjectArray& getActiveObjects() const
|
|
||||||
{
|
|
||||||
return m_activeObjects;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void setDebugDrawer(btIDebugDraw* debugDrawer)
|
virtual void setDebugDrawer(btIDebugDraw* debugDrawer)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -273,18 +273,10 @@ void btSimulationIslandManager::buildIslands(btDispatcher* dispatcher,btCollisio
|
|||||||
//kinematic objects don't merge islands, but wake up all connected objects
|
//kinematic objects don't merge islands, but wake up all connected objects
|
||||||
if (colObj0->isKinematicObject() && colObj0->getActivationState() != ISLAND_SLEEPING)
|
if (colObj0->isKinematicObject() && colObj0->getActivationState() != ISLAND_SLEEPING)
|
||||||
{
|
{
|
||||||
if (!colObj1->isActive())
|
|
||||||
{
|
|
||||||
collisionWorld->getActiveObjects().push_back(colObj1);
|
|
||||||
}
|
|
||||||
colObj1->activate();
|
colObj1->activate();
|
||||||
}
|
}
|
||||||
if (colObj1->isKinematicObject() && colObj1->getActivationState() != ISLAND_SLEEPING)
|
if (colObj1->isKinematicObject() && colObj1->getActivationState() != ISLAND_SLEEPING)
|
||||||
{
|
{
|
||||||
if (!colObj0->isActive())
|
|
||||||
{
|
|
||||||
collisionWorld->getActiveObjects().push_back(colObj0);
|
|
||||||
}
|
|
||||||
colObj0->activate();
|
colObj0->activate();
|
||||||
}
|
}
|
||||||
#ifdef SPLIT_ISLANDS
|
#ifdef SPLIT_ISLANDS
|
||||||
|
|||||||
@@ -107,9 +107,9 @@ btDiscreteDynamicsWorld::~btDiscreteDynamicsWorld()
|
|||||||
void btDiscreteDynamicsWorld::saveKinematicState(btScalar timeStep)
|
void btDiscreteDynamicsWorld::saveKinematicState(btScalar timeStep)
|
||||||
{
|
{
|
||||||
|
|
||||||
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];
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||||
if (body)
|
if (body)
|
||||||
{
|
{
|
||||||
@@ -224,9 +224,9 @@ void btDiscreteDynamicsWorld::debugDrawWorld()
|
|||||||
void btDiscreteDynamicsWorld::clearForces()
|
void btDiscreteDynamicsWorld::clearForces()
|
||||||
{
|
{
|
||||||
///@todo: iterate over awake simulation islands!
|
///@todo: iterate over awake simulation islands!
|
||||||
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];
|
||||||
|
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||||
if (body)
|
if (body)
|
||||||
@@ -240,9 +240,9 @@ void btDiscreteDynamicsWorld::clearForces()
|
|||||||
void btDiscreteDynamicsWorld::applyGravity()
|
void btDiscreteDynamicsWorld::applyGravity()
|
||||||
{
|
{
|
||||||
///@todo: iterate over awake simulation islands!
|
///@todo: iterate over awake simulation islands!
|
||||||
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];
|
||||||
|
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||||
if (body && body->isActive())
|
if (body && body->isActive())
|
||||||
@@ -278,9 +278,9 @@ void btDiscreteDynamicsWorld::synchronizeMotionStates()
|
|||||||
BT_PROFILE("synchronizeMotionStates");
|
BT_PROFILE("synchronizeMotionStates");
|
||||||
{
|
{
|
||||||
//todo: iterate over awake simulation islands!
|
//todo: iterate over awake simulation islands!
|
||||||
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];
|
||||||
|
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||||
if (body)
|
if (body)
|
||||||
@@ -344,8 +344,6 @@ int btDiscreteDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps,
|
|||||||
if (numSimulationSubSteps)
|
if (numSimulationSubSteps)
|
||||||
{
|
{
|
||||||
|
|
||||||
findActiveObjects();
|
|
||||||
|
|
||||||
saveKinematicState(fixedTimeStep);
|
saveKinematicState(fixedTimeStep);
|
||||||
|
|
||||||
applyGravity();
|
applyGravity();
|
||||||
@@ -377,8 +375,6 @@ void btDiscreteDynamicsWorld::internalSingleStepSimulation(btScalar timeStep)
|
|||||||
|
|
||||||
BT_PROFILE("internalSingleStepSimulation");
|
BT_PROFILE("internalSingleStepSimulation");
|
||||||
|
|
||||||
findActiveObjects();
|
|
||||||
|
|
||||||
///apply gravity, predict motion
|
///apply gravity, predict motion
|
||||||
predictUnconstraintMotion(timeStep);
|
predictUnconstraintMotion(timeStep);
|
||||||
|
|
||||||
@@ -421,9 +417,9 @@ void btDiscreteDynamicsWorld::internalSingleStepSimulation(btScalar timeStep)
|
|||||||
void btDiscreteDynamicsWorld::setGravity(const btVector3& gravity)
|
void btDiscreteDynamicsWorld::setGravity(const btVector3& gravity)
|
||||||
{
|
{
|
||||||
m_gravity = gravity;
|
m_gravity = gravity;
|
||||||
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];
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||||
if (body)
|
if (body)
|
||||||
{
|
{
|
||||||
@@ -830,9 +826,9 @@ void btDiscreteDynamicsWorld::integrateTransforms(btScalar timeStep)
|
|||||||
{
|
{
|
||||||
BT_PROFILE("integrateTransforms");
|
BT_PROFILE("integrateTransforms");
|
||||||
btTransform predictedTrans;
|
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];
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||||
if (body)
|
if (body)
|
||||||
{
|
{
|
||||||
@@ -881,9 +877,9 @@ void btDiscreteDynamicsWorld::integrateTransforms(btScalar timeStep)
|
|||||||
void btDiscreteDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
|
void btDiscreteDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
|
||||||
{
|
{
|
||||||
BT_PROFILE("predictUnconstraintMotion");
|
BT_PROFILE("predictUnconstraintMotion");
|
||||||
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];
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||||
if (body)
|
if (body)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user