[Bf-blender-cvs] [a917e14afa2] soc-2017-normal-tools: Fixed memalloc bug in lnorspacearr and removed BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL flag

Rohan Rathi noreply at git.blender.org
Sun Aug 13 19:19:08 CEST 2017


Commit: a917e14afa20a2ca29e8fd8b55382825f296a0cf
Author: Rohan Rathi
Date:   Sun Aug 13 19:26:25 2017 +0530
Branches: soc-2017-normal-tools
https://developer.blender.org/rBa917e14afa20a2ca29e8fd8b55382825f296a0cf

Fixed memalloc bug in lnorspacearr and removed BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL flag

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

M	source/blender/bmesh/intern/bmesh_mesh.c
M	source/blender/bmesh/intern/bmesh_opdefines.c
M	source/blender/editors/mesh/editmesh_tools.c

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

diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index 48f0b2f1804..91c0a9c49db 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1093,6 +1093,7 @@ void BM_lnorspace_rebuild(BMesh *bm, bool preserve_clnor)
 		}
 	}
 
+	BKE_lnor_spacearr_clear(bm->lnor_spacearr);
 	BM_loops_calc_normal_vcos(bm, NULL, NULL, NULL, true, M_PI, r_lnors, bm->lnor_spacearr, NULL, cd_loop_clnors_offset, true);
 	MEM_freeN(r_lnors);
 
@@ -1154,15 +1155,10 @@ static void BM_lnorspace_err(BMesh *bm)
 	temp->lspacearr = NULL;
 
 	BKE_lnor_spacearr_init(temp, bm->totloop);
-
-	for (int i = 0; i < bm->totloop; i++) {
-		temp->lspacearr[i] = BKE_lnor_space_create(temp);
-		memcpy(temp->lspacearr[i], bm->lnor_spacearr->lspacearr[i], sizeof(MLoopNorSpace));
-	}
 	
 	int cd_loop_clnors_offset = CustomData_get_offset(&bm->ldata, CD_CUSTOMLOOPNORMAL);
 	float(*lnors)[3] = MEM_callocN(sizeof(*lnors) * bm->totloop, "__func__");
-	BM_loops_calc_normal_vcos(bm, NULL, NULL, NULL, true, M_PI, lnors, bm->lnor_spacearr, NULL, cd_loop_clnors_offset, true);
+	BM_loops_calc_normal_vcos(bm, NULL, NULL, NULL, true, M_PI, lnors, temp, NULL, cd_loop_clnors_offset, true);
 
 	for (int i = 0; i < bm->totloop; i++) {
 		int j = 0;
@@ -1183,7 +1179,6 @@ static void BM_lnorspace_err(BMesh *bm)
 	BLI_assert(clear);
 
 	bm->spacearr_dirty &= ~BM_SPACEARR_DIRTY_ALL;
-
 }
 
 /* Marks the individual clnors to be edited, if multiple selection methods are used */
@@ -1433,7 +1428,7 @@ void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
 
 	/* compute normals, clear temp flags and flush selections */
 	if (type_flag & BMO_OPTYPE_FLAG_NORMALS_CALC) {
-		bm->spacearr_dirty |= (BM_SPACEARR_DIRTY | BM_SPACEARR_BMO_SET);
+		bm->spacearr_dirty |= (BM_SPACEARR_DIRTY_ALL);
 		BM_mesh_normals_update(bm);
 	}
 
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index 286fe401eae..a55df234264 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -370,8 +370,7 @@ 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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -391,8 +390,7 @@ 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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -485,8 +483,7 @@ 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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -536,8 +533,7 @@ 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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -568,8 +564,7 @@ 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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -594,8 +589,7 @@ 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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -620,8 +614,7 @@ static BMOpDefine bmo_grid_fill_def = {
 	},
 	bmo_grid_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH | 
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 
@@ -644,8 +637,7 @@ static BMOpDefine bmo_holes_fill_def = {
 	},
 	bmo_holes_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 
@@ -668,8 +660,7 @@ static BMOpDefine bmo_face_attribute_fill_def = {
 	 {{'\0'}},
 	},
 	bmo_face_attribute_fill_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -693,8 +684,7 @@ static BMOpDefine bmo_edgeloop_fill_def = {
 	},
 	bmo_edgeloop_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 
@@ -719,8 +709,7 @@ static BMOpDefine bmo_edgenet_fill_def = {
 	},
 	bmo_edgenet_fill_exec,
 	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -763,8 +752,7 @@ static BMOpDefine bmo_rotate_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_rotate_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -782,8 +770,7 @@ static BMOpDefine bmo_translate_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_translate_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC | 
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -801,8 +788,7 @@ static BMOpDefine bmo_scale_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_scale_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 
@@ -822,8 +808,7 @@ static BMOpDefine bmo_transform_def = {
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_transform_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -905,8 +890,7 @@ static BMOpDefine bmo_extrude_discrete_faces_def = {
 	 {{'\0'}},
 	},
 	bmo_extrude_discrete_faces_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -927,8 +911,7 @@ static BMOpDefine bmo_extrude_edge_only_def = {
 	 {{'\0'}},
 	},
 	bmo_extrude_edge_only_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -949,8 +932,7 @@ static BMOpDefine bmo_extrude_vert_indiv_def = {
 	 {{'\0'}},
 	},
 	bmo_extrude_vert_indiv_exec,
-	(BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -973,8 +955,7 @@ static BMOpDefine bmo_connect_verts_def = {
 	bmo_connect_verts_exec,
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH | 
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -1042,8 +1023,7 @@ static BMOpDefine bmo_connect_vert_pair_def = {
 	bmo_connect_vert_pair_exec,
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH | 
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 
@@ -1066,8 +1046,7 @@ static BMOpDefine bmo_extrude_face_region_def = {
 	 {{'\0'}},
 	},
 	bmo_extrude_face_region_exec,
-	(BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	(BMO_OPTYPE_FLAG_NORMALS_CALC),
 };
 
 /*
@@ -1086,8 +1065,7 @@ static BMOpDefine bmo_dissolve_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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1109,8 +1087,7 @@ static BMOpDefine bmo_dissolve_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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1131,8 +1108,7 @@ static BMOpDefine bmo_dissolve_faces_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1157,8 +1133,7 @@ static BMOpDefine bmo_dissolve_limit_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1179,8 +1154,7 @@ static BMOpDefine bmo_dissolve_degenerate_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1204,8 +1178,7 @@ static BMOpDefine bmo_triangulate_def = {
 	bmo_triangulate_exec,
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
-	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_FLUSH),
 };
 
 /*
@@ -1225,8 +1198,7 @@ static BMOpDefine bmo_unsubdivide_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1267,8 +1239,7 @@ static BMOpDefine bmo_subdivide_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_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1293,8 +1264,7 @@ static BMOpDefine bmo_subdivide_edgering_def = {
 	(BMO_OPTYPE_FLAG_UNTAN_MULTIRES |
 	 BMO_OPTYPE_FLAG_NORMALS_CALC |
 	 BMO_OPTYPE_FLAG_SELECT_FLUSH |
-	 BMO_OPTYPE_FLAG_SELECT_VALIDATE |
-	 BMO_OPTYPE_FLAG_INVALIDATE_CLNOR_ALL),
+	 BMO_OPTYPE_FLAG_SELECT_VALIDATE),
 };
 
 /*
@@ -1340,8 +1310,7 @@ stati

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list