29#ifndef BP_BROADPHASE_SAP_AUX_H
30#define BP_BROADPHASE_SAP_AUX_H
32#include "foundation/PxAssert.h"
33#include "foundation/PxIntrinsics.h"
34#include "foundation/PxUserAllocated.h"
35#include "BpBroadPhase.h"
36#include "BpBroadPhaseIntegerAABB.h"
37#include "foundation/PxBitMap.h"
41class PxcScratchAllocator;
44#define ALIGN_SIZE_16(size) ((unsigned(size)+15)&(unsigned(~15)))
46#define NUM_SENTINELS 2
48#define BP_SAP_USE_PREFETCH 1
50#define BP_SAP_USE_OVERLAP_TEST_ON_REMOVES 1
54#define BP_SAP_TEST_GROUP_ID_CREATEUPDATE 1
56#define MAX_BP_HANDLE 0x3fffffff
57#define PX_REMOVED_BP_HANDLE 0x3ffffffd
62 d = (BP_INVALID_BP_HANDLE & ~1);
68 d = BP_INVALID_BP_HANDLE;
73 BpHandle d = BpHandle(owner_box_id<<1);
80 return (d&~1)==(BP_INVALID_BP_HANDLE & ~1);
85 return BpHandle(d & 1);
90 return BpHandle(d>>1);
109 void init(
const PxU32 size);
114 const BroadPhasePair* AddPair (BpHandle id0, BpHandle id1,
const PxU8 state);
115 bool RemovePair (BpHandle id0, BpHandle id1);
116 bool RemovePairs (
const PxBitMap& removedAABBs);
117 const BroadPhasePair* FindPair (BpHandle id0, BpHandle id1)
const;
121 return (PxU32((
size_t(pair) -
size_t(mActivePairs)))/
sizeof(
BroadPhasePair));
124 BpHandle* mHashTable;
128 PxU32 mMinAllowedHashCapacity;
130 PxU8* mActivePairStates;
131 PxU32 mNbActivePairs;
132 PxU32 mActivePairsCapacity;
135 BroadPhasePair* FindPair (BpHandle id0, BpHandle id1, PxU32 hash_value)
const;
136 void RemovePair (BpHandle id0, BpHandle id1, PxU32 hash_value, PxU32 pair_index);
137 void reallocPairs(
const bool allocRequired);
149 const PxU8 state=mActivePairStates[pair-mActivePairs];
150 return state & PAIR_INARRAY ? true :
false;
154 const PxU8 state=mActivePairStates[pair-mActivePairs];
155 return state & PAIR_REMOVED ? true :
false;
159 const PxU8 state=mActivePairStates[pair-mActivePairs];
160 return state & PAIR_NEW ? true :
false;
164 const PxU8 state=mActivePairStates[pair-mActivePairs];
165 return state & PAIR_UNKNOWN ? true :
false;
170 mActivePairStates[pair-mActivePairs]=0;
175 mActivePairStates[pair-mActivePairs] |= PAIR_INARRAY;
179 mActivePairStates[pair-mActivePairs] |= PAIR_REMOVED;
183 mActivePairStates[pair-mActivePairs] |= PAIR_NEW;
187 mActivePairStates[pair-mActivePairs] &= ~PAIR_INARRAY;
191 mActivePairStates[pair-mActivePairs] &= ~PAIR_REMOVED;
195 mActivePairStates[pair-mActivePairs] &= ~PAIR_NEW;
201 DataArray(BpHandle* data, PxU32 size, PxU32 capacity) : mData(data), mSize(size), mCapacity(capacity) {}
212 Resize(scratchAllocator);
214 PX_ASSERT(mSize<mCapacity);
215 mData[mSize++] = BpHandle(data);
222void ComputeCreatedDeletedPairsLists
223(
const Bp::FilterGroup::Enum*
PX_RESTRICT boxGroups,
224 const BpHandle*
PX_RESTRICT dataArray,
const PxU32 dataArraySize,
226 BroadPhasePair* & createdPairsList, PxU32& numCreatedPairs, PxU32& maxNumCreatdPairs,
227 BroadPhasePair* & deletedPairsList, PxU32& numDeletedPairs, PxU32& maxNumDeletedPairs,
228 PxU32&numActualDeletedPairs,
252 Bp::FilterGroup::Enum* mGroups;
258 const bool* lut,
SapPairManager& pairManager, BpHandle*& dataArray, PxU32& dataArraySize, PxU32& dataArrayCapacity);
261 const bool* lut,
SapPairManager& pairManager, BpHandle*& dataArray, PxU32& dataArraySize, PxU32& dataArrayCapacity);
264(
const BpHandle bDir1Min,
const BpHandle bDir1Max,
const BpHandle bDir2Min,
const BpHandle bDir2Max,
265 const BpHandle cDir1Min,
const BpHandle cDir1Max,
const BpHandle cDir2Min,
const BpHandle cDir2Max)
267 return (bDir1Max > cDir1Min && cDir1Max > bDir1Min &&
268 bDir2Max > cDir2Min && cDir2Max > bDir2Min);
Definition BpBroadPhaseSapAux.h:94
Definition BpBroadPhaseSapAux.h:104
Definition PxcScratchAllocator.h:42
#define PX_RESTRICT
Definition PxPreprocessor.h:355
#define PX_NOINLINE
Definition PxPreprocessor.h:346
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Definition BpBroadPhaseSapAux.h:246
Definition BpBroadPhaseSapAux.h:232
Definition BpBroadPhaseSapAux.h:238
Definition BpBroadPhase.h:82
Definition BpBroadPhaseSapAux.h:200