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
This commit is contained in:
parent
770cc66f75
commit
2a0e996d77
Notes:
blender-bot
2023-02-14 06:25:25 +01:00
Referenced by issue #80159, Crash when trying to "Add Custom Split Normals Data" after Averaging Face Area Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
|
@ -1014,6 +1014,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;
|
||||
|
|
Loading…
Reference in New Issue