diff options
Diffstat (limited to 'thirdparty/meshoptimizer/patches/distance-only-metric.patch')
| -rw-r--r-- | thirdparty/meshoptimizer/patches/distance-only-metric.patch | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/thirdparty/meshoptimizer/patches/distance-only-metric.patch b/thirdparty/meshoptimizer/patches/distance-only-metric.patch new file mode 100644 index 0000000000..651bdba5ef --- /dev/null +++ b/thirdparty/meshoptimizer/patches/distance-only-metric.patch @@ -0,0 +1,39 @@ +diff --git a/thirdparty/meshoptimizer/simplifier.cpp b/thirdparty/meshoptimizer/simplifier.cpp +index 5ba8570076..6f8b0e520e 100644 +--- a/thirdparty/meshoptimizer/simplifier.cpp ++++ b/thirdparty/meshoptimizer/simplifier.cpp +@@ -476,6 +476,8 @@ struct Collapse + float error; + unsigned int errorui; + }; ++ ++ float distance_error; + }; + + static float normalize(Vector3& v) +@@ -941,6 +943,8 @@ static void rankEdgeCollapses(Collapse* collapses, size_t collapse_count, const + float ei = quadricError(vertex_quadrics[remap[i0]], vertex_positions[i1]); + float ej = quadricError(vertex_quadrics[remap[j0]], vertex_positions[j1]); + ++ float dei = ei, dej = ej; ++ + if (attribute_count) + { + ei += quadricError(attribute_quadrics[remap[i0]], &attribute_gradients[remap[i0] * attribute_count], attribute_count, vertex_positions[i1], &vertex_attributes[i1 * attribute_count]); +@@ -951,6 +955,7 @@ static void rankEdgeCollapses(Collapse* collapses, size_t collapse_count, const + c.v0 = ei <= ej ? i0 : j0; + c.v1 = ei <= ej ? i1 : j1; + c.error = ei <= ej ? ei : ej; ++ c.distance_error = ei <= ej ? dei : dej; + } + } + +@@ -1097,7 +1102,7 @@ static size_t performEdgeCollapses(unsigned int* collapse_remap, unsigned char* + triangle_collapses += (vertex_kind[i0] == Kind_Border) ? 1 : 2; + edge_collapses++; + +- result_error = result_error < c.error ? c.error : result_error; ++ result_error = result_error < c.distance_error ? c.distance_error : result_error; + } + + #if TRACE |
