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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs