aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Source/LowLevelAABB/src
diff options
context:
space:
mode:
authorSheikh Dawood Abdul Ajees <[email protected]>2017-04-25 16:02:08 -0500
committerSheikh Dawood Abdul Ajees <[email protected]>2017-04-25 16:02:08 -0500
commitd11708e398c2f6377d9eac2b1f7248c62faab569 (patch)
tree5778e794690c046ab4b0205d8f764960a5af168b /PhysX_3.4/Source/LowLevelAABB/src
parentPhysX 3.4, APEX 1.4 patch release @21821222 (diff)
downloadphysx-3.4-d11708e398c2f6377d9eac2b1f7248c62faab569.tar.xz
physx-3.4-d11708e398c2f6377d9eac2b1f7248c62faab569.zip
PhysX 3.4, APEX 1.4 patch release @22017166
Diffstat (limited to 'PhysX_3.4/Source/LowLevelAABB/src')
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhase.cpp2
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.cpp7
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.h27
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.cpp10
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.h15
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.cpp4
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.h11
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpSAPTasks.h4
-rw-r--r--PhysX_3.4/Source/LowLevelAABB/src/BpSimpleAABBManager.cpp80
9 files changed, 100 insertions, 60 deletions
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhase.cpp b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhase.cpp
index d39cf594..a68fe607 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhase.cpp
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhase.cpp
@@ -48,7 +48,7 @@ BroadPhase* BroadPhase::create(
PX_ASSERT(bpType==PxBroadPhaseType::eMBP || bpType == PxBroadPhaseType::eSAP);
if(bpType==PxBroadPhaseType::eMBP)
- return PX_NEW(BroadPhaseMBP)(maxNbRegions, maxNbBroadPhaseOverlaps, maxNbStaticShapes, maxNbDynamicShapes);
+ return PX_NEW(BroadPhaseMBP)(maxNbRegions, maxNbBroadPhaseOverlaps, maxNbStaticShapes, maxNbDynamicShapes, contextID);
else
return PX_NEW(BroadPhaseSap)(maxNbBroadPhaseOverlaps, maxNbStaticShapes, maxNbDynamicShapes, contextID);
}
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.cpp b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.cpp
index 7220976a..b4a448d7 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.cpp
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.cpp
@@ -3374,10 +3374,13 @@ void MBP::setTransientBounds(const PxBounds3* bounds, const PxReal* contactDista
#define DEFAULT_CREATED_DELETED_PAIRS_CAPACITY 1024
-BroadPhaseMBP::BroadPhaseMBP(PxU32 maxNbRegions,
+BroadPhaseMBP::BroadPhaseMBP( PxU32 maxNbRegions,
PxU32 maxNbBroadPhaseOverlaps,
PxU32 maxNbStaticShapes,
- PxU32 maxNbDynamicShapes) :
+ PxU32 maxNbDynamicShapes,
+ PxU64 contextID) :
+ mMBPUpdateWorkTask (contextID),
+ mMBPPostUpdateWorkTask (contextID),
mMapping (NULL),
mCapacity (0),
mGroups (NULL)
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.h b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.h
index 9e3ddbfb..ffc52ae2 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.h
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseMBP.h
@@ -53,7 +53,9 @@ namespace Bp
BroadPhaseMBP(PxU32 maxNbRegions,
PxU32 maxNbBroadPhaseOverlaps,
PxU32 maxNbStaticShapes,
- PxU32 maxNbDynamicShapes);
+ PxU32 maxNbDynamicShapes,
+ PxU64 contextID
+ );
virtual ~BroadPhaseMBP();
// BroadPhaseBase
@@ -67,23 +69,24 @@ namespace Bp
//~BroadPhaseBase
// BroadPhase
- virtual PxBroadPhaseType::Enum getType() const { return PxBroadPhaseType::eMBP; }
+ virtual PxBroadPhaseType::Enum getType() const { return PxBroadPhaseType::eMBP; }
- virtual void destroy();
+ virtual void destroy();
- virtual void update(const PxU32 numCpuTasks, PxcScratchAllocator* scratchAllocator, const BroadPhaseUpdateData& updateData, physx::PxBaseTask* continuation, physx::PxBaseTask* narrowPhaseUnblockTask);
+ virtual void update(const PxU32 numCpuTasks, PxcScratchAllocator* scratchAllocator, const BroadPhaseUpdateData& updateData, physx::PxBaseTask* continuation, physx::PxBaseTask* narrowPhaseUnblockTask);
+ virtual void fetchBroadPhaseResults(physx::PxBaseTask*) {}
- virtual PxU32 getNbCreatedPairs() const;
- virtual BroadPhasePairReport* getCreatedPairs();
- virtual PxU32 getNbDeletedPairs() const;
- virtual BroadPhasePairReport* getDeletedPairs();
+ virtual PxU32 getNbCreatedPairs() const;
+ virtual BroadPhasePairReport* getCreatedPairs();
+ virtual PxU32 getNbDeletedPairs() const;
+ virtual BroadPhasePairReport* getDeletedPairs();
- virtual void freeBuffers();
+ virtual void freeBuffers();
- virtual void shiftOrigin(const PxVec3& shift);
+ virtual void shiftOrigin(const PxVec3& shift);
#if PX_CHECKED
- virtual bool isValid(const BroadPhaseUpdateData& updateData) const;
+ virtual bool isValid(const BroadPhaseUpdateData& updateData) const;
#endif
virtual BroadPhasePair* getBroadPhasePairs() const {return NULL;} //KS - TODO - implement this!!!
@@ -103,7 +106,7 @@ namespace Bp
Ps::Array<BroadPhasePairReport> mCreated;
Ps::Array<BroadPhasePairReport> mDeleted;
- const BpHandle* mGroups; // ### why are those 'handles'?
+ const BpHandle* mGroups; // ### why are those 'handles'?
void setUpdateData(const BroadPhaseUpdateData& updateData);
void update(physx::PxBaseTask* continuation);
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.cpp b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.cpp
index 6f0c163d..b490c4fd 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.cpp
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.cpp
@@ -55,9 +55,15 @@ BroadPhaseSap::BroadPhaseSap(
const PxU32 maxNbStaticShapes,
const PxU32 maxNbDynamicShapes,
PxU64 contextID) :
- mScratchAllocator (NULL),
- mContextID (contextID)
+ mScratchAllocator (NULL),
+ mSapUpdateWorkTask (contextID),
+ mSapPostUpdateWorkTask (contextID),
+ mContextID (contextID)
{
+
+ for(PxU32 i=0;i<3;i++)
+ mBatchUpdateTasks[i].setContextId(contextID);
+
//Boxes
mBoxesSize=0;
mBoxesSizePrev=0;
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.h b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.h
index 34c935ed..9d292c0f 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.h
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpBroadPhaseSap.h
@@ -60,13 +60,13 @@ class BroadPhaseBatchUpdateWorkTask: public Cm::Task
{
public:
- BroadPhaseBatchUpdateWorkTask()
- : Cm::Task(),
- mSap(NULL),
- mAxis(0xffffffff),
- mPairs(NULL),
- mPairsSize(0),
- mPairsCapacity(0)
+ BroadPhaseBatchUpdateWorkTask(PxU64 contextId=0) :
+ Cm::Task(contextId),
+ mSap(NULL),
+ mAxis(0xffffffff),
+ mPairs(NULL),
+ mPairsSize(0),
+ mPairsCapacity(0)
{
}
@@ -118,6 +118,7 @@ public:
virtual PxBroadPhaseType::Enum getType() const { return PxBroadPhaseType::eSAP; }
virtual void update(const PxU32 numCpuTasks, PxcScratchAllocator* scratchAllocator, const BroadPhaseUpdateData& updateData, physx::PxBaseTask* continuation, physx::PxBaseTask* narrowPhaseUnblockTask);
+ virtual void fetchBroadPhaseResults(physx::PxBaseTask*) {}
virtual PxU32 getNbCreatedPairs() const { return mCreatedPairsSize; }
virtual BroadPhasePairReport* getCreatedPairs() { return mCreatedPairsArray; }
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.cpp b/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.cpp
index 9524329c..ddadd59c 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.cpp
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.cpp
@@ -36,7 +36,7 @@ using namespace Bp;
///////////////////////////////////////////////////////////////////////////////
-MBPUpdateWorkTask::MBPUpdateWorkTask()
+MBPUpdateWorkTask::MBPUpdateWorkTask(PxU64 contextId) : MBPTask(contextId)
{
}
@@ -44,7 +44,7 @@ MBPUpdateWorkTask::~MBPUpdateWorkTask()
{
}
-MBPPostUpdateWorkTask::MBPPostUpdateWorkTask()
+MBPPostUpdateWorkTask::MBPPostUpdateWorkTask(PxU64 contextId) : MBPTask(contextId)
{
}
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.h b/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.h
index 4993d536..9f392235 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.h
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpMBPTasks.h
@@ -47,9 +47,10 @@ namespace physx
class MBPTask : public Cm::Task, public shdfnd::UserAllocated
{
public:
- MBPTask() :
- mMBP (NULL),
- mNumCpuTasks (0)
+ MBPTask(PxU64 contextId) :
+ Cm::Task (contextId),
+ mMBP (NULL),
+ mNumCpuTasks (0)
{}
PX_FORCE_INLINE void setBroadphase(Bp::BroadPhaseMBP* mbp) { mMBP = mbp; }
@@ -70,7 +71,7 @@ namespace physx
class MBPUpdateWorkTask : public MBPTask
{
public:
- MBPUpdateWorkTask();
+ MBPUpdateWorkTask(PxU64 contextId);
~MBPUpdateWorkTask();
// PxBaseTask
virtual const char* getName() const { return "BpMBP.updateWork"; }
@@ -89,7 +90,7 @@ namespace physx
class MBPPostUpdateWorkTask : public MBPTask
{
public:
- MBPPostUpdateWorkTask();
+ MBPPostUpdateWorkTask(PxU64 contextId);
// PxBaseTask
virtual const char* getName() const { return "BpMBP.postUpdateWork"; }
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpSAPTasks.h b/PhysX_3.4/Source/LowLevelAABB/src/BpSAPTasks.h
index 229f01dc..96442524 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpSAPTasks.h
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpSAPTasks.h
@@ -44,7 +44,7 @@ namespace Bp
{
public:
- SapUpdateWorkTask()
+ SapUpdateWorkTask(PxU64 contextId) : Cm::Task(contextId)
{
}
@@ -72,7 +72,7 @@ namespace Bp
{
public:
- SapPostUpdateWorkTask()
+ SapPostUpdateWorkTask(PxU64 contextId) : Cm::Task(contextId)
{
}
diff --git a/PhysX_3.4/Source/LowLevelAABB/src/BpSimpleAABBManager.cpp b/PhysX_3.4/Source/LowLevelAABB/src/BpSimpleAABBManager.cpp
index ad3adf60..355082bb 100644
--- a/PhysX_3.4/Source/LowLevelAABB/src/BpSimpleAABBManager.cpp
+++ b/PhysX_3.4/Source/LowLevelAABB/src/BpSimpleAABBManager.cpp
@@ -1514,7 +1514,7 @@ void SimpleAABBManager::reserveShapeSpace(PxU32 nbTotalBounds)
#endif
SimpleAABBManager::SimpleAABBManager(BroadPhase& bp, BoundsArray& boundsArray, Ps::Array<PxReal, Ps::VirtualAllocator>& contactDistance, PxU32 maxNbAggregates, PxU32 maxNbShapes, Ps::VirtualAllocator& allocator, PxU64 contextID) :
- mPostBroadPhase (this, "postBroadPhase"),
+ mFinalizeUpdateTask (contextID),
mChangedHandleMap (allocator),
mGroups (allocator),
mContactDistance (contactDistance),
@@ -1832,10 +1832,15 @@ void SimpleAABBManager::handleOriginShift()
// PT: TODO: check that aggregates code is correct here
for(PxU32 i=0; i<mUsedSize; i++)
{
- if(!mAddedHandleMap.test(i) && mGroups[i] != PX_INVALID_U32)
+ if(mGroups[i] == PX_INVALID_U32)
+ continue;
+
{
if(mVolumeData[i].isSingleActor())
- mUpdatedHandles.pushBack(i); // PT: TODO: BoundsIndex-to-ShapeHandle confusion here
+ {
+ if(!mAddedHandleMap.test(i))
+ mUpdatedHandles.pushBack(i); // PT: TODO: BoundsIndex-to-ShapeHandle confusion here
+ }
else if(mVolumeData[i].isAggregate())
{
const AggregateHandle aggregateHandle = mVolumeData[i].getAggregate();
@@ -1846,7 +1851,8 @@ void SimpleAABBManager::handleOriginShift()
aggregate->allocateBounds();
aggregate->computeBounds(mBoundsArray, mContactDistance.begin());
mBoundsArray.begin()[aggregate->mIndex] = aggregate->mBounds;
- mUpdatedHandles.pushBack(i); // PT: TODO: BoundsIndex-to-ShapeHandle confusion here
+ if(!mAddedHandleMap.test(i))
+ mUpdatedHandles.pushBack(i); // PT: TODO: BoundsIndex-to-ShapeHandle confusion here
}
}
}
@@ -1888,7 +1894,7 @@ void SimpleAABBManager::startAggregateBoundsComputationTasks(PxU32 nbToGo, PxU32
PxU32 start = 0;
while(nbToGo)
{
- AggregateBoundsComputationTask* T = PX_PLACEMENT_NEW(flushPool.allocate(sizeof(AggregateBoundsComputationTask)), AggregateBoundsComputationTask());
+ AggregateBoundsComputationTask* T = PX_PLACEMENT_NEW(flushPool.allocate(sizeof(AggregateBoundsComputationTask)), AggregateBoundsComputationTask(mContextID));
const PxU32 nb = nbToGo < nbAggregatesPerTask ? nbToGo : nbAggregatesPerTask;
T->Init(this, start, nb, mDirtyAggregates.begin());
@@ -2096,20 +2102,18 @@ void SimpleAABBManager::finalizeUpdate(PxU32 numCpuTasks, PxcScratchAllocator* s
mPersistentStateChanged = false;
PX_ASSERT(updateData.isValid());
- mPostBroadPhase.setContinuation(continuation);
-
+
//KS - skip broad phase if there are no updated shapes.
if (updateData.getNumCreatedHandles() != 0 || updateData.getNumRemovedHandles() != 0 || updateData.getNumUpdatedHandles() != 0)
- mBroadPhase.update(numCpuTasks, scratchAllocator, updateData, &mPostBroadPhase, narrowPhaseUnlockTask);
- else if (narrowPhaseUnlockTask)
+ mBroadPhase.update(numCpuTasks, scratchAllocator, updateData, continuation, narrowPhaseUnlockTask);
+ else
narrowPhaseUnlockTask->removeReference();
- mPostBroadPhase.removeReference();
}
static PX_FORCE_INLINE void createOverlap(Ps::Array<AABBOverlap>* overlaps, const Ps::Array<VolumeData>& volumeData, PxU32 id0, PxU32 id1, ActorHandle handle)
{
// overlaps.pushBack(AABBOverlap(volumeData[id0].userData, volumeData[id1].userData, handle));
- PxU8 volumeType = PxMax(volumeData[id0].getVolumeType(), volumeData[id1].getVolumeType());
+ const PxU8 volumeType = PxMax(volumeData[id0].getVolumeType(), volumeData[id1].getVolumeType());
overlaps[volumeType].pushBack(AABBOverlap(reinterpret_cast<void*>(size_t(id0)), reinterpret_cast<void*>(size_t(id1)), handle));
}
@@ -2119,8 +2123,8 @@ static PX_FORCE_INLINE void deleteOverlap(Ps::Array<AABBOverlap>* overlaps, cons
// PX_ASSERT(volumeData[id1].userData);
if (volumeData[id0].getUserData() && volumeData[id1].getUserData()) // PT: TODO: no idea if this is the right thing to do or if it's normal to get null ptrs here
{
- PxU8 volumeType = PxMax(volumeData[id0].getVolumeType(), volumeData[id1].getVolumeType());
- // overlaps.pushBack(AABBOverlap(volumeData[id0].userData, volumeData[id1].userData, handle));
+ const PxU8 volumeType = PxMax(volumeData[id0].getVolumeType(), volumeData[id1].getVolumeType());
+// overlaps.pushBack(AABBOverlap(volumeData[id0].userData, volumeData[id1].userData, handle));
overlaps[volumeType].pushBack(AABBOverlap(reinterpret_cast<void*>(size_t(id0)), reinterpret_cast<void*>(size_t(id1)), handle));
}
}
@@ -2440,7 +2444,7 @@ static void processAggregatePairs(AggPairMap& map, SimpleAABBManager& manager)
}
}
-void SimpleAABBManager::postBroadPhase(PxBaseTask*)
+void SimpleAABBManager::postBroadPhase(PxBaseTask*, PxBaseTask* narrowPhaseUnlockTask)
{
PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase", getContextId());
@@ -2449,33 +2453,52 @@ void SimpleAABBManager::postBroadPhase(PxBaseTask*)
// PT: TODO: consider merging mCreatedOverlaps & mDestroyedOverlaps
// PT: TODO: revisit memory management of mCreatedOverlaps & mDestroyedOverlaps
+ //KS - if we ran broad phase, fetch the results now
+ if (mAddedHandles.size() != 0 || mUpdatedHandles.size() != 0 || mRemovedHandles.size() != 0)
+ mBroadPhase.fetchBroadPhaseResults(narrowPhaseUnlockTask);
+
for (PxU32 i = 0; i < VolumeBuckets::eCOUNT; ++i)
{
resetOrClear(mCreatedOverlaps[i]);
resetOrClear(mDestroyedOverlaps[i]);
}
-// processBPPairs<CreatedPairHandler>(mBroadPhase.getNbCreatedPairs(), mBroadPhase.getCreatedPairs(), *this);
- processBPPairs<DeletedPairHandler>(mBroadPhase.getNbDeletedPairs(), mBroadPhase.getDeletedPairs(), *this);
+ {
+ PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase - process deleted pairs", getContextId());
+// processBPPairs<CreatedPairHandler>(mBroadPhase.getNbCreatedPairs(), mBroadPhase.getCreatedPairs(), *this);
+ processBPPairs<DeletedPairHandler>(mBroadPhase.getNbDeletedPairs(), mBroadPhase.getDeletedPairs(), *this);
+ }
{
- processAggregatePairs(mActorAggregatePairs, *this);
- processAggregatePairs(mAggregateAggregatePairs, *this);
+ {
+ PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase - process actor-aggregate pairs", getContextId());
+ processAggregatePairs(mActorAggregatePairs, *this);
+ }
+ {
+ PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase - process aggregate pairs", getContextId());
+ processAggregatePairs(mAggregateAggregatePairs, *this);
+ }
- const PxU32 size = mDirtyAggregates.size();
- for(PxU32 i=0;i<size;i++)
{
- Aggregate* aggregate = mDirtyAggregates[i];
- aggregate->resetDirtyState();
+ PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase - aggregate self-collisions", getContextId());
+ const PxU32 size = mDirtyAggregates.size();
+ for(PxU32 i=0;i<size;i++)
+ {
+ Aggregate* aggregate = mDirtyAggregates[i];
+ aggregate->resetDirtyState();
- if(aggregate->mSelfCollisionPairs)
- updatePairs(*aggregate->mSelfCollisionPairs);
+ if(aggregate->mSelfCollisionPairs)
+ updatePairs(*aggregate->mSelfCollisionPairs);
+ }
+ resetOrClear(mDirtyAggregates);
}
- resetOrClear(mDirtyAggregates);
}
- processBPPairs<CreatedPairHandler>(mBroadPhase.getNbCreatedPairs(), mBroadPhase.getCreatedPairs(), *this);
-// processBPPairs<DeletedPairHandler>(mBroadPhase.getNbDeletedPairs(), mBroadPhase.getDeletedPairs(), *this);
+ {
+ PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase - process created pairs", getContextId());
+ processBPPairs<CreatedPairHandler>(mBroadPhase.getNbCreatedPairs(), mBroadPhase.getCreatedPairs(), *this);
+// processBPPairs<DeletedPairHandler>(mBroadPhase.getNbDeletedPairs(), mBroadPhase.getDeletedPairs(), *this);
+ }
// PT: TODO: revisit this
// Filter out pairs in mDestroyedOverlaps that already exist in mCreatedOverlaps. This should be done better using bitmaps
@@ -2483,6 +2506,8 @@ void SimpleAABBManager::postBroadPhase(PxBaseTask*)
// We could also have a dedicated function "reinsertBroadPhase()", which would preserve the existing interactions at Sc-level.
if(1)
{
+ PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase - post-process", getContextId());
+
PxU32 totalCreatedOverlaps = 0;
for (PxU32 idx = 0; idx < VolumeBuckets::eCOUNT; ++idx)
totalCreatedOverlaps += mCreatedOverlaps[idx].size();
@@ -2523,6 +2548,7 @@ void SimpleAABBManager::postBroadPhase(PxBaseTask*)
// Handle out-of-bounds objects
{
+ PX_PROFILE_ZONE("SimpleAABBManager::postBroadPhase - out-of-bounds", getContextId());
PxU32 nbObjects = mBroadPhase.getNbOutOfBoundsObjects();
const PxU32* objects = mBroadPhase.getOutOfBoundsObjects();
while(nbObjects--)