Browse Source

Optimized duplicate / degenerate triangle removal (#367)

Jorrit Rouwe 2 years ago
parent
commit
556a9ff38a
1 changed files with 5 additions and 1 deletions
  1. 5 1
      Jolt/Physics/Collision/Shape/MeshShape.cpp

+ 5 - 1
Jolt/Physics/Collision/Shape/MeshShape.cpp

@@ -96,7 +96,11 @@ void MeshShapeSettings::Sanitize()
 		const IndexedTriangle &tri = mIndexedTriangles[t];
 		const IndexedTriangle &tri = mIndexedTriangles[t];
 		if (tri.IsDegenerate()										// Degenerate triangle
 		if (tri.IsDegenerate()										// Degenerate triangle
 			|| !triangles.insert(tri.GetLowestIndexFirst()).second) // Duplicate triangle
 			|| !triangles.insert(tri.GetLowestIndexFirst()).second) // Duplicate triangle
-			mIndexedTriangles.erase(mIndexedTriangles.begin() + t);
+		{
+			// The order of triangles doesn't matter (gets reordered while building the tree), so we can just swap the last triangle into this slot
+			mIndexedTriangles[t] = mIndexedTriangles.back();
+			mIndexedTriangles.pop_back();
+		}
 	}
 	}
 }
 }