diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-07-10 19:02:51 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2020-07-10 19:03:21 +0300 |
commit | 3e4f49fe710d5e3233c774de9a9341451d486f51 (patch) | |
tree | 229490aa5ab140d3c1405ccd7b12fc9718ce510c /source/blender/blenkernel | |
parent | d5208c45fadbfd59a686eb77a0c4161b02b0e482 (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.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_deform.h | 11 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/customdata.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/deform.c | 107 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object_deform.c | 1 |
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); } /** |