Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-10-23 04:34:34 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-10-23 04:34:34 +0300
commite3013fdc3b9bb9747ffd44a08d5afe16617816c2 (patch)
tree6b44a4dc67b94b6769a6aa032788fb6dab4a688f /source/blender/draw
parent5891f81f258bf3c9bb9d9683698a792254584c7f (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.c10
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);