[Bf-blender-cvs] [54bff9dc897] blender-v2.81-release: Fix T71147 Eevee stops rendering after selection attempt

Clément Foucault noreply at git.blender.org
Tue Dec 3 10:50:23 CET 2019


Commit: 54bff9dc8972240d2683c58e31d21ce9324003a4
Author: Clément Foucault
Date:   Thu Nov 28 18:39:08 2019 +0100
Branches: blender-v2.81-release
https://developer.blender.org/rB54bff9dc8972240d2683c58e31d21ce9324003a4

Fix T71147 Eevee stops rendering after selection attempt

This is caused by the fallback path used by OSX, which is reconfiguring
the same default VAO. But it seems to be an issue on certain drivers.

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

M	source/blender/gpu/intern/gpu_batch.c

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

diff --git a/source/blender/gpu/intern/gpu_batch.c b/source/blender/gpu/intern/gpu_batch.c
index 168d741f92a..23692cb20ec 100644
--- a/source/blender/gpu/intern/gpu_batch.c
+++ b/source/blender/gpu/intern/gpu_batch.c
@@ -655,11 +655,24 @@ void GPU_batch_draw_advanced(GPUBatch *batch, int v_first, int v_count, int i_fi
   // BLI_assert(v_first + v_count <=
   //            (batch->elem ? batch->elem->index_len : batch->verts[0]->vertex_len));
 
+#ifdef __APPLE__
+  GLuint vao = 0;
+#endif
+
   if (!GPU_arb_base_instance_is_supported()) {
     if (i_first > 0) {
+#ifdef __APPLE__
+      /**
+       * There seems to be a nasty bug when drawing using the same VAO reconfiguring. (see T71147)
+       * We just use a throwaway VAO for that. Note that this is likely to degrade performance.
+       **/
+      glGenVertexArrays(1, &vao);
+      glBindVertexArray(vao);
+#else
       /* If using offset drawing with instancing, we must
        * use the default VAO and redo bindings. */
       glBindVertexArray(GPU_vao_default());
+#endif
       batch_update_program_bindings(batch, i_first);
     }
     else {
@@ -698,6 +711,12 @@ void GPU_batch_draw_advanced(GPUBatch *batch, int v_first, int v_count, int i_fi
     glEnable(GL_PRIMITIVE_RESTART);
 #endif
   }
+
+#ifdef __APPLE__
+  if (vao != 0) {
+    glDeleteVertexArrays(1, &vao);
+  }
+#endif
 }
 
 /* just draw some vertices and let shader place them where we want. */



More information about the Bf-blender-cvs mailing list