///////////////////////////////////////////////////////////////////// Update object
| 223 | ////////////////////////////////////////////////////////////////////////// |
| 224 | // Update object |
| 225 | bool ExtendedBucketPruner::updateObject(const PxBounds3& worldAABB, const PrunerPayload& object, const PoolIndex poolIndex) |
| 226 | { |
| 227 | const ExtendedBucketPrunerMap::Entry* extendedPrunerEntry = mExtendedBucketPrunerMap.find(object); |
| 228 | |
| 229 | // if object is not in tree of trees, it is in bucket pruner core |
| 230 | if(!extendedPrunerEntry) |
| 231 | { |
| 232 | #if USE_INCREMENTAL_PRUNER |
| 233 | PX_UNUSED(worldAABB); |
| 234 | return mPrunerCore.updateObject(poolIndex); |
| 235 | #else |
| 236 | PX_UNUSED(poolIndex); |
| 237 | return mPrunerCore.updateObject(worldAABB, object); |
| 238 | #endif |
| 239 | } |
| 240 | else |
| 241 | { |
| 242 | const ExtendedBucketPrunerData& data = extendedPrunerEntry->second; |
| 243 | |
| 244 | PX_ASSERT(data.mMergeIndex < mCurrentTreeIndex); |
| 245 | |
| 246 | // update tree where objects belongs to |
| 247 | AABBTree& tree = *mMergedTrees[data.mMergeIndex].mTree; |
| 248 | PX_ASSERT(data.mSubTreeNode < tree.getNbNodes()); |
| 249 | // mark for refit node in merged tree |
| 250 | tree.markNodeForRefit(data.mSubTreeNode); |
| 251 | PX_ASSERT(mMainTreeUpdateMap[data.mMergeIndex] < mMainTree->getNbNodes()); |
| 252 | // mark for refit node in main aabb tree |
| 253 | mMainTree->markNodeForRefit(mMainTreeUpdateMap[data.mMergeIndex]); |
| 254 | mTreesDirty = true; |
| 255 | } |
| 256 | return true; |
| 257 | } |
| 258 | |
| 259 | ////////////////////////////////////////////////////////////////////////// |
| 260 | // refit merged nodes |
nothing calls this directly
no test coverage detected