diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-09-13 11:11:38 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-09-13 11:11:38 +0300 |
commit | 1e186cea7c2b1409d50070f040a571ac17290bbf (patch) | |
tree | c5850a03d1113bf0d5c5a267fb63dd842888d945 /source/blender/bmesh | |
parent | e4811cf0c308601918c3662b2b995b457140d847 (diff) |
Fix T77584: Edit Mode crash with shape keys created on blank mesh
Entering edit-mode after creating shape keys on a blank mesh would crash.
Regression in 9b9f84b317fef which prevented initializing empty
shape keys when there is no shape key offset data available.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_mesh_convert.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.c b/source/blender/bmesh/intern/bmesh_mesh_convert.c index 4671df90d53..2269837cc8e 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.c +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.c @@ -893,19 +893,14 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh } for (currkey = me->key->block.first; currkey; currkey = currkey->next) { - const bool apply_offset = (ofs && (currkey != actkey) && - (bm->shapenr - 1 == currkey->relative)); - int cd_shape_offset; int keyi; const float(*ofs_pt)[3] = ofs; float *newkey, (*oldkey)[3], *fp; j = bm_to_mesh_shape_layer_index_from_kb(bm, currkey); - cd_shape_offset = CustomData_get_n_offset(&bm->vdata, CD_SHAPEKEY, j); - if (cd_shape_offset < 0) { - /* The target Mesh has more shapekeys than the BMesh. */ - continue; - } + const int cd_shape_offset = CustomData_get_n_offset(&bm->vdata, CD_SHAPEKEY, j); + const bool apply_offset = (cd_shape_offset != -1) && (ofs != NULL) && (currkey != actkey) && + (bm->shapenr - 1 == currkey->relative); fp = newkey = MEM_callocN(me->key->elemsize * bm->totvert, "currkey->data"); oldkey = currkey->data; @@ -927,7 +922,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh } } } - else if (j != -1) { + else if (cd_shape_offset != -1) { /* In most cases this runs. */ copy_v3_v3(fp, BM_ELEM_CD_GET_VOID_P(eve, cd_shape_offset)); } |