[Bf-blender-cvs] [2bd36338d3f] blender2.8: Gawain : Add workaround to fix bad sync of the program_in_use flag.

Clément Foucault noreply at git.blender.org
Mon Oct 2 22:17:27 CEST 2017


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)



More information about the Bf-blender-cvs mailing list