Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-08-21 16:53:57 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-08-21 16:53:57 +0300
commitd357e7b0653588d5fb85deec270464778a252406 (patch)
tree0b14aecf4a9e528f70fd96cea03cff47fd05937c /source/blender/draw
parent8a11e702525e3df9d5602045bf905f314cd7abbd (diff)
Fix T68826 Eevee: Multi-Mat not working if switching from Solid shading
The correct fix would be to avoid all those hacks but this is needed if we want to be able to parallelize object vbo extractions.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 884d39343c6..3bf9a03ddeb 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1088,6 +1088,25 @@ void DRW_mesh_batch_cache_create_requested(
}
}
+ /* HACK: if MBC_SURF_PER_MAT is requested and ibo.tris is already available, it won't have it's
+ * index ranges initialized. So discard ibo.tris in order to recreate it. */
+ if ((batch_requested & MBC_SURF_PER_MAT) != 0 && (cache->batch_ready & MBC_SURF_PER_MAT) == 0) {
+ FOREACH_MESH_BUFFER_CACHE(cache, mbuffercache)
+ {
+ GPU_INDEXBUF_DISCARD_SAFE(mbuffercache->ibo.tris);
+ }
+ /* Clear all batches that reference ibo.tris. */
+ GPU_BATCH_CLEAR_SAFE(cache->batch.surface);
+ GPU_BATCH_CLEAR_SAFE(cache->batch.surface_weights);
+ GPU_BATCH_CLEAR_SAFE(cache->batch.edit_mesh_analysis);
+ GPU_BATCH_CLEAR_SAFE(cache->batch.edit_triangles);
+ GPU_BATCH_CLEAR_SAFE(cache->batch.edit_lnor);
+ GPU_BATCH_CLEAR_SAFE(cache->batch.edit_selection_faces);
+
+ cache->batch_ready &= ~(MBC_SURFACE | MBC_SURFACE_WEIGHTS | MBC_EDIT_MESH_ANALYSIS |
+ MBC_EDIT_TRIANGLES | MBC_EDIT_LNOR | MBC_EDIT_SELECTION_FACES);
+ }
+
/* Second chance to early out */
if ((batch_requested & ~cache->batch_ready) == 0) {
#ifdef DEBUG