diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-10-23 04:34:34 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-10-23 04:34:34 +0300 |
commit | e3013fdc3b9bb9747ffd44a08d5afe16617816c2 (patch) | |
tree | 6b44a4dc67b94b6769a6aa032788fb6dab4a688f /source/blender/draw | |
parent | 5891f81f258bf3c9bb9d9683698a792254584c7f (diff) |
DRW: workaround for editmode crash w/ constructive modifiers
Actual cause is bad orig-index layer,
commit this to avoid crash for now.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl_mesh.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index e27bc84c565..32c3acbec22 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -4427,7 +4427,10 @@ static GPUIndexBuf **mesh_batch_cache_get_triangles_in_order_split_by_material( BMFace **ftable = bm_mapped->ftable; for (uint i = 0; i < poly_len; i++) { const int p_orig = p_origindex_mapped[i]; - if ((p_orig != ORIGINDEX_NONE) && !BM_elem_flag_test(ftable[p_orig], BM_ELEM_HIDDEN)) { + /* TODO(campbell): fix origindex layer. */ + if ((p_orig >= bm_mapped->totface) || + ((p_orig != ORIGINDEX_NONE) && !BM_elem_flag_test(ftable[p_orig], BM_ELEM_HIDDEN))) + { const MPoly *mp = &rdata->mpoly[i]; ; const short ma_id = mp->mat_nr < mat_len ? mp->mat_nr : 0; mat_tri_len[ma_id] += (mp->totloop - 2); @@ -4473,7 +4476,10 @@ static GPUIndexBuf **mesh_batch_cache_get_triangles_in_order_split_by_material( for (uint i = 0; i < poly_len; i++) { const int p_orig = p_origindex_mapped[i]; const MPoly *mp = &rdata->mpoly[i]; ; - if ((p_orig != ORIGINDEX_NONE) && !BM_elem_flag_test(ftable[p_orig], BM_ELEM_HIDDEN)) { + /* TODO(campbell): fix origindex layer. */ + if ((p_orig >= bm_mapped->totface) || + ((p_orig != ORIGINDEX_NONE) && !BM_elem_flag_test(ftable[p_orig], BM_ELEM_HIDDEN))) + { const short ma_id = mp->mat_nr < mat_len ? mp->mat_nr : 0; for (int j = 2; j < mp->totloop; j++) { GPU_indexbuf_add_tri_verts(&elb[ma_id], nidx + 0, nidx + 1, nidx + 2); |