diff options
author | Antonioya <blendergit@gmail.com> | 2018-09-14 17:08:54 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2018-09-14 17:09:10 +0300 |
commit | cfaf92c0790f04e526339a1049a321f927f10118 (patch) | |
tree | 91ccad215de1379d865d5bebfc595ff5b55fe1fb /source | |
parent | c4ef2e2f2ebcd9967aa5d4b283ac7abe51156d51 (diff) |
GP: Fix T56802 - Add/Delete Vertex Group crashes
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/gpencil.c | 13 | ||||
-rw-r--r-- | source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c | 4 |
2 files changed, 10 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 08c490252e5..bc9aa0a96d2 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -1221,11 +1221,13 @@ void BKE_gpencil_vgroup_remove(Object *ob, bDeformGroup *defgroup) for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) { for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) { - for (int i = 0; i < gps->totpoints; i++) { - dvert = &gps->dvert[i]; - MDeformWeight *dw = defvert_find_index(dvert, def_nr); - if (dw != NULL) { - defvert_remove_group(dvert, dw); + if (gps->dvert != NULL) { + for (int i = 0; i < gps->totpoints; i++) { + dvert = &gps->dvert[i]; + MDeformWeight *dw = defvert_find_index(dvert, def_nr); + if (dw != NULL) { + defvert_remove_group(dvert, dw); + } } } } @@ -1235,6 +1237,7 @@ void BKE_gpencil_vgroup_remove(Object *ob, bDeformGroup *defgroup) /* Remove the group */ BLI_freelinkN(&ob->defbase, defgroup); + DEG_id_tag_update(&gpd->id, OB_RECALC_OB | OB_RECALC_DATA); } diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c index 079f76aad28..00235d0bfcb 100644 --- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c +++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c @@ -507,7 +507,7 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag) for (int i = 0; i < gps->totpoints; i++, pt++) { /* weight paint */ if (is_weight_paint) { - float weight = gps->dvert ? defvert_find_weight(dvert, vgindex) : 0.0f; + float weight = (dvert && dvert->dw) ? defvert_find_weight(dvert, vgindex) : 0.0f; float hue = 2.0f * (1.0f - weight) / 3.0f; hsv_to_rgb(hue, 1.0f, 1.0f, &selectColor[0], &selectColor[1], &selectColor[2]); selectColor[3] = 1.0f; @@ -585,7 +585,7 @@ GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED( for (int i = 0; i < gps->totpoints; i++, pt++) { /* weight paint */ if (is_weight_paint) { - float weight = gps->dvert ? defvert_find_weight(dvert, vgindex) : 0.0f; + float weight = (dvert && dvert->dw) ? defvert_find_weight(dvert, vgindex) : 0.0f; float hue = 2.0f * (1.0f - weight) / 3.0f; hsv_to_rgb(hue, 1.0f, 1.0f, &selectColor[0], &selectColor[1], &selectColor[2]); selectColor[3] = 1.0f; |