[Bf-blender-cvs] Git Commit [e9c9706] master: Code cleanup: Use different redraw options for sculpt mask operators.

Antony Riakiotakis noreply at git.blender.org
Fri Nov 15 22:00:29 CET 2013


Commit: e9c9706ce61c66f2451ff94df1ff04786dc7437d
Author: Antony Riakiotakis
Date:   Fri Nov 15 23:00:15 2013 +0200
http://developer.blender.org/rBe9c9706ce61c66f2451ff94df1ff04786dc7437d

Code cleanup: Use different redraw options for sculpt mask operators.

Current redraw options also did an unnecessary normal recalculation on
updated nodes.

Also, for the box and lasso mask only push an undo node if any vertex
has actually been influenced.

===================================================================

M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/editors/sculpt_paint/paint_mask.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 9e21831..f8c21a1 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -151,8 +151,9 @@ typedef enum {
 
 void BKE_pbvh_node_mark_update(PBVHNode *node);
 void BKE_pbvh_node_mark_rebuild_draw(PBVHNode *node);
-void BKE_pbvh_node_fully_hidden_set(PBVHNode *node, int fully_hidden);
+void BKE_pbvh_node_mark_redraw(PBVHNode *node);
 void BKE_pbvh_node_mark_topology_update(PBVHNode *node);
+void BKE_pbvh_node_fully_hidden_set(PBVHNode *node, int fully_hidden);
 
 void BKE_pbvh_node_get_grids(PBVH *bvh, PBVHNode *node,
                              int **grid_indices, int *totgrid, int *maxgrid, int *gridsize,
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 45a29f6..c982260 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -1283,6 +1283,11 @@ void BKE_pbvh_node_mark_rebuild_draw(PBVHNode *node)
 	node->flag |= PBVH_RebuildDrawBuffers | PBVH_UpdateDrawBuffers | PBVH_UpdateRedraw;
 }
 
+void BKE_pbvh_node_mark_redraw(PBVHNode *node)
+{
+	node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateRedraw;
+}
+
 void BKE_pbvh_node_fully_hidden_set(PBVHNode *node, int fully_hidden)
 {
 	BLI_assert(node->flag & PBVH_Leaf);
diff --git a/source/blender/editors/sculpt_paint/paint_mask.c b/source/blender/editors/sculpt_paint/paint_mask.c
index c563305..42652cf 100644
--- a/source/blender/editors/sculpt_paint/paint_mask.c
+++ b/source/blender/editors/sculpt_paint/paint_mask.c
@@ -117,7 +117,7 @@ static int mask_flood_fill_exec(bContext *C, wmOperator *op)
 			mask_flood_fill_set_elem(vi.mask, mode, value);
 		} BKE_pbvh_vertex_iter_end;
 		
-		BKE_pbvh_node_mark_update(nodes[i]);
+		BKE_pbvh_node_mark_redraw(nodes[i]);
 		if (BKE_pbvh_type(pbvh) == PBVH_GRIDS)
 			multires_mark_as_modified(ob, MULTIRES_COORDS_MODIFIED);
 	}
@@ -234,17 +234,24 @@ int do_sculpt_mask_box_select(ViewContext *vc, rcti *rect, bool select, bool UNU
 #pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
 			for (i = 0; i < totnode; i++) {
 				PBVHVertexIter vi;
+				bool any_masked = false;
 
 				sculpt_undo_push_node(ob, nodes[i], SCULPT_UNDO_MASK);
 
 				BKE_pbvh_vertex_iter_begin(pbvh, nodes[i], vi, PBVH_ITER_UNIQUE) {
-					if (is_effected(clip_planes_final, vi.co))
+					if (is_effected(clip_planes_final, vi.co)) {
+						if (!any_masked) {
+							any_masked = true;
+
+							sculpt_undo_push_node(ob, nodes[i], SCULPT_UNDO_MASK);
+
+							BKE_pbvh_node_mark_redraw(nodes[i]);
+							if (BKE_pbvh_type(pbvh) == PBVH_GRIDS)
+								multires_mark_as_modified(ob, MULTIRES_COORDS_MODIFIED);
+						}
 						mask_flood_fill_set_elem(vi.mask, mode, value);
+					}
 				} BKE_pbvh_vertex_iter_end;
-
-				BKE_pbvh_node_mark_update(nodes[i]);
-				if (BKE_pbvh_type(pbvh) == PBVH_GRIDS)
-					multires_mark_as_modified(ob, MULTIRES_COORDS_MODIFIED);
 			}
 
 			if (nodes)
@@ -359,17 +366,23 @@ static int paint_mask_gesture_lasso_exec(bContext *C, wmOperator *op)
 #pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
 		for (i = 0; i < totnode; i++) {
 			PBVHVertexIter vi;
-
-			sculpt_undo_push_node(ob, nodes[i], SCULPT_UNDO_MASK);
+			bool any_masked = false;
 
 			BKE_pbvh_vertex_iter_begin(pbvh, nodes[i], vi, PBVH_ITER_UNIQUE) {
-				if (is_effected_lasso(&data, vi.co))
+				if (is_effected_lasso(&data, vi.co)) {
+					if (!any_masked) {
+						any_masked = true;
+
+						sculpt_undo_push_node(ob, nodes[i], SCULPT_UNDO_MASK);
+
+						BKE_pbvh_node_mark_redraw(nodes[i]);
+						if (BKE_pbvh_type(pbvh) == PBVH_GRIDS)
+							multires_mark_as_modified(ob, MULTIRES_COORDS_MODIFIED);
+					}
+
 					mask_flood_fill_set_elem(vi.mask, mode, value);
+				}
 			} BKE_pbvh_vertex_iter_end;
-
-			BKE_pbvh_node_mark_update(nodes[i]);
-			if (BKE_pbvh_type(pbvh) == PBVH_GRIDS)
-				multires_mark_as_modified(ob, MULTIRES_COORDS_MODIFIED);
 		}
 
 		sculpt_undo_push_end();




More information about the Bf-blender-cvs mailing list