aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp
diff options
context:
space:
mode:
authorSheikh Dawood <[email protected]>2018-05-25 09:54:38 -0500
committerSheikh Dawood <[email protected]>2018-05-25 09:54:38 -0500
commitb99b3783cd7e3fb1bb0a07dc472b2fc000c4cdc1 (patch)
treede67d7adc7cc66d44c3e0a399d94d1db6bcebd0c /PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp
parentPhysX 3.4, APEX 1.4 patch release @23933511 (diff)
downloadphysx-3.4-b99b3783cd7e3fb1bb0a07dc472b2fc000c4cdc1.tar.xz
physx-3.4-b99b3783cd7e3fb1bb0a07dc472b2fc000c4cdc1.zip
PhysX 3.4, APEX 1.4 patch release @24214033v3.4.2
Diffstat (limited to 'PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp')
-rw-r--r--PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp32
1 files changed, 20 insertions, 12 deletions
diff --git a/PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp b/PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp
index beaa6e01..49e8b818 100644
--- a/PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp
+++ b/PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp
@@ -23,7 +23,7 @@
// components in life support devices or systems without express written approval of
// NVIDIA Corporation.
//
-// Copyright (c) 2008-2017 NVIDIA Corporation. All rights reserved.
+// Copyright (c) 2008-2018 NVIDIA Corporation. All rights reserved.
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
@@ -198,7 +198,7 @@ void ExtendedBucketPruner::resize(PxU32 size)
{
PX_ASSERT(size > mCurrentTreeCapacity);
// allocate new bounds
- PxBounds3* newBounds = reinterpret_cast<PxBounds3*>(PX_ALLOC(sizeof(PxBounds3)*size, "Bounds"));
+ PxBounds3* newBounds = reinterpret_cast<PxBounds3*>(PX_ALLOC(sizeof(PxBounds3)*(size + 1), "Bounds"));
// copy previous bounds
PxMemCopy(newBounds, mBounds, sizeof(PxBounds3)*mCurrentTreeCapacity);
PX_FREE(mBounds);
@@ -333,16 +333,24 @@ void ExtendedBucketPruner::refitMarkedNodes(const PxBounds3* boxes)
// new merged trees size
mCurrentTreeIndex = nbValidTrees;
- // trees have changed, we need to rebuild the main tree
- buildMainAABBTree();
-
- // fixup the object entries, the merge index has changed
- for (ExtendedBucketPrunerMap::Iterator iter = mExtendedBucketPrunerMap.getIterator(); !iter.done(); ++iter)
- {
- ExtendedBucketPrunerData& data = iter->second;
- PX_ASSERT(swapMap[data.mMergeIndex] < nbValidTrees);
- data.mMergeIndex = swapMap[data.mMergeIndex];
- }
+ if(mCurrentTreeIndex)
+ {
+ // trees have changed, we need to rebuild the main tree
+ buildMainAABBTree();
+
+ // fixup the object entries, the merge index has changed
+ for (ExtendedBucketPrunerMap::Iterator iter = mExtendedBucketPrunerMap.getIterator(); !iter.done(); ++iter)
+ {
+ ExtendedBucketPrunerData& data = iter->second;
+ PX_ASSERT(swapMap[data.mMergeIndex] < nbValidTrees);
+ data.mMergeIndex = swapMap[data.mMergeIndex];
+ }
+ }
+ else
+ {
+ // if there is no tree release the main tree
+ mMainTree->release();
+ }
PX_FREE(swapMap);
}
#if PX_DEBUG