[Bf-blender-cvs] [933c2b0] master: BMesh: collapse_uvs - avoid clearing and flagging for every cd-layer
Campbell Barton
noreply at git.blender.org
Wed Jan 22 07:17:42 CET 2014
Commit: 933c2b052145de24d8cc88353181f9ea74644373
Author: Campbell Barton
Date: Wed Jan 22 17:11:46 2014 +1100
https://developer.blender.org/rB933c2b052145de24d8cc88353181f9ea74644373
BMesh: collapse_uvs - avoid clearing and flagging for every cd-layer
===================================================================
M source/blender/bmesh/operators/bmo_removedoubles.c
===================================================================
diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c
index 04831b8..cef7c70 100644
--- a/source/blender/bmesh/operators/bmo_removedoubles.c
+++ b/source/blender/bmesh/operators/bmo_removedoubles.c
@@ -443,7 +443,7 @@ void bmo_collapse_exec(BMesh *bm, BMOperator *op)
}
/* uv collapse function */
-static void bmo_collapsecon_do_layer(BMesh *bm, BMOperator *op, int layer)
+static void bmo_collapsecon_do_layer(BMesh *bm, const int layer, const short oflag)
{
BMIter iter, liter;
BMFace *f;
@@ -454,19 +454,14 @@ static void bmo_collapsecon_do_layer(BMesh *bm, BMOperator *op, int layer)
CDBlockBytes min, max;
int i, tot, type = bm->ldata.layers[layer].type;
- /* clear all short flags */
- BMO_mesh_flag_disable_all(bm, op, BM_ALL, (1 << 16) - 1);
-
- BMO_slot_buffer_flag_enable(bm, op->slots_in, "edges", BM_EDGE, EDGE_MARK);
-
BMW_init(&walker, bm, BMW_LOOPDATA_ISLAND,
- BMW_MASK_NOP, EDGE_MARK, BMW_MASK_NOP,
+ BMW_MASK_NOP, oflag, BMW_MASK_NOP,
BMW_FLAG_NOP, /* no need to use BMW_FLAG_TEST_HIDDEN, already marked data */
layer);
BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
- if (BMO_elem_flag_test(bm, l->e, EDGE_MARK)) {
+ if (BMO_elem_flag_test(bm, l->e, oflag)) {
/* walk */
BLI_array_empty(blocks);
@@ -497,12 +492,33 @@ static void bmo_collapsecon_do_layer(BMesh *bm, BMOperator *op, int layer)
void bmo_collapse_uvs_exec(BMesh *bm, BMOperator *op)
{
+ const short oflag = EDGE_MARK;
int i;
+ /* check flags dont change once set */
+#ifndef NDEBUG
+ int tot_test;
+#endif
+
+ if (!CustomData_has_math(&bm->ldata)) {
+ return;
+ }
+
+ BMO_slot_buffer_flag_enable(bm, op->slots_in, "edges", BM_EDGE, oflag);
+
+#ifndef NDEBUG
+ tot_test = BM_iter_mesh_count_flag(BM_EDGES_OF_MESH, bm, oflag, true);
+#endif
+
for (i = 0; i < bm->ldata.totlayer; i++) {
if (CustomData_layer_has_math(&bm->ldata, i))
- bmo_collapsecon_do_layer(bm, op, i);
+ bmo_collapsecon_do_layer(bm, i, oflag);
}
+
+#ifndef NDEBUG
+ BLI_assert(tot_test == BM_iter_mesh_count_flag(BM_EDGES_OF_MESH, bm, EDGE_MARK, true));
+#endif
+
}
static void bmesh_find_doubles_common(BMesh *bm, BMOperator *op,
More information about the Bf-blender-cvs
mailing list