From 10001d909905180fbdbbada041680d99c899cbda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sun, 18 Aug 2019 22:40:47 +0200 Subject: [PATCH] Mesh Batch Cache: Fix regression with mesh that have poly mat id > mat_len --- source/blender/draw/intern/draw_cache_extract_mesh.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c b/source/blender/draw/intern/draw_cache_extract_mesh.c index 5b56067d355..bd057f92d62 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh.c +++ b/source/blender/draw/intern/draw_cache_extract_mesh.c @@ -454,7 +454,8 @@ static void *extract_tris_init(const MeshRenderData *mr, void *UNUSED(ibo)) BMFace *efa; BM_ITER_MESH (efa, &iter, mr->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) { - mat_tri_len[efa->mat_nr] += efa->len - 2; + int mat = min_ii(efa->mat_nr, mr->mat_len - 1); + mat_tri_len[mat] += efa->len - 2; } } } @@ -462,7 +463,8 @@ static void *extract_tris_init(const MeshRenderData *mr, void *UNUSED(ibo)) const MPoly *mpoly = mr->mpoly; for (int p = 0; p < mr->poly_len; p++, mpoly++) { if (!(mr->use_hide && (mpoly->flag & ME_HIDE))) { - mat_tri_len[mpoly->mat_nr] += mpoly->totloop - 2; + int mat = min_ii(mpoly->mat_nr, mr->mat_len - 1); + mat_tri_len[mat] += mpoly->totloop - 2; } } } @@ -508,8 +510,9 @@ static void extract_tris_looptri_mesh(const MeshRenderData *mr, if (!(mr->use_hide && (mpoly->flag & ME_HIDE))) { MeshExtract_Tri_Data *data = _data; int *mat_tri_ofs = data->tri_mat_end; + int mat = min_ii(mpoly->mat_nr, mr->mat_len - 1); GPU_indexbuf_set_tri_verts( - &data->elb, mat_tri_ofs[mpoly->mat_nr]++, mlt->tri[0], mlt->tri[1], mlt->tri[2]); + &data->elb, mat_tri_ofs[mat]++, mlt->tri[0], mlt->tri[1], mlt->tri[2]); } }