Commit: 2bd36338d3ff809c104fe4a30e9332a2929f10c2
Author: Clément Foucault
Date:   Mon Oct 2 22:16:50 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB2bd36338d3ff809c104fe4a30e9332a2929f10c2

Gawain : Add workaround to fix bad sync of the program_in_use flag.

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

M       intern/gawain/gawain/gwn_batch.h
M       intern/gawain/src/gwn_batch.c
M       source/blender/draw/intern/draw_manager.c

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

diff --git a/intern/gawain/gawain/gwn_batch.h b/intern/gawain/gawain/gwn_batch.h
index 9bcb7437163..ee1599845c8 100644
--- a/intern/gawain/gawain/gwn_batch.h
+++ b/intern/gawain/gawain/gwn_batch.h
@@ -65,6 +65,7 @@ int GWN_batch_vertbuf_add_ex(Gwn_Batch*, Gwn_VertBuf*, bool 
own_vbo);
        GWN_batch_vertbuf_add_ex(batch, verts, false)
 
 void GWN_batch_program_set(Gwn_Batch*, GLuint program, const 
Gwn_ShaderInterface*);
+void GWN_batch_program_unset(Gwn_Batch*);
 // Entire batch draws with one shader program, but can be redrawn later with 
another program.
 // Vertex shader's inputs must be compatible with the batch's vertex format.
 
diff --git a/intern/gawain/src/gwn_batch.c b/intern/gawain/src/gwn_batch.c
index 359ca956495..c651fb3a26f 100644
--- a/intern/gawain/src/gwn_batch.c
+++ b/intern/gawain/src/gwn_batch.c
@@ -110,6 +110,14 @@ void GWN_batch_program_set(Gwn_Batch* batch, GLuint 
program, const Gwn_ShaderInt
        GWN_batch_program_use_begin(batch); // hack! to make Batch_Uniform* 
simpler
        }
 
+// fclem : hack !
+// we need this because we don't want to unbind the shader between drawcalls
+// but we still want the correct shader to be bound outside the draw manager
+void GWN_batch_program_unset(Gwn_Batch* batch)
+       {
+       batch->program_in_use = false;
+       }
+
 static void Batch_update_program_bindings(Gwn_Batch* batch)
        {
        // disable all as a precaution
diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index fab2df680ea..ec22baace3e 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1809,6 +1809,9 @@ static void draw_geometry_execute(DRWShadingGroup 
*shgroup, Gwn_Batch *geom)
        else {
                GWN_batch_draw_stupid(geom);
        }
+       /* XXX this just tells gawain we are done with the shader.
+        * This does not unbind the shader. */
+       GWN_batch_program_unset(geom);
 }
 
 static void draw_geometry(DRWShadingGroup *shgroup, Gwn_Batch *geom, const 
float (*obmat)[4], ID *ob_data)

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

Reply via email to