[Bf-blender-cvs] [5bc15b3f75d] soc-2017-normal-tools: Added clnor invalidate for all BMOps

RohanRathi noreply at git.blender.org
Fri Jun 2 08:21:06 CEST 2017


Commit: 5bc15b3f75d5f5ad761b5d7c9ae60d96b8f6b58e
Author: RohanRathi
Date:   Fri Jun 2 11:46:19 2017 +0530
Branches: soc-2017-normal-tools
https://developer.blender.org/rB5bc15b3f75d5f5ad761b5d7c9ae60d96b8f6b58e

Added clnor invalidate for all BMOps

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

M	source/blender/bmesh/bmesh_class.h
M	source/blender/bmesh/intern/bmesh_mesh.c
M	source/blender/bmesh/intern/bmesh_opdefines.c
M	source/blender/bmesh/intern/bmesh_operator_api.h
M	source/blender/editors/mesh/editmesh_tools.c
M	source/blender/editors/mesh/editmesh_undo.c
M	source/blender/editors/mesh/editmesh_utils.c

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

diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h
index 2613759ac9a..cc6a96a59cd 100644
--- a/source/blender/bmesh/bmesh_class.h
+++ b/source/blender/bmesh/bmesh_class.h
@@ -273,6 +273,7 @@ enum {
 
 #define BM_SPACEARR_DIRTY (1 << 1)
 #define BM_SPACEARR_DIRTY_ALL (1 << 2)
+#define BM_SPACEARR_BMO_SET (1 << 3)
 
 /* args for _Generic */
 #define _BM_GENERIC_TYPE_ELEM_NONCONST \
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index ef22c22c3b1..b09d86de959 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -997,6 +997,9 @@ void BM_lnorspacearr_store(BMesh *bm, float (*r_lnors)[3])
 
 void BM_lnorspace_invalidate(BMesh *bm, bool inval_all)
 {
+	if (bm->spacearr_dirty & BM_SPACEARR_DIRTY_ALL) {
+		return;
+	}
 	if (inval_all || bm->totvertsel > CLEAR_SPACEARRAY_THRESHOLD(bm->totvert)) {
 		bm->spacearr_dirty |= BM_SPACEARR_DIRTY_ALL;
 		return;
@@ -1008,7 +1011,6 @@ void BM_lnorspace_invalidate(BMesh *bm, bool inval_all)
 	if (bm->elem_index_dirty & BM_FACE) {
 		BM_mesh_elem_index_ensure(bm, BM_FACE);
 	}
-
 	BM_ITER_MESH(v, &viter, bm, BM_VERTS_OF_MESH) {
 		if (BM_elem_flag_test(v, BM_ELEM_SELECT)) {
 
@@ -1025,6 +1027,12 @@ void BM_lnorspace_invalidate(BMesh *bm, bool inval_all)
 			}
 		}
 	}
+
+#ifdef _DEBUG
+	float(*r_lnors)[3] = MEM_mallocN(sizeof(*r_lnors) * bm->totloop, "__func__");
+	BM_lnorspacearr_store(bm, r_lnors);
+	BM_lnorspace_rebuild(bm, false);
+#endif
 }
 
 void BM_lnorspace_rebuild(BMesh *bm, bool preserve_clnor)
@@ -1038,6 +1046,7 @@ void BM_lnorspace_rebuild(BMesh *bm, bool preserve_clnor)
 
 	float(*r_lnors)[3] = MEM_callocN(sizeof(*r_lnors) * bm->totloop, "__func__");
 	float(*oldnors)[3] = MEM_mallocN(sizeof(*oldnors) * bm->totloop, "__func__");
+
 	int cd_loop_clnors_offset = CustomData_get_offset(&bm->ldata, CD_CUSTOMLOOPNORMAL);
 
 	if (bm->elem_index_dirty & BM_LOOP) {
@@ -1065,11 +1074,18 @@ void BM_lnorspace_rebuild(BMesh *bm, bool preserve_clnor)
 		BM_ITER_ELEM(l, &liter, f, BM_LOOPS_OF_FACE) {
 
 			if (BM_elem_flag_test(l, BM_ELEM_LNORSPACE)) {
+
+#ifdef _DEBUG
+				short(*clnor)[2] = BM_ELEM_CD_GET_VOID_P(l, cd_loop_clnors_offset);
+				int l_index = BM_elem_index_get(l);
+				BKE_lnor_space_custom_normal_to_data(bm->bmspacearr.lspacearr[l_index], l->v->no, *clnor);
+#else
 				if (preserve_clnor) {
 					short(*clnor)[2] = BM_ELEM_CD_GET_VOID_P(l, cd_loop_clnors_offset);
 					int l_index = BM_elem_index_get(l);
 					BKE_lnor_space_custom_normal_to_data(bm->bmspacearr.lspacearr[l_index], oldnors[l_index], *clnor);
 				}
+#endif
 				BM_elem_flag_disable(l, BM_ELEM_LNORSPACE);
 			}
 		}
@@ -1181,7 +1197,6 @@ void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
 		BM_mesh_normals_update(bm);
 	}
 
-
 	if ((type_flag & BMO_OPTYPE_FLAG_SELECT_VALIDATE) == 0) {
 		select_history = bm->selected;
 		BLI_listbase_clear(&bm->selected);
@@ -1194,8 +1209,11 @@ void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
 	if ((type_flag & BMO_OPTYPE_FLAG_SELECT_VALIDATE) == 0) {
 		bm->selected = select_history;
 	}
-	if (type_flag & BMO_OPTYPE_FLAG_INVALIDATE_NORMAL_SPACE) {
-		bm->spacearr_dirty |= BM_SPACEARR_DIRTY;
+	if (type_flag & BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE) {
+		bm->spacearr_dirty |= (BM_SPACEARR_DIRTY | BM_SPACEARR_BMO_SET);
+	}
+	if (type_flag & BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL) {
+		bm->spacearr_dirty |= BM_SPACEARR_DIRTY_ALL;
 	}
 }
 
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index 3d78ef0dd40..856337c470a 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -117,7 +117,7 @@ static BMOpDefine bmo_smooth_vert_def = {
 	{{{'\0'}}},  /* no output */
 	bmo_smooth_vert_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_NORMAL_SPACE),
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -140,7 +140,8 @@ static BMOpDefine bmo_smooth_laplacian_vert_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_smooth_laplacian_vert_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC | 
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -207,7 +208,8 @@ static BMOpDefine bmo_region_extend_def = {
 	},
 	bmo_region_extend_exec,
 	(BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -231,7 +233,8 @@ static BMOpDefine bmo_rotate_edges_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE | 
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -275,7 +278,8 @@ static BMOpDefine bmo_bisect_edges_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE | 
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -303,7 +307,8 @@ static BMOpDefine bmo_mirror_def = {
 	bmo_mirror_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -371,7 +376,8 @@ static BMOpDefine bmo_automerge_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -391,7 +397,8 @@ static BMOpDefine bmo_collapse_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -446,7 +453,8 @@ static BMOpDefine bmo_pointmerge_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -484,7 +492,8 @@ static BMOpDefine bmo_weld_verts_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -534,7 +543,8 @@ static BMOpDefine bmo_join_triangles_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -565,7 +575,8 @@ static BMOpDefine bmo_contextual_create_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -590,7 +601,8 @@ static BMOpDefine bmo_bridge_loops_def = {
 	bmo_bridge_loops_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -615,7 +627,8 @@ static BMOpDefine bmo_grid_fill_def = {
 	},
 	bmo_grid_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH | 
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 
@@ -638,7 +651,8 @@ static BMOpDefine bmo_holes_fill_def = {
 	},
 	bmo_holes_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 
@@ -661,7 +675,8 @@ static BMOpDefine bmo_face_attribute_fill_def = {
 	 {{'\0'}},
 	},
 	bmo_face_attribute_fill_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -685,7 +700,8 @@ static BMOpDefine bmo_edgeloop_fill_def = {
 	},
 	bmo_edgeloop_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 
@@ -710,7 +726,8 @@ static BMOpDefine bmo_edgenet_fill_def = {
 	},
 	bmo_edgenet_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -753,7 +770,8 @@ static BMOpDefine bmo_rotate_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_rotate_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -771,7 +789,8 @@ static BMOpDefine bmo_translate_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_translate_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC | 
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -789,7 +808,8 @@ static BMOpDefine bmo_scale_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_scale_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 
@@ -809,7 +829,8 @@ static BMOpDefine bmo_transform_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_transform_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
 };
 
 /*
@@ -891,7 +912,8 @@ static BMOpDefine bmo_extrude_discrete_faces_def = {
 	 {{'\0'}},
 	},
 	bmo_extrude_discrete_faces_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -912,7 +934,8 @@ static BMOpDefine bmo_extrude_edge_only_def = {
 	 {{'\0'}},
 	},
 	bmo_extrude_edge_only_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC |
+	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_SPACE),
 };
 
 /*
@@ -933,7 +956,8 @@ static BMOpDefine bmo_extrude_vert_indiv_def = {
 	 {{'\0'}},
 	},
 	bmo_extrude_vert_indiv_exec,
-	(BMO_OPTYPE_FLAG_SELECT_FLUSH),
+	(BMO_OPTYPE_FLAG_SELE

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list