From 6ce06957c9bf9c752f0a7ee2cb186948d0d67983 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 17 Feb 2021 15:12:39 +1100 Subject: Fix T85680: Crash displaying UV stretch/area with modifiers This uses the same logic as drawing UV's, where non-bmesh defaults to mesh. --- source/blender/draw/intern/draw_cache_extract_mesh.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'source/blender/draw/intern/draw_cache_extract_mesh.c') diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c b/source/blender/draw/intern/draw_cache_extract_mesh.c index 9e2ac26f9f0..40d7614f93f 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh.c +++ b/source/blender/draw/intern/draw_cache_extract_mesh.c @@ -3903,7 +3903,8 @@ static void mesh_stretch_area_finish(const MeshRenderData *mr, area_ratio[f] = area_ratio_get(area, uvarea); } } - else if (mr->extract_type == MR_EXTRACT_MAPPED) { + else { + BLI_assert(ELEM(mr->extract_type, MR_EXTRACT_MAPPED, MR_EXTRACT_MESH)); const MLoopUV *uv_data = CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV); const MPoly *mp = mr->mpoly; for (int mp_index = 0; mp_index < mr->poly_len; mp_index++, mp++) { @@ -3914,10 +3915,6 @@ static void mesh_stretch_area_finish(const MeshRenderData *mr, area_ratio[mp_index] = area_ratio_get(area, uvarea); } } - else { - /* Should not happen. */ - BLI_assert(0); - } cache->tot_area = tot_area; cache->tot_uv_area = tot_uv_area; @@ -3942,7 +3939,8 @@ static void mesh_stretch_area_finish(const MeshRenderData *mr, } } } - else if (mr->extract_type == MR_EXTRACT_MAPPED) { + else { + BLI_assert(ELEM(mr->extract_type, MR_EXTRACT_MAPPED, MR_EXTRACT_MESH)); const MPoly *mp = mr->mpoly; for (int mp_index = 0, l_index = 0; mp_index < mr->poly_len; mp_index++, mp++) { for (int i = 0; i < mp->totloop; i++, l_index++) { @@ -3950,10 +3948,6 @@ static void mesh_stretch_area_finish(const MeshRenderData *mr, } } } - else { - /* Should not happen. */ - BLI_assert(0); - } MEM_freeN(area_ratio); } @@ -4047,11 +4041,9 @@ static void *extract_stretch_angle_init(const MeshRenderData *mr, if (mr->extract_type == MR_EXTRACT_BMESH) { data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV); } - else if (mr->extract_type == MR_EXTRACT_MAPPED) { - data->luv = CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV); - } else { - BLI_assert(0); + BLI_assert(ELEM(mr->extract_type, MR_EXTRACT_MAPPED, MR_EXTRACT_MESH)); + data->luv = CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV); } return data; } -- cgit v1.2.3