16 #ifndef BT_OVERLAPPING_PAIR_CACHE_H 17 #define BT_OVERLAPPING_PAIR_CACHE_H 73 virtual int getNumOverlappingPairs()
const = 0;
83 virtual bool hasDeferredRemoval() = 0;
87 virtual void sortOverlappingPairs(
btDispatcher* dispatcher) = 0;
116 if (m_overlapFilterCallback)
131 if (!needsBroadphaseCollision(proxy0,proxy1))
134 return internalAddPair(proxy0,proxy1);
146 return &m_overlappingPairArray[0];
151 return &m_overlappingPairArray[0];
156 return m_overlappingPairArray;
161 return m_overlappingPairArray;
175 return m_overlapFilterCallback;
180 m_overlapFilterCallback = callback;
185 return m_overlappingPairArray.
size();
218 int key =
static_cast<int>(((
unsigned int)proxyId1) | (((
unsigned int)proxyId2) <<16));
227 return static_cast<unsigned int>(key);
236 int proxyId1 = proxy0->
getUid();
237 int proxyId2 = proxy1->
getUid();
238 #if 0 // wrong, 'equalsPair' use unsorted uids, copy-past devil striked again. Nat. 239 if (proxyId1 > proxyId2)
240 btSwap(proxyId1, proxyId2);
243 int index = m_hashTable[hash];
245 while( index !=
BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) ==
false)
247 index = m_next[index];
257 return &m_overlappingPairArray[index];
267 m_ghostPairCallback = ghostPairCallback;
270 virtual void sortOverlappingPairs(
btDispatcher* dispatcher);
321 if (m_overlapFilterCallback)
332 return m_overlappingPairArray;
337 return m_overlappingPairArray;
345 return &m_overlappingPairArray[0];
350 return &m_overlappingPairArray[0];
355 return m_overlappingPairArray.
size();
360 return m_overlapFilterCallback;
365 m_overlapFilterCallback = callback;
370 return m_hasDeferredRemoval;
375 m_ghostPairCallback = ghostPairCallback;
378 virtual void sortOverlappingPairs(
btDispatcher* dispatcher);
395 return &m_overlappingPairArray[0];
399 return &m_overlappingPairArray[0];
403 return m_overlappingPairArray;
467 #endif //BT_OVERLAPPING_PAIR_CACHE_H virtual bool hasDeferredRemoval()
const btBroadphasePair * getOverlappingPairArrayPtr() const
btOverlapFilterCallback * getOverlapFilterCallback()
bool needsBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const
btOverlapFilterCallback * m_overlapFilterCallback
btNullPairCache skips add/removal of overlapping pairs. Userful for benchmarking and unit testing...
short int m_collisionFilterGroup
btBroadphasePair * internalFindPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1, int hash)
int getNumOverlappingPairs() const
btAlignedObjectArray< int > m_hashTable
virtual bool hasDeferredRemoval()
btBroadphasePairArray & getOverlappingPairArray()
btOverlappingPairCallback * m_ghostPairCallback
#define SIMD_FORCE_INLINE
btBroadphasePairArray m_overlappingPairArray
bool equalsPair(const btBroadphasePair &pair, int proxyId1, int proxyId2)
bool needsBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const
btOverlappingPairCallback * m_ghostPairCallback
btOverlapFilterCallback * m_overlapFilterCallback
virtual void cleanProxyFromPairs(btBroadphaseProxy *, btDispatcher *)
const btBroadphasePair * getOverlappingPairArrayPtr() const
virtual btBroadphasePair * getOverlappingPairArrayPtr()
void setOverlapFilterCallback(btOverlapFilterCallback *callback)
virtual btBroadphasePair * getOverlappingPairArrayPtr()
const btBroadphasePairArray & getOverlappingPairArray() const
virtual void processAllOverlappingPairs(btOverlapCallback *, btDispatcher *)
The btOverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the btBroadphaseInterface broadphases.
virtual bool hasDeferredRemoval()
unsigned int getHash(unsigned int proxyId1, unsigned int proxyId2)
virtual int getNumOverlappingPairs() const
int size() const
return the number of elements in the array
virtual ~btOverlapCallback()
btBroadphasePairArray & getOverlappingPairArray()
virtual ~btOverlapFilterCallback()
btOverlapFilterCallback * getOverlapFilterCallback()
int getNumOverlappingPairs() const
virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy *, btDispatcher *)
btSortedOverlappingPairCache maintains the objects with overlapping AABB Typically managed by the Bro...
void setOverlapFilterCallback(btOverlapFilterCallback *callback)
virtual bool needBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const =0
virtual bool processOverlap(btBroadphasePair &pair)=0
btAlignedObjectArray< int > m_next
virtual ~btOverlappingPairCache()
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
btBroadphaseProxy * m_pProxy1
btBroadphasePairArray m_overlappingPairArray
btBroadphaseProxy * m_pProxy0
virtual void cleanOverlappingPair(btBroadphasePair &, btDispatcher *)
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *ghostPairCallback)
btAlignedObjectArray< btBroadphasePair > btBroadphasePairArray
const btBroadphasePairArray & getOverlappingPairArray() const
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *)
virtual void setOverlapFilterCallback(btOverlapFilterCallback *)
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *ghostPairCallback)
btBroadphasePairArray m_overlappingPairArray
bool m_hasDeferredRemoval
by default, do the removal during the pair traversal
short int m_collisionFilterMask
const btBroadphasePair * getOverlappingPairArrayPtr() const
virtual void sortOverlappingPairs(btDispatcher *dispatcher)
virtual btBroadphasePair * addOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)
virtual btBroadphasePair * findPair(btBroadphaseProxy *, btBroadphaseProxy *)
btBroadphasePairArray & getOverlappingPairArray()
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
Hash-space based Pair Cache, thanks to Erin Catto, Box2D, http://www.box2d.org, and Pierre Terdiman...
virtual void * removeOverlappingPair(btBroadphaseProxy *, btBroadphaseProxy *, btDispatcher *)
The btOverlappingPairCallback class is an additional optional broadphase user callback for adding/rem...
virtual btBroadphasePair * addOverlappingPair(btBroadphaseProxy *, btBroadphaseProxy *)
The btBroadphasePair class contains a pair of aabb-overlapping objects.
btBroadphasePair * getOverlappingPairArrayPtr()