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:
authorBrecht Van Lommel <brecht@blender.org>2020-07-10 19:02:51 +0300
committerBrecht Van Lommel <brecht@blender.org>2020-07-10 19:03:21 +0300
commit3e4f49fe710d5e3233c774de9a9341451d486f51 (patch)
tree229490aa5ab140d3c1405ccd7b12fc9718ce510c /source/blender/blenkernel
parentd5208c45fadbfd59a686eb77a0c4161b02b0e482 (diff)
Revert "Fix T78296: Performance - Use Binary Search for MDeformWeight"
This reverts commit 39b525e0f07fa25dcda54226ade789959b642dec and 3121015dceb1d269d79690c8f15c8e1406c9b09f as tests are failing.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_blender_version.h2
-rw-r--r--source/blender/blenkernel/BKE_deform.h11
-rw-r--r--source/blender/blenkernel/intern/customdata.c2
-rw-r--r--source/blender/blenkernel/intern/deform.c107
-rw-r--r--source/blender/blenkernel/intern/object_deform.c1
5 files changed, 17 insertions, 106 deletions
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 556c1c961dc..57f22a8d709 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -40,7 +40,7 @@ extern "C" {
/* Blender file format version. */
#define BLENDER_FILE_VERSION BLENDER_VERSION
-#define BLENDER_FILE_SUBVERSION 7
+#define BLENDER_FILE_SUBVERSION 6
/* Minimum Blender version that supports reading file written with the current
* version. Older Blender versions will test this and show a warning if the file
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index b5a7df9ff57..04b85aebb39 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -54,7 +54,6 @@ void BKE_object_defgroup_unique_name(struct bDeformGroup *dg, struct Object *ob)
struct MDeformWeight *BKE_defvert_find_index(const struct MDeformVert *dv, const int defgroup);
struct MDeformWeight *BKE_defvert_ensure_index(struct MDeformVert *dv, const int defgroup);
-void BKE_defvert_array_sort_weights(struct MDeformVert *dv, const int num_verts);
void BKE_defvert_add_index_notest(struct MDeformVert *dv, int defgroup, const float weight);
void BKE_defvert_remove_group(struct MDeformVert *dvert, struct MDeformWeight *dw);
void BKE_defvert_clear(struct MDeformVert *dvert);
@@ -164,16 +163,6 @@ void BKE_defvert_extract_vgroup_to_polyweights(struct MDeformVert *dvert,
void BKE_defvert_weight_to_rgb(float r_rgb[3], const float weight);
-#ifndef NDEBUG
-bool BKE_defvert_is_sorted_for_assert(const struct MDeformVert *dv);
-# define BKE_DEFVERT_IS_SORTED_ASSERT(dv) BLI_assert(BKE_defvert_is_sorted_for_assert(dv))
-#else
-# define BKE_DEFVERT_IS_SORTED_ASSERT(dv) \
- if (false) { \
- (void)(dv); \
- }
-#endif
-
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 6e459553a02..c11fa69db76 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -47,7 +47,6 @@
#include "BKE_customdata.h"
#include "BKE_customdata_file.h"
-#include "BKE_deform.h"
#include "BKE_main.h"
#include "BKE_mesh_mapping.h"
#include "BKE_mesh_remap.h"
@@ -321,7 +320,6 @@ static void layerInterp_mdeformvert(const void **sources,
}
dvert->dw[i] = node->dw;
}
- BKE_defvert_array_sort_weights(dvert, totweight);
}
else {
memset(dvert, 0, sizeof(*dvert));
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index 7e924db5ae4..b97935d57f2 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -216,47 +216,6 @@ void BKE_defvert_sync(MDeformVert *dvert_dst, const MDeformVert *dvert_src, cons
}
}
-/* -------------------------------------------------------------------- */
-/** \name Deform Weights - Sorting
- *
- * \{ */
-
-/* Reorder the weights so they are sorted. It is required that all `MDeformVert` weights are sorted
- * so we can use binary search.
- */
-static int defweight_cmp(const void *a, const void *b)
-{
- const MDeformWeight *dw1 = a;
- const MDeformWeight *dw2 = b;
- if (dw1->def_nr < dw2->def_nr) {
- return -1;
- }
- else if (dw1->def_nr > dw2->def_nr) {
- return 1;
- }
- else {
- return 0;
- }
-}
-
-static void defvert_sort_weights(struct MDeformVert *dvert)
-{
- if (dvert->dw) {
- qsort(dvert->dw, dvert->totweight, sizeof(MDeformWeight), defweight_cmp);
- }
-}
-
-void BKE_defvert_array_sort_weights(struct MDeformVert *dvert, const int num_verts)
-{
- if (!dvert) {
- return;
- }
- for (int i = 0; i < num_verts; i++) {
- defvert_sort_weights(&dvert[i]);
- }
-}
-/* \} */
-
/**
* be sure all flip_map values are valid
*/
@@ -301,7 +260,6 @@ void BKE_defvert_remap(MDeformVert *dvert, int *map, const int map_len)
dw->def_nr = map[dw->def_nr];
}
}
- defvert_sort_weights(dvert);
}
/**
@@ -501,7 +459,6 @@ void BKE_defvert_flip(MDeformVert *dvert, const int *flip_map, const int flip_ma
}
}
}
- defvert_sort_weights(dvert);
}
void BKE_defvert_flip_merged(MDeformVert *dvert, const int *flip_map, const int flip_map_len)
@@ -708,40 +665,23 @@ float BKE_defvert_array_find_weight_safe(const struct MDeformVert *dvert,
return BKE_defvert_find_weight(dvert + index, defgroup);
}
-static int defvert_index_get(const MDeformVert *dvert, const int defgroup)
-{
- int low = 0;
- int high = dvert->totweight - 1;
- int mid;
- while (low < high) {
- mid = (low + high) / 2;
- MDeformWeight *dweight = &dvert->dw[mid];
- const unsigned int dweight_def_nr = dweight->def_nr;
- if (dweight_def_nr == defgroup) {
- return mid;
- }
- if (dweight_def_nr < defgroup) {
- low = mid + 1;
- }
- else {
- high = mid - 1;
- }
- }
- return -1;
-}
-
MDeformWeight *BKE_defvert_find_index(const MDeformVert *dvert, const int defgroup)
{
- BLI_assert(dvert);
- BLI_assert(defgroup >= 0);
+ if (dvert && defgroup >= 0) {
+ MDeformWeight *dw = dvert->dw;
+ unsigned int i;
- int index = defvert_index_get(dvert, defgroup);
- if (index == -1) {
- return NULL;
+ for (i = dvert->totweight; i != 0; i--, dw++) {
+ if (dw->def_nr == defgroup) {
+ return dw;
+ }
+ }
}
else {
- return &dvert->dw[index];
+ BLI_assert(0);
}
+
+ return NULL;
}
/**
@@ -766,18 +706,17 @@ MDeformWeight *BKE_defvert_ensure_index(MDeformVert *dvert, const int defgroup)
dw_new = MEM_mallocN(sizeof(MDeformWeight) * (dvert->totweight + 1), "deformWeight");
if (dvert->dw) {
- memcpy(dw_new + 1, dvert->dw, sizeof(MDeformWeight) * dvert->totweight);
+ memcpy(dw_new, dvert->dw, sizeof(MDeformWeight) * dvert->totweight);
MEM_freeN(dvert->dw);
}
dvert->dw = dw_new;
+ dw_new += dvert->totweight;
dw_new->weight = 0.0f;
dw_new->def_nr = defgroup;
/* Group index */
dvert->totweight++;
- defvert_sort_weights(dvert);
-
return dw_new;
}
@@ -801,15 +740,14 @@ void BKE_defvert_add_index_notest(MDeformVert *dvert, int defgroup, const float
dw_new = MEM_callocN(sizeof(MDeformWeight) * (dvert->totweight + 1),
"defvert_add_to group, new deformWeight");
if (dvert->dw) {
- memcpy(dw_new + 1, dvert->dw, sizeof(MDeformWeight) * dvert->totweight);
+ memcpy(dw_new, dvert->dw, sizeof(MDeformWeight) * dvert->totweight);
MEM_freeN(dvert->dw);
}
dvert->dw = dw_new;
+ dw_new += dvert->totweight;
dw_new->weight = weight;
dw_new->def_nr = defgroup;
dvert->totweight++;
-
- defvert_sort_weights(dvert);
}
/**
@@ -835,7 +773,7 @@ void BKE_defvert_remove_group(MDeformVert *dvert, MDeformWeight *dw)
BLI_assert(dvert->dw != NULL);
if (i != dvert->totweight) {
- memmove(&dvert->dw[i], &dvert->dw[i + 1], sizeof(MDeformWeight) * dvert->totweight - i);
+ dvert->dw[i] = dvert->dw[dvert->totweight];
}
dvert->dw = MEM_reallocN(dvert->dw, sizeof(MDeformWeight) * dvert->totweight);
@@ -1587,17 +1525,4 @@ void BKE_defvert_weight_to_rgb(float r_rgb[3], const float weight)
}
}
-#ifndef NDEBUG
-bool BKE_defvert_is_sorted_for_assert(const MDeformVert *dv)
-{
- const MDeformWeight *dw = dv->dw;
- for (int i = 1; i < dv->totweight; i++) {
- if (dw[i - 1].def_nr > dw[i].def_nr) {
- return false;
- }
- }
- return true;
-}
-#endif
-
/** \} */
diff --git a/source/blender/blenkernel/intern/object_deform.c b/source/blender/blenkernel/intern/object_deform.c
index f7d22f300ef..6ca1442497a 100644
--- a/source/blender/blenkernel/intern/object_deform.c
+++ b/source/blender/blenkernel/intern/object_deform.c
@@ -534,7 +534,6 @@ void BKE_object_defgroup_index_map_apply(MDeformVert *dvert,
dv->totweight = totweight;
}
}
- BKE_defvert_array_sort_weights(dv, dvert_len);
}
/**