Commit: 4f2c19b4238f728408a9629848cb60b993305fc6
Author: Clément Foucault
Date:   Fri Jan 10 13:35:41 2020 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB4f2c19b4238f728408a9629848cb60b993305fc6

GPencil: Refactor: Fix crash when drawing on blank gpobject

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

M       source/blender/draw/engines/gpencil/gpencil_draw_data.c
M       source/blender/draw/intern/draw_cache_impl_gpencil.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_data.c 
b/source/blender/draw/engines/gpencil/gpencil_draw_data.c
index b4835543b89..c35244782cf 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_data.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_data.c
@@ -114,7 +114,7 @@ GPENCIL_MaterialPool 
*gpencil_material_pool_create(GPENCIL_PrivateData *pd, Obje
   }
 
   GPENCIL_MaterialPool *pool = matpool;
-  for (int i = 0; i < ob->totcol; i++) {
+  for (int i = 0; i < max_ii(1, ob->totcol); i++) {
     int mat_id = (i % GP_MATERIAL_BUFFER_LEN);
     if ((i > 0) && (mat_id == 0)) {
       pool->next = gpencil_material_pool_add(pd);
@@ -145,7 +145,8 @@ GPENCIL_MaterialPool 
*gpencil_material_pool_create(GPENCIL_PrivateData *pd, Obje
       }
     }
 
-    if ((gp_style->mode != GP_MATERIAL_MODE_LINE) || (gp_style->flag & 
GP_MATERIAL_DISABLE_STENCIL)) {
+    if ((gp_style->mode != GP_MATERIAL_MODE_LINE) ||
+        (gp_style->flag & GP_MATERIAL_DISABLE_STENCIL)) {
       mat_data->flag |= GP_STROKE_OVERLAP;
     }
 
diff --git a/source/blender/draw/intern/draw_cache_impl_gpencil.c 
b/source/blender/draw/intern/draw_cache_impl_gpencil.c
index c687ba75bd5..b574a18cc5d 100644
--- a/source/blender/draw/intern/draw_cache_impl_gpencil.c
+++ b/source/blender/draw/intern/draw_cache_impl_gpencil.c
@@ -501,7 +501,7 @@ bGPDstroke 
*DRW_cache_gpencil_sbuffer_stroke_data_get(Object *ob)
   if (gpd->runtime.sbuffer_gps == NULL) {
     bGPDstroke *gps = MEM_callocN(sizeof(*gps), "bGPDstroke sbuffer");
     gps->totpoints = gpd->runtime.sbuffer_used;
-    gps->mat_nr = gpd->runtime.matid - 1;
+    gps->mat_nr = max_ii(0, gpd->runtime.matid - 1);
     gps->flag = gpd->runtime.sbuffer_sflag;
     gps->thickness = gpd->runtime.brush_size;
     gps->tot_triangles = max_ii(0, gpd->runtime.sbuffer_used - 2);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to