[Bf-blender-cvs] [a9cacb22804] blender-v2.83-release: Fix T80159: Custom Normals Averaging crash after clearing custom split normals data

Philipp Oeser noreply at git.blender.org
Wed Sep 2 15:05:11 CEST 2020


Commit: a9cacb228041e33bc04a3bc634532164b102c4df
Author: Philipp Oeser
Date:   Thu Aug 27 15:47:13 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rBa9cacb228041e33bc04a3bc634532164b102c4df

Fix T80159: Custom Normals Averaging crash after clearing
custom split normals data

Clearing custom split normals would get rid of the CD_CUSTOMLOOPNORMAL
layer - but editing data `lnor_spacearr` would be kept.

Adding a CD_CUSTOMLOOPNORMAL layer (if none exists yet) should be done
in `edbm_average_normals_exec` / `BKE_editmesh_lnorspace_update` /
`BM_lnorspace_update` / `BM_lnorspacearr_store`. The thing is that if
the editing data `lnor_spacearr` would still be valid after `Clear
Custom Split Normals Data`, blender would happily call
`BM_lnorspace_rebuild` instead. Doing that without a CD_CUSTOMLOOPNORMAL
layer is asking for trouble.

Now clear lnor_spacearr on `Clear Custom Split Normals Data` as well.

Thx @mont29 for feedback here.

Maniphest Tasks: T80159

Differential Revision: https://developer.blender.org/D8730

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

M	source/blender/editors/mesh/mesh_data.c

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

diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c
index 51b699acd63..57153acfa44 100644
--- a/source/blender/editors/mesh/mesh_data.c
+++ b/source/blender/editors/mesh/mesh_data.c
@@ -856,6 +856,10 @@ static int mesh_customdata_custom_splitnormals_clear_exec(bContext *C, wmOperato
   Mesh *me = ED_mesh_context(C);
 
   if (BKE_mesh_has_custom_loop_normals(me)) {
+    BMEditMesh *em = me->edit_mesh;
+    if (em != NULL && em->bm->lnor_spacearr != NULL) {
+      BKE_lnor_spacearr_clear(em->bm->lnor_spacearr);
+    }
     return mesh_customdata_clear_exec__internal(C, BM_LOOP, CD_CUSTOMLOOPNORMAL);
   }
   return OPERATOR_CANCELLED;



More information about the Bf-blender-cvs mailing list