Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimanshi Kalra <calra>2021-08-23 22:19:36 +0300
committerHimanshi Kalra <himanshikalra98@gmail.com>2021-08-23 22:20:03 +0300
commit875c2ea5b5ee8425c3bc969dbaba3fab3ecbaab4 (patch)
tree94d45e8fb3d508e77aa177d253c39186b9863e30 /source/blender/blenkernel/intern
parentbe1891e895c012b36ca574a90b5d90fc1433152e (diff)
Using relative threshold for floats in mesh comparison
Changes the threshold comparison from absolute to relative. Removes threshold for MLoopCol comparison. Adds a compare relative threshold function. Reviewed By: JacquesLucke Differential Revision: https://developer.blender.org/D12273
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/mesh.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index eb8e6aad736..e3650e03c8a 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -466,8 +466,10 @@ static int customdata_compare(
int vtot = m1->totvert;
for (j = 0; j < vtot; j++, v1++, v2++) {
- if (len_squared_v3v3(v1->co, v2->co) > thresh_sq) {
- return MESHCMP_VERTCOMISMATCH;
+ for (int k = 0; k < 3; k++) {
+ if (compare_threshold_relative(v1->co[k], v2->co[k], thresh)) {
+ return MESHCMP_VERTCOMISMATCH;
+ }
}
/* I don't care about normals, let's just do coordinates. */
}
@@ -547,8 +549,7 @@ static int customdata_compare(
int ltot = m1->totloop;
for (j = 0; j < ltot; j++, lp1++, lp2++) {
- if (abs(lp1->r - lp2->r) > thresh || abs(lp1->g - lp2->g) > thresh ||
- abs(lp1->b - lp2->b) > thresh || abs(lp1->a - lp2->a) > thresh) {
+ if (lp1->r != lp2->r || lp1->g != lp2->g || lp1->b != lp2->b || lp1->a != lp2->a) {
return MESHCMP_LOOPCOLMISMATCH;
}
}
@@ -583,7 +584,7 @@ static int customdata_compare(
const float *l2_data = l2->data;
for (int i = 0; i < total_length; i++) {
- if (fabsf(l1_data[i] - l2_data[i]) > thresh) {
+ if (compare_threshold_relative(l1_data[i], l2_data[i], thresh)) {
return MESHCMP_ATTRIBUTE_VALUE_MISMATCH;
}
}
@@ -594,7 +595,10 @@ static int customdata_compare(
const float(*l2_data)[2] = l2->data;
for (int i = 0; i < total_length; i++) {
- if (len_squared_v2v2(l1_data[i], l2_data[i]) > thresh_sq) {
+ if (compare_threshold_relative(l1_data[i][0], l2_data[i][0], thresh)) {
+ return MESHCMP_ATTRIBUTE_VALUE_MISMATCH;
+ }
+ if (compare_threshold_relative(l1_data[i][1], l2_data[i][1], thresh)) {
return MESHCMP_ATTRIBUTE_VALUE_MISMATCH;
}
}
@@ -605,7 +609,13 @@ static int customdata_compare(
const float(*l2_data)[3] = l2->data;
for (int i = 0; i < total_length; i++) {
- if (len_squared_v3v3(l1_data[i], l2_data[i]) > thresh_sq) {
+ if (compare_threshold_relative(l1_data[i][0], l2_data[i][0], thresh)) {
+ return MESHCMP_ATTRIBUTE_VALUE_MISMATCH;
+ }
+ if (compare_threshold_relative(l1_data[i][1], l2_data[i][1], thresh)) {
+ return MESHCMP_ATTRIBUTE_VALUE_MISMATCH;
+ }
+ if (compare_threshold_relative(l1_data[i][2], l2_data[i][2], thresh)) {
return MESHCMP_ATTRIBUTE_VALUE_MISMATCH;
}
}
@@ -639,7 +649,7 @@ static int customdata_compare(
for (int i = 0; i < total_length; i++) {
for (j = 0; j < 4; j++) {
- if (fabsf(l1_data[i].color[j] - l2_data[i].color[j]) > thresh) {
+ if (compare_threshold_relative(l1_data[i].color[j], l2_data[i].color[j], thresh)) {
return MESHCMP_ATTRIBUTE_VALUE_MISMATCH;
}
}