@@ -1541,6 +1541,7 @@ SubdivShape::SubdivShape(
15411541 const u_int maxLevel,
15421542 const float maxEdgeScreenSize,
15431543 const bool enhanced,
1544+ const bool merge_before,
15441545 const float sharpnessThresholdRadians,
15451546 const float creaseWeight
15461547) {
@@ -1556,10 +1557,11 @@ SubdivShape::SubdivShape(
15561557 if (maxLevel > 0 ) {
15571558
15581559 // Merge vertices on distance
1559- auto srcMeshPtr = MergeOnDistanceShape::ApplyMergeOnDistance (
1560- rawSrcMesh, std::numeric_limits<float >::min (), true
1561- );
1562- auto & srcMesh = *srcMeshPtr;
1560+ auto srcMeshPtr = merge_before ?
1561+ MergeOnDistanceShape::ApplyMergeOnDistance (
1562+ rawSrcMesh, std::numeric_limits<float >::min (), true
1563+ ) : nullptr ;
1564+ auto & srcMesh = merge_before ? *srcMeshPtr : rawSrcMesh;
15631565
15641566 if (camera && (maxEdgeScreenSize > 0 .f )) {
15651567 SDL_LOG (" Subdividing shape " << srcMesh.GetName ()
@@ -1594,6 +1596,7 @@ SubdivShape::SubdivShape(
15941596 *mesh,
15951597 optimizedLevel,
15961598 enhanced,
1599+ merge_before,
15971600 sharpnessThresholdRadians,
15981601 creaseWeight
15991602 );
@@ -1610,7 +1613,7 @@ SubdivShape::SubdivShape(
16101613 } else {
16111614 SDL_LOG (" Subdividing shape " << srcMesh.GetName () << " at level: " << maxLevel);
16121615
1613- mesh = ApplySubdiv (srcMesh, maxLevel, enhanced, sharpnessThresholdRadians, creaseWeight);
1616+ mesh = ApplySubdiv (srcMesh, maxLevel, enhanced, merge_before, sharpnessThresholdRadians, creaseWeight);
16141617 }
16151618 } else {
16161619 // Nothing to do, just make a copy
@@ -1687,6 +1690,7 @@ ExtTriangleMeshUPtr SubdivShape::ApplySubdiv(
16871690 ExtTriangleMeshRef srcMesh,
16881691 const u_int maxLevel,
16891692 const bool enhanced,
1693+ const bool merge_before,
16901694 const float sharpnessThresholdRadians,
16911695 const float creaseWeight
16921696) {
0 commit comments