[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