diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-10-22 21:33:11 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-10-22 21:33:11 +0400 |
commit | c6b4494727144154511cdacb0e9e832a4b6fefc1 (patch) | |
tree | 4be3ee581e4b3a525018aa8a430e1be888238bc1 | |
parent | 23baf8c9c366a6f4e029de0119e72de45722d1f0 (diff) |
decimator - small optimization on check for degenerate edges.
-rw-r--r-- | source/blender/bmesh/intern/bmesh_decimate.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/bmesh/intern/bmesh_decimate.c b/source/blender/bmesh/intern/bmesh_decimate.c index ed68d47c6b0..a4be3933a8d 100644 --- a/source/blender/bmesh/intern/bmesh_decimate.c +++ b/source/blender/bmesh/intern/bmesh_decimate.c @@ -496,6 +496,18 @@ static int bm_edge_tag_test(BMEdge *e) ); } +/* takes the edges loop */ +BLI_INLINE int bm_edge_is_manifold_or_boundary(BMLoop *l) +{ +#if 0 + /* less optimized version of check below */ + return (BM_edge_is_manifold(l->e) || BM_edge_is_boundary(l->e); +#else + /* if the edge is a boundary it points to its self, else this must be a manifold */ + return LIKELY(l) && LIKELY(l->radial_next->radial_next == l); +#endif +} + static int bm_edge_collapse_is_degenerate(BMEdge *e_first) { /* simply check that there is no overlap between faces and edges of each vert, @@ -506,7 +518,7 @@ static int bm_edge_collapse_is_degenerate(BMEdge *e_first) /* clear flags on both disks */ e_iter = e_first; do { - if (!(BM_edge_is_manifold(e_iter) || BM_edge_is_boundary(e_iter))) { + if (!bm_edge_is_manifold_or_boundary(e_iter->l)) { return TRUE; } bm_edge_tag_disable(e_iter); @@ -514,7 +526,7 @@ static int bm_edge_collapse_is_degenerate(BMEdge *e_first) e_iter = e_first; do { - if (!(BM_edge_is_manifold(e_iter) || BM_edge_is_boundary(e_iter))) { + if (!bm_edge_is_manifold_or_boundary(e_iter->l)) { return TRUE; } bm_edge_tag_disable(e_iter); |