[Bf-blender-cvs] [10001d90990] master: Mesh Batch Cache: Fix regression with mesh that have poly mat id > mat_len

Clément Foucault noreply at git.blender.org
Sun Aug 18 22:41:17 CEST 2019


Commit: 10001d909905180fbdbbada041680d99c899cbda
Author: Clément Foucault
Date:   Sun Aug 18 22:40:47 2019 +0200
Branches: master
https://developer.blender.org/rB10001d909905180fbdbbada041680d99c899cbda

Mesh Batch Cache: Fix regression with mesh that have poly mat id > mat_len

===================================================================

M	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 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]);
   }
 }



More information about the Bf-blender-cvs mailing list