summaryrefslogtreecommitdiffstats
path: root/thirdparty/meshoptimizer/patches/distance-only-metric.patch
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/meshoptimizer/patches/distance-only-metric.patch')
-rw-r--r--thirdparty/meshoptimizer/patches/distance-only-metric.patch39
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