[Bf-blender-cvs] [a8a11d35372] master: Mesh Batch Cache: Fix crash when comming from eevee to wireframe mode

Clément Foucault noreply at git.blender.org
Wed May 8 22:09:43 CEST 2019


Commit: a8a11d35372a90c2d26089db2a2c778d31502427
Author: Clément Foucault
Date:   Wed May 8 22:01:34 2019 +0200
Branches: master
https://developer.blender.org/rBa8a11d35372a90c2d26089db2a2c778d31502427

Mesh Batch Cache: Fix crash when comming from eevee to wireframe mode

And add check in debug build.

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

M	source/blender/draw/intern/draw_cache_impl_mesh.c

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

diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 737bfd24439..ed60b3be3ef 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -2118,6 +2118,8 @@ static void mesh_batch_cache_init(Mesh *me)
   cache->surf_per_mat = MEM_callocN(sizeof(*cache->surf_per_mat) * cache->mat_len, __func__);
 
   cache->is_dirty = false;
+  cache->batch_ready = 0;
+  cache->batch_requested = 0;
 
   drw_mesh_weight_state_clear(&cache->weight_state);
 }
@@ -4902,6 +4904,9 @@ void DRW_mesh_batch_cache_create_requested(
 
   /* Early out */
   if (cache->batch_requested == 0) {
+#ifdef DEBUG
+    goto check;
+#endif
     return;
   }
 
@@ -4954,7 +4959,7 @@ void DRW_mesh_batch_cache_create_requested(
         GPU_BATCH_CLEAR_SAFE(cache->surf_per_mat[i]);
       }
       GPU_BATCH_CLEAR_SAFE(cache->batch.surface);
-      cache->batch_ready = ~(MBC_SURFACE | MBC_SURF_PER_MAT);
+      cache->batch_ready &= ~(MBC_SURFACE | MBC_SURF_PER_MAT);
 
       mesh_cd_layers_type_merge(&cache->cd_used, cache->cd_needed);
     }
@@ -4991,10 +4996,14 @@ void DRW_mesh_batch_cache_create_requested(
 
   /* Second chance to early out */
   if ((cache->batch_requested & ~cache->batch_ready) == 0) {
+#ifdef DEBUG
+    goto check;
+#endif
     return;
   }
 
   cache->batch_ready |= cache->batch_requested;
+  cache->batch_requested = 0;
 
   /* Init batches and request VBOs & IBOs */
   if (DRW_batch_requested(cache->batch.surface, GPU_PRIM_TRIS)) {
@@ -5386,6 +5395,7 @@ void DRW_mesh_batch_cache_create_requested(
   }
 
 #ifdef DEBUG
+check:
   /* Make sure all requested batches have been setup. */
   for (int i = 0; i < sizeof(cache->batch) / sizeof(void *); ++i) {
     BLI_assert(!DRW_batch_requested(((GPUBatch **)&cache->batch)[i], 0));



More information about the Bf-blender-cvs mailing list