|
@@ -73,6 +73,7 @@ void BroadPhaseQuadTree::Optimize()
|
|
{
|
|
{
|
|
JPH_PROFILE_FUNCTION();
|
|
JPH_PROFILE_FUNCTION();
|
|
|
|
|
|
|
|
+ // Free the previous tree so we can create a new optimized tree
|
|
FrameSync();
|
|
FrameSync();
|
|
|
|
|
|
LockModifications();
|
|
LockModifications();
|
|
@@ -80,7 +81,7 @@ void BroadPhaseQuadTree::Optimize()
|
|
for (uint l = 0; l < mNumLayers; ++l)
|
|
for (uint l = 0; l < mNumLayers; ++l)
|
|
{
|
|
{
|
|
QuadTree &tree = mLayers[l];
|
|
QuadTree &tree = mLayers[l];
|
|
- if (tree.HasBodies())
|
|
|
|
|
|
+ if (tree.HasBodies() || tree.IsDirty())
|
|
{
|
|
{
|
|
QuadTree::UpdateState update_state;
|
|
QuadTree::UpdateState update_state;
|
|
tree.UpdatePrepare(mBodyManager->GetBodies(), mTracking, update_state, true);
|
|
tree.UpdatePrepare(mBodyManager->GetBodies(), mTracking, update_state, true);
|
|
@@ -90,6 +91,9 @@ void BroadPhaseQuadTree::Optimize()
|
|
|
|
|
|
UnlockModifications();
|
|
UnlockModifications();
|
|
|
|
|
|
|
|
+ // Free the tree from before we created a new optimized tree
|
|
|
|
+ FrameSync();
|
|
|
|
+
|
|
mNextLayerToUpdate = 0;
|
|
mNextLayerToUpdate = 0;
|
|
}
|
|
}
|
|
|
|
|