diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-03-06 19:18:10 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-03-09 16:47:59 +0300 |
commit | 598ab525da3df3fef2033c159c570688c7282a8f (patch) | |
tree | ba2bd0b8fc6ee5d264512bf655def1a6ee5d7b31 /source/blender/bmesh/tools | |
parent | ee5d7bc16b243f309c84bce5deddf3a86b7f4c14 (diff) |
Cleanup: Replace ABS/SQUARE/CUBE with function calls
While it might be handy to have type-less functionality which is
similar to how C++ math is implemented it can not be easily achieved
with just preprocessor in a way which does not have side-effects on
wrong usage.
There macros where often used on a non-trivial expression, and there
was at least one usage where it was causing an actual side effect/bug
on Windows (see change around square_f(sh[index++]) in studiolight.c).
For such cases it is handy to have a function which is guaranteed to
have zero side-effects. The motivation behind actually removing the
macros is that there is already a way to do similar calculation. Also,
not having such macros is a way to guarantee that its usage is not
changed in a way which have side-effects and that it's not used as an
inspiration for cases where it should not be used.
Differential Revision: https://developer.blender.org/D7051
Diffstat (limited to 'source/blender/bmesh/tools')
-rw-r--r-- | source/blender/bmesh/tools/bmesh_decimate_collapse.c | 2 | ||||
-rw-r--r-- | source/blender/bmesh/tools/bmesh_intersect_edges.c | 10 | ||||
-rw-r--r-- | source/blender/bmesh/tools/bmesh_region_match.c | 9 |
3 files changed, 13 insertions, 8 deletions
diff --git a/source/blender/bmesh/tools/bmesh_decimate_collapse.c b/source/blender/bmesh/tools/bmesh_decimate_collapse.c index 56febf12e71..c183f370faa 100644 --- a/source/blender/bmesh/tools/bmesh_decimate_collapse.c +++ b/source/blender/bmesh/tools/bmesh_decimate_collapse.c @@ -411,7 +411,7 @@ static int *bm_edge_symmetry_map(BMesh *bm, uint symmetry_axis, float limit) BMEdge *e, **etable; uint i; int *edge_symmetry_map; - const float limit_sq = SQUARE(limit); + const float limit_sq = square_f(limit); KDTree_3d *tree; tree = BLI_kdtree_3d_new(bm->totedge); diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c b/source/blender/bmesh/tools/bmesh_intersect_edges.c index ce40256221e..6a51bceb6ac 100644 --- a/source/blender/bmesh/tools/bmesh_intersect_edges.c +++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c @@ -272,7 +272,7 @@ static bool bm_edgexvert_isect_impl(BMVert *v, } if (v != e_v) { - float dist_sq_vert = SQUARE(dist_sq_vert_factor) * len_squared_v3(dir); + float dist_sq_vert = square_f(dist_sq_vert_factor) * len_squared_v3(dir); if (dist_sq_vert < data_dist_sq) { /* Vert x Vert is already handled elsewhere. */ return false; @@ -380,8 +380,8 @@ static bool bm_edgexedge_isect_impl(struct EDBMSplitData *data, return false; } - float dist_sq_va = SQUARE(dist_sq_va_factor) * len_squared_v3(dir_a); - float dist_sq_vb = SQUARE(dist_sq_vb_factor) * len_squared_v3(dir_b); + float dist_sq_va = square_f(dist_sq_va_factor) * len_squared_v3(dir_a); + float dist_sq_vb = square_f(dist_sq_vb_factor) * len_squared_v3(dir_b); if (dist_sq_va < data->dist_sq || dist_sq_vb < data->dist_sq) { /* Vert x Edge is already handled elsewhere. */ @@ -503,7 +503,7 @@ bool BM_mesh_intersect_edges( BLI_Stack **pair_stack_vertxvert = pair_stack; BLI_Stack **pair_stack_edgexelem = &pair_stack[KDOP_TREE_TYPE]; - const float dist_sq = SQUARE(dist); + const float dist_sq = square_f(dist); const float dist_half = dist / 2; struct EDBMSplitData data = { @@ -511,7 +511,7 @@ bool BM_mesh_intersect_edges( .pair_stack = pair_stack, .cut_edges_len = 0, .dist_sq = dist_sq, - .dist_sq_sq = SQUARE(dist_sq), + .dist_sq_sq = square_f(dist_sq), }; BM_mesh_elem_table_ensure(bm, BM_VERT | BM_EDGE); diff --git a/source/blender/bmesh/tools/bmesh_region_match.c b/source/blender/bmesh/tools/bmesh_region_match.c index c30992fa296..b4c2c3f091e 100644 --- a/source/blender/bmesh/tools/bmesh_region_match.c +++ b/source/blender/bmesh/tools/bmesh_region_match.c @@ -921,6 +921,11 @@ static void bm_face_array_visit(BMFace **faces, /* signed user id */ typedef intptr_t SUID_Int; +BLI_INLINE intptr_t abs_intptr(intptr_t a) +{ + return (a < 0) ? -a : a; +} + static bool bm_edge_is_region_boundary(BMEdge *e) { if (e->l->radial_next != e->l) { @@ -984,7 +989,7 @@ static SUID_Int bm_face_region_vert_boundary_id(BMVert *v) id ^= (tot * PRIME_VERT_MID_B); - return id ? ABS(id) : 1; + return id ? abs_intptr(id) : 1; # undef PRIME_VERT_SMALL_A # undef PRIME_VERT_SMALL_B @@ -1039,7 +1044,7 @@ static SUID_Int bm_face_region_vert_pass_id(GHash *gh, BMVert *v) /* disallow 0 & min (since it can't be flipped) */ id = (UNLIKELY(id == 0) ? 1 : UNLIKELY(id < id_min) ? id_min : id); - return ABS(id); + return abs_intptr(id); # undef PRIME_VERT_MID_A # undef PRIME_VERT_MID_B |