Changeset 8351 for code/trunk/src/external/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
- Timestamp:
- Apr 28, 2011, 7:15:14 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/external/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
r5781 r8351 1 1 2 /* 2 3 Bullet Continuous Collision Detection and Physics Library … … 45 46 46 47 { 48 btOverlappingPairCache* pairCachePtr = colWorld->getPairCache(); 49 const int numOverlappingPairs = pairCachePtr->getNumOverlappingPairs(); 50 btBroadphasePair* pairPtr = pairCachePtr->getOverlappingPairArrayPtr(); 47 51 48 for (int i=0;i<colWorld->getPairCache()->getNumOverlappingPairs();i++) 49 { 50 btBroadphasePair* pairPtr = colWorld->getPairCache()->getOverlappingPairArrayPtr(); 52 for (int i=0;i<numOverlappingPairs;i++) 53 { 51 54 const btBroadphasePair& collisionPair = pairPtr[i]; 52 55 btCollisionObject* colObj0 = (btCollisionObject*)collisionPair.m_pProxy0->m_clientObject; … … 64 67 } 65 68 66 69 #ifdef STATIC_SIMULATION_ISLAND_OPTIMIZATION 70 void btSimulationIslandManager::updateActivationState(btCollisionWorld* colWorld,btDispatcher* dispatcher) 71 { 72 73 // put the index into m_controllers into m_tag 74 int index = 0; 75 { 76 77 int i; 78 for (i=0;i<colWorld->getCollisionObjectArray().size(); i++) 79 { 80 btCollisionObject* collisionObject= colWorld->getCollisionObjectArray()[i]; 81 //Adding filtering here 82 if (!collisionObject->isStaticOrKinematicObject()) 83 { 84 collisionObject->setIslandTag(index++); 85 } 86 collisionObject->setCompanionId(-1); 87 collisionObject->setHitFraction(btScalar(1.)); 88 } 89 } 90 // do the union find 91 92 initUnionFind( index ); 93 94 findUnions(dispatcher,colWorld); 95 } 96 97 void btSimulationIslandManager::storeIslandActivationState(btCollisionWorld* colWorld) 98 { 99 // put the islandId ('find' value) into m_tag 100 { 101 int index = 0; 102 int i; 103 for (i=0;i<colWorld->getCollisionObjectArray().size();i++) 104 { 105 btCollisionObject* collisionObject= colWorld->getCollisionObjectArray()[i]; 106 if (!collisionObject->isStaticOrKinematicObject()) 107 { 108 collisionObject->setIslandTag( m_unionFind.find(index) ); 109 //Set the correct object offset in Collision Object Array 110 m_unionFind.getElement(index).m_sz = i; 111 collisionObject->setCompanionId(-1); 112 index++; 113 } else 114 { 115 collisionObject->setIslandTag(-1); 116 collisionObject->setCompanionId(-2); 117 } 118 } 119 } 120 } 121 122 123 #else //STATIC_SIMULATION_ISLAND_OPTIMIZATION 67 124 void btSimulationIslandManager::updateActivationState(btCollisionWorld* colWorld,btDispatcher* dispatcher) 68 125 { 69 126 70 127 initUnionFind( int (colWorld->getCollisionObjectArray().size())); 71 128 72 129 // put the index into m_controllers into m_tag 73 130 { 74 131 75 132 int index = 0; 76 133 int i; … … 82 139 collisionObject->setHitFraction(btScalar(1.)); 83 140 index++; 84 141 85 142 } 86 143 } 87 144 // do the union find 88 145 89 146 findUnions(dispatcher,colWorld); 90 91 92 93 } 94 95 96 147 } 97 148 98 149 void btSimulationIslandManager::storeIslandActivationState(btCollisionWorld* colWorld) … … 100 151 // put the islandId ('find' value) into m_tag 101 152 { 102 103 153 154 104 155 int index = 0; 105 156 int i; … … 120 171 } 121 172 } 173 174 #endif //STATIC_SIMULATION_ISLAND_OPTIMIZATION 122 175 123 176 inline int getIslandId(const btPersistentManifold* lhs)
Note: See TracChangeset
for help on using the changeset viewer.