Bullet Collision Detection & Physics Library
|
Go to the documentation of this file.
16 #ifndef BT_OVERLAPPING_PAIR_CACHE_H
17 #define BT_OVERLAPPING_PAIR_CACHE_H
110 if (m_overlapFilterCallback)
123 if (!needsBroadphaseCollision(proxy0, proxy1))
126 return internalAddPair(proxy0, proxy1);
137 return &m_overlappingPairArray[0];
142 return &m_overlappingPairArray[0];
147 return m_overlappingPairArray;
152 return m_overlappingPairArray;
164 return m_overlapFilterCallback;
169 m_overlapFilterCallback = callback;
174 return m_overlappingPairArray.
size();
205 unsigned int key = proxyId1 | (proxyId2 << 16);
219 int proxyId1 = proxy0->
getUid();
220 int proxyId2 = proxy1->
getUid();
221 #if 0 // wrong, 'equalsPair' use unsorted uids, copy-past devil striked again. Nat.
222 if (proxyId1 > proxyId2)
223 btSwap(proxyId1, proxyId2);
226 int index = m_hashTable[hash];
228 while (index !=
BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) ==
false)
230 index = m_next[index];
240 return &m_overlappingPairArray[index];
250 m_ghostPairCallback = ghostPairCallback;
253 virtual void sortOverlappingPairs(
btDispatcher * dispatcher);
434 #endif //BT_OVERLAPPING_PAIR_CACHE_H
btBroadphasePairArray m_overlappingPairArray
int m_collisionFilterMask
virtual void processAllOverlappingPairs(btOverlapCallback *, btDispatcher *dispatcher)
btOverlappingPairCallback * m_ghostPairCallback
The btOverlappingPairCallback class is an additional optional broadphase user callback for adding/rem...
btBroadphasePairArray m_overlappingPairArray
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
btOverlapFilterCallback * getOverlapFilterCallback()
virtual int getNumOverlappingPairs() const
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *ghostPairCallback)
virtual btBroadphasePairArray & getOverlappingPairArray()=0
btBroadphasePairArray & getOverlappingPairArray()
btNullPairCache skips add/removal of overlapping pairs. Userful for benchmarking and unit testing.
Hash-space based Pair Cache, thanks to Erin Catto, Box2D, http://www.box2d.org, and Pierre Terdiman,...
unsigned int getHash(unsigned int proxyId1, unsigned int proxyId2)
btOverlapFilterCallback * getOverlapFilterCallback()
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
BT_DECLARE_ALIGNED_ALLOCATOR()
virtual void sortOverlappingPairs(btDispatcher *dispatcher)
btBroadphasePairArray & getOverlappingPairArray()
virtual void setOverlapFilterCallback(btOverlapFilterCallback *)
void cleanProxyFromPairs(btBroadphaseProxy *proxy, btDispatcher *dispatcher)
const btBroadphasePair * getOverlappingPairArrayPtr() const
virtual int getNumOverlappingPairs() const =0
void setOverlapFilterCallback(btOverlapFilterCallback *callback)
btSortedOverlappingPairCache()
btBroadphasePairArray & getOverlappingPairArray()
const btBroadphasePair * getOverlappingPairArrayPtr() const
int getNumOverlappingPairs() const
btOverlapFilterCallback * m_overlapFilterCallback
int m_collisionFilterGroup
btAlignedObjectArray< int > m_next
virtual btBroadphasePair * findPair(btBroadphaseProxy *, btBroadphaseProxy *)
virtual void processAllOverlappingPairs(btOverlapCallback *callback, btDispatcher *dispatcher, const struct btDispatcherInfo &)
btBroadphasePairArray m_overlappingPairArray
virtual void processAllOverlappingPairs(btOverlapCallback *, btDispatcher *dispatcher)=0
btBroadphasePair * findPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)
this findPair becomes really slow.
bool equalsPair(const btBroadphasePair &pair, int proxyId1, int proxyId2)
btOverlappingPairCallback * m_ghostPairCallback
void setOverlapFilterCallback(btOverlapFilterCallback *callback)
virtual btBroadphasePair * getOverlappingPairArrayPtr()
int getNumOverlappingPairs() const
btBroadphaseProxy * m_pProxy1
virtual btBroadphasePair * getOverlappingPairArrayPtr()
The btOverlappingPairCache provides an interface for overlapping pair management (add,...
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *ghostPairCallback)
btBroadphasePair * addOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)
virtual btBroadphasePair * getOverlappingPairArrayPtr()=0
const btBroadphasePairArray & getOverlappingPairArray() const
virtual void cleanOverlappingPair(btBroadphasePair &pair, btDispatcher *dispatcher)=0
virtual void cleanOverlappingPair(btBroadphasePair &, btDispatcher *)
virtual bool needsBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const =0
const btBroadphasePairArray & getOverlappingPairArray() const
void cleanOverlappingPair(btBroadphasePair &pair, btDispatcher *dispatcher)
btBroadphaseProxy * m_pProxy0
btAlignedObjectArray< btBroadphasePair > btBroadphasePairArray
virtual void cleanProxyFromPairs(btBroadphaseProxy *, btDispatcher *)
virtual bool hasDeferredRemoval()=0
virtual void setOverlapFilterCallback(btOverlapFilterCallback *callback)=0
virtual bool hasDeferredRemoval()
btOverlapFilterCallback * m_overlapFilterCallback
#define ATTRIBUTE_ALIGNED16(a)
btOverlapFilterCallback * getOverlapFilterCallback()
virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy *, btDispatcher *)
const btBroadphasePair * getOverlappingPairArrayPtr() const
btBroadphasePair * getOverlappingPairArrayPtr()
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *ghostPairCallback)=0
bool m_hasDeferredRemoval
by default, do the removal during the pair traversal
#define SIMD_FORCE_INLINE
virtual void * removeOverlappingPair(btBroadphaseProxy *, btBroadphaseProxy *, btDispatcher *)
btSortedOverlappingPairCache maintains the objects with overlapping AABB Typically managed by the Bro...
virtual btBroadphasePair * addOverlappingPair(btBroadphaseProxy *, btBroadphaseProxy *)
void * removeOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1, btDispatcher *dispatcher)
bool needsBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const
virtual bool needBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const =0
virtual btBroadphasePair * addOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)
virtual ~btOverlapCallback()
virtual ~btOverlapFilterCallback()
virtual btBroadphasePair * findPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)=0
virtual void sortOverlappingPairs(btDispatcher *dispatcher)=0
virtual void sortOverlappingPairs(btDispatcher *dispatcher)
bool needsBroadphaseCollision(btBroadphaseProxy *, btBroadphaseProxy *) const
virtual bool hasDeferredRemoval()
void removeOverlappingPairsContainingProxy(btBroadphaseProxy *proxy, btDispatcher *dispatcher)
virtual ~btSortedOverlappingPairCache()
bool needsBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const
virtual void cleanProxyFromPairs(btBroadphaseProxy *proxy, btDispatcher *dispatcher)=0
btAlignedObjectArray< int > m_hashTable
btBroadphasePair * internalFindPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1, int hash)
virtual const btBroadphasePair * getOverlappingPairArrayPtr() const =0
virtual btOverlapFilterCallback * getOverlapFilterCallback()=0
virtual bool hasDeferredRemoval()
The btBroadphasePair class contains a pair of aabb-overlapping objects.
virtual ~btOverlappingPairCache()
virtual void processAllOverlappingPairs(btOverlapCallback *, btDispatcher *)
int size() const
return the number of elements in the array
virtual bool processOverlap(btBroadphasePair &pair)=0
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *)