diff options
| author | Sheikh Dawood <[email protected]> | 2018-05-25 09:54:38 -0500 |
|---|---|---|
| committer | Sheikh Dawood <[email protected]> | 2018-05-25 09:54:38 -0500 |
| commit | b99b3783cd7e3fb1bb0a07dc472b2fc000c4cdc1 (patch) | |
| tree | de67d7adc7cc66d44c3e0a399d94d1db6bcebd0c /PhysX_3.4/Source/SceneQuery/src/SqExtendedBucketPruner.cpp | |
| parent | PhysX 3.4, APEX 1.4 patch release @23933511 (diff) | |
| download | physx-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.cpp | 32 |
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 |