Browse Source

Also checking deactivate / destroy bodies if there is any work to do before locking

Jorrit Rouwe 4 years ago
parent
commit
cab155c4a5
1 changed files with 8 additions and 0 deletions
  1. 8 0
      Jolt/Physics/Body/BodyManager.cpp

+ 8 - 0
Jolt/Physics/Body/BodyManager.cpp

@@ -167,6 +167,10 @@ Body *BodyManager::CreateBody(const BodyCreationSettings &inBodyCreationSettings
 
 
 void BodyManager::DestroyBodies(const BodyID *inBodyIDs, int inNumber)
 void BodyManager::DestroyBodies(const BodyID *inBodyIDs, int inNumber)
 {
 {
+	// Don't take lock if no bodies are to be destroyed
+	if (inNumber <= 0)
+		return;
+
 	UniqueLock<Mutex> lock(mBodiesMutex, EPhysicsLockTypes::BodiesList);
 	UniqueLock<Mutex> lock(mBodiesMutex, EPhysicsLockTypes::BodiesList);
 
 
 	// Update cached number of bodies
 	// Update cached number of bodies
@@ -246,6 +250,10 @@ void BodyManager::ActivateBodies(const BodyID *inBodyIDs, int inNumber)
 
 
 void BodyManager::DeactivateBodies(const BodyID *inBodyIDs, int inNumber)
 void BodyManager::DeactivateBodies(const BodyID *inBodyIDs, int inNumber)
 {
 {
+	// Don't take lock if no bodies are to be deactivated
+	if (inNumber <= 0)
+		return;
+
 	UniqueLock<Mutex> lock(mActiveBodiesMutex, EPhysicsLockTypes::ActiveBodiesList);
 	UniqueLock<Mutex> lock(mActiveBodiesMutex, EPhysicsLockTypes::ActiveBodiesList);
 
 
 	JPH_ASSERT(!mActiveBodiesLocked || sOverrideAllowDeactivation);
 	JPH_ASSERT(!mActiveBodiesLocked || sOverrideAllowDeactivation);