more broadphase/pair cache/MultiSAP improvements.

This commit is contained in:
erwin.coumans
2008-03-14 03:19:15 +00:00
parent d51c9f3247
commit fbffa3a031
3 changed files with 67 additions and 66 deletions

View File

@@ -464,7 +464,7 @@ template <typename BP_FP_INT_TYPE>
void btAxisSweep3Internal<BP_FP_INT_TYPE>::calculateOverlappingPairs(btDispatcher* dispatcher) void btAxisSweep3Internal<BP_FP_INT_TYPE>::calculateOverlappingPairs(btDispatcher* dispatcher)
{ {
if (m_ownsPairCache && m_pairCache->hasDeferredRemoval()) if (m_pairCache->hasDeferredRemoval())
{ {
btBroadphasePairArray& overlappingPairArray = m_pairCache->getOverlappingPairArray(); btBroadphasePairArray& overlappingPairArray = m_pairCache->getOverlappingPairArray();

View File

@@ -64,6 +64,7 @@ btMultiSapBroadphase::~btMultiSapBroadphase()
{ {
if (m_ownsPairCache) if (m_ownsPairCache)
{ {
m_overlappingPairs->~btOverlappingPairCache();
btAlignedFree(m_overlappingPairs); btAlignedFree(m_overlappingPairs);
} }
} }
@@ -115,7 +116,9 @@ void btMultiSapBroadphase::calculateOverlappingPairs(btDispatcher* dispatcher)
{ {
m_simpleBroadphase->calculateOverlappingPairs(dispatcher); m_simpleBroadphase->calculateOverlappingPairs(dispatcher);
#ifndef USE_HASH_PAIRCACHE if (m_overlappingPairs->hasDeferredRemoval())
{
btBroadphasePairArray& overlappingPairArray = m_overlappingPairs->getOverlappingPairArray(); btBroadphasePairArray& overlappingPairArray = m_overlappingPairs->getOverlappingPairArray();
@@ -177,18 +180,18 @@ void btMultiSapBroadphase::calculateOverlappingPairs(btDispatcher* dispatcher)
} }
///if you don't like to skip the invalid pairs in the array, execute following code: ///if you don't like to skip the invalid pairs in the array, execute following code:
#define CLEAN_INVALID_PAIRS 1 #define CLEAN_INVALID_PAIRS 1
#ifdef CLEAN_INVALID_PAIRS #ifdef CLEAN_INVALID_PAIRS
//perform a sort, to sort 'invalid' pairs to the end //perform a sort, to sort 'invalid' pairs to the end
overlappingPairArray.heapSort(btBroadphasePairSortPredicate()); overlappingPairArray.heapSort(btBroadphasePairSortPredicate());
overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair); overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair);
m_invalidPair = 0; m_invalidPair = 0;
#endif//CLEAN_INVALID_PAIRS #endif//CLEAN_INVALID_PAIRS
#endif //USE_HASH_PAIRCACHE }
} }

View File

@@ -204,12 +204,13 @@ void btSimpleBroadphase::calculateOverlappingPairs(btDispatcher* dispatcher)
} }
} else } else
{ {
#ifdef USE_HASH_PAIRCACHE if (!m_pairCache->hasDeferredRemoval())
{
if ( m_pairCache->findPair(proxy0,proxy1)) if ( m_pairCache->findPair(proxy0,proxy1))
{ {
m_pairCache->removeOverlappingPair(proxy0,proxy1,dispatcher); m_pairCache->removeOverlappingPair(proxy0,proxy1,dispatcher);
} }
#endif //USE_HASH_PAIRCACHE }
} }
} }
@@ -220,9 +221,7 @@ void btSimpleBroadphase::calculateOverlappingPairs(btDispatcher* dispatcher)
} }
#ifndef USE_HASH_PAIRCACHE if (m_ownsPairCache && m_pairCache->hasDeferredRemoval())
if (m_ownsPairCache)
{ {
btBroadphasePairArray& overlappingPairArray = m_pairCache->getOverlappingPairArray(); btBroadphasePairArray& overlappingPairArray = m_pairCache->getOverlappingPairArray();
@@ -296,7 +295,6 @@ void btSimpleBroadphase::calculateOverlappingPairs(btDispatcher* dispatcher)
#endif//CLEAN_INVALID_PAIRS #endif//CLEAN_INVALID_PAIRS
} }
#endif //USE_HASH_PAIRCACHE
} }
} }