diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-03-20 14:23:14 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-03-20 14:28:29 +0300 |
commit | 27553a2e4e03f6f7dfbb91bdeeffb108b9a05f1b (patch) | |
tree | c1cb5a63e9649f11a2f730d871a3153c07d9ce50 /source/blender/blenkernel/intern/multires.c | |
parent | d931aacef6f34578a9760a96811b916ea85c5d0f (diff) |
Multires: Fix assert when removing modifier in edit mode
It is not guaranteed that with Multires modifier existing there
will be CD_MDISPS and CD_GRID_PAINT_MASK custom data layers.
Fixes assert in the following scenario:
- With default cube, go to edit mode
- Add Multires modifier
- Remove the Multires modifier
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index f7a3489f02e..b40dfcd3b7f 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -90,9 +90,14 @@ void multires_customdata_delete(Mesh *me) * as non-external for further free-ing, so zero element count * looks safer than em->totface */ CustomData_external_remove(&em->bm->ldata, &me->id, CD_MDISPS, 0); - BM_data_layer_free(em->bm, &em->bm->ldata, CD_MDISPS); - BM_data_layer_free(em->bm, &em->bm->ldata, CD_GRID_PAINT_MASK); + if (CustomData_has_layer(&em->bm->ldata, CD_MDISPS)) { + BM_data_layer_free(em->bm, &em->bm->ldata, CD_MDISPS); + } + + if (CustomData_has_layer(&em->bm->ldata, CD_GRID_PAINT_MASK)) { + BM_data_layer_free(em->bm, &em->bm->ldata, CD_GRID_PAINT_MASK); + } } else { CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop); |