MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / addTree

Method addTree

physx/source/scenequery/src/SqExtendedBucketPruner.cpp:128–175  ·  view source on GitHub ↗

///////////////////////////////////////////////////////////////////// Add a tree from a pruning structure 1. get new tree index 2. initialize merged tree, bounds 3. create update map for the merged tree 4. build new tree of trees from given trees bounds 5. add new objects into extended bucket pruner map 6. shift indices in the merged tree

Source from the content-addressed store, hash-verified

126// 5. add new objects into extended bucket pruner map
127// 6. shift indices in the merged tree
128void ExtendedBucketPruner::addTree(const AABBTreeMergeData& mergeData, PxU32 timeStamp)
129{
130 // check if we have to resize
131 if(mCurrentTreeIndex == mCurrentTreeCapacity)
132 {
133 resize(mCurrentTreeCapacity*2);
134 }
135
136 // get current merge tree index
137 const PxU32 mergeTreeIndex = mCurrentTreeIndex++;
138
139 // get payloads pointers - the pointers start at mIndicesOffset, thats where all
140 // objects were added before merge was called
141 const PrunerPayload* payloads = &mPruningPool->getObjects()[mergeData.mIndicesOffset];
142
143 // setup merged tree with the merge data and timestamp
144 mMergedTrees[mergeTreeIndex].mTimeStamp = timeStamp;
145 AABBTree& mergedTree = *mMergedTrees[mergeTreeIndex].mTree;
146 mergedTree.initTree(mergeData);
147 // set bounds
148 mBounds[mergeTreeIndex] = mergeData.getRootNode().mBV;
149
150 // update temporally update map for the current merge tree, map is used to setup the base extended bucket pruner map
151 mMergeTreeUpdateMap.initMap(mergeData.mNbIndices, mergedTree);
152
153 // create new base tree of trees
154 buildMainAABBTree();
155
156 // Add each object into extended bucket pruner hash map
157 for (PxU32 i = 0; i < mergeData.mNbIndices; i++)
158 {
159 ExtendedBucketPrunerData mapData;
160 mapData.mMergeIndex = mergeTreeIndex;
161 mapData.mTimeStamp = timeStamp;
162 PX_ASSERT(mMergeTreeUpdateMap[i] < mergedTree.getNbNodes());
163 // get node information from the merge tree update map
164 mapData.mSubTreeNode = mMergeTreeUpdateMap[i];
165 mExtendedBucketPrunerMap.insert(payloads[i], mapData);
166 }
167 // merged tree indices needs to be shifted now, we cannot shift it in init - the update map
168 // could not be constructed otherwise, as the indices wont start from 0. The indices
169 // needs to be shifted by offset from the pruning pool, where the new objects were added into the pruning pool.
170 mergedTree.shiftIndices(mergeData.mIndicesOffset);
171
172#if PX_DEBUG
173 checkValidity();
174#endif // PX_DEBUG
175}
176
177//////////////////////////////////////////////////////////////////////////
178// Builds the new main AABB tree with given current active merged trees and its bounds

Callers 1

mergeMethod · 0.80

Calls 7

resizeFunction · 0.85
initTreeMethod · 0.80
initMapMethod · 0.80
shiftIndicesMethod · 0.80
getObjectsMethod · 0.45
getNbNodesMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected