16 #ifndef BT_OVERLAPPING_PAIR_CACHE_H
17 #define BT_OVERLAPPING_PAIR_CACHE_H
113 bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
114 collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
126 return internalAddPair(proxy0, proxy1);
137 return &m_overlappingPairArray[0];
142 return &m_overlappingPairArray[0];
147 return m_overlappingPairArray;
152 return m_overlappingPairArray;
174 return m_overlappingPairArray.
size();
184 return pair.m_pProxy0->getUid() == proxyId1 && pair.m_pProxy1->getUid() == proxyId2;
203 SIMD_FORCE_INLINE unsigned int getHash(
unsigned int proxyId1,
unsigned int proxyId2)
205 unsigned int key = proxyId1 | (proxyId2 << 16);
219 int proxyId1 = proxy0->getUid();
220 int proxyId2 = proxy1->getUid();
222 if (proxyId1 > proxyId2)
223 btSwap(proxyId1, proxyId2);
228 while (index !=
BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) ==
false)
240 return &m_overlappingPairArray[index];
243 virtual bool hasDeferredRemoval()
253 virtual void sortOverlappingPairs(
btDispatcher * dispatcher);
265 bool m_blockedForChanges;
268 bool m_hasDeferredRemoval;
276 btSortedOverlappingPairCache();
277 virtual ~btSortedOverlappingPairCache();
298 bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
299 collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
306 return m_overlappingPairArray;
311 return m_overlappingPairArray;
316 return &m_overlappingPairArray[0];
321 return &m_overlappingPairArray[0];
326 return m_overlappingPairArray.
size();
341 return m_hasDeferredRemoval;
360 return &m_overlappingPairArray[0];
364 return &m_overlappingPairArray[0];
368 return m_overlappingPairArray;
SIMD_FORCE_INLINE bool needsBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const
BT_DECLARE_ALIGNED_ALLOCATOR()
virtual ~btHashedOverlappingPairCache()
btAlignedObjectArray< int > m_next
virtual void * removeOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1, btDispatcher *dispatcher)
virtual void processAllOverlappingPairs(btOverlapCallback *, btDispatcher *dispatcher)
btOverlapFilterCallback * m_overlapFilterCallback
virtual btBroadphasePair * getOverlappingPairArrayPtr()
btHashedOverlappingPairCache()
void removeOverlappingPairsContainingProxy(btBroadphaseProxy *proxy, btDispatcher *dispatcher)
void cleanOverlappingPair(btBroadphasePair &pair, btDispatcher *dispatcher)
int getNumOverlappingPairs() const
btBroadphasePair * findPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)
btAlignedObjectArray< btBroadphasePair > btBroadphasePairArray
virtual btBroadphasePair * addOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)
btOverlappingPairCallback * m_ghostPairCallback
btBroadphasePairArray & getOverlappingPairArray()
btOverlapFilterCallback * getOverlapFilterCallback()
void setOverlapFilterCallback(btOverlapFilterCallback *callback)
void cleanProxyFromPairs(btBroadphaseProxy *proxy, btDispatcher *dispatcher)
btAlignedObjectArray< int > m_hashTable
#define ATTRIBUTE_ALIGNED16(a)
#define SIMD_FORCE_INLINE
SIMD_FORCE_INLINE void btSwap(T &a, T &b)
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
virtual int getNumOverlappingPairs() const =0
virtual void cleanProxyFromPairs(btBroadphaseProxy *proxy, btDispatcher *dispatcher)=0
virtual void setOverlapFilterCallback(btOverlapFilterCallback *callback)=0
virtual void processAllOverlappingPairs(btOverlapCallback *, btDispatcher *dispatcher)=0
virtual btOverlapFilterCallback * getOverlapFilterCallback()=0
virtual btBroadphasePair * getOverlappingPairArrayPtr()=0
virtual const btBroadphasePair * getOverlappingPairArrayPtr() const =0
virtual void cleanOverlappingPair(btBroadphasePair &pair, btDispatcher *dispatcher)=0
virtual btBroadphasePair * findPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)=0
virtual void sortOverlappingPairs(btDispatcher *dispatcher)=0
virtual bool needsBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const =0
virtual ~btOverlappingPairCache()
virtual void setInternalGhostPairCallback(btOverlappingPairCallback *ghostPairCallback)=0
virtual bool hasDeferredRemoval()=0
virtual void processAllOverlappingPairs(btOverlapCallback *callback, btDispatcher *dispatcher, const struct btDispatcherInfo &)
virtual btBroadphasePairArray & getOverlappingPairArray()=0
The btOverlappingPairCallback class is an additional optional broadphase user callback for adding/rem...
virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy *proxy0, btDispatcher *dispatcher)=0
virtual void * removeOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1, btDispatcher *dispatcher)=0
virtual btBroadphasePair * addOverlappingPair(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)=0
DEGForeachIDComponentCallback callback
SyclQueue void void size_t num_bytes void
virtual bool processOverlap(btBroadphasePair &pair)=0
virtual ~btOverlapCallback()
virtual bool needBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const =0
virtual ~btOverlapFilterCallback()