[Bf-blender-cvs] [daf02baaeaa] blender2.8: Add new DRW_draw_pass_subset function

Antonio Vazquez noreply at git.blender.org
Mon Jun 26 20:43:26 CEST 2017


Commit: daf02baaeaaf8f0a7c68ae236a2d0782c08aea2f
Author: Antonio Vazquez
Date:   Mon Jun 26 20:42:58 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBdaf02baaeaaf8f0a7c68ae236a2d0782c08aea2f

Add new DRW_draw_pass_subset function

This function allows to draw only a selected range of shading groups.

This is required for some special situations as grease pencil strokes.

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

M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c

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

diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index de2099806e3..48017cfb960 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -357,6 +357,7 @@ bool DRW_object_is_flat_normal(struct Object *ob);
 
 /* Draw commands */
 void DRW_draw_pass(DRWPass *pass);
+void DRW_draw_pass_subset(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group);
 
 void DRW_draw_text_cache_queue(struct DRWTextStore *dt);
 
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index bcbd4e5eb31..97563a4b5d4 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1825,7 +1825,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
 	DRW_state_reset();
 }
 
-void DRW_draw_pass(DRWPass *pass)
+static void DRW_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group)
 {
 	/* Start fresh */
 	DST.shader = NULL;
@@ -1857,8 +1857,12 @@ void DRW_draw_pass(DRWPass *pass)
 		glBeginQuery(GL_TIME_ELAPSED, pass->timer_queries[pass->back_idx]);
 	}
 
-	for (DRWShadingGroup *shgroup = pass->shgroups.first; shgroup; shgroup = shgroup->next) {
+	for (DRWShadingGroup *shgroup = start_group; shgroup; shgroup = shgroup->next) {
 		draw_shgroup(shgroup, pass->state);
+		/* break if upper limit */
+		if (shgroup == end_group) {
+			break;
+		}
 	}
 
 	/* Clear Bound textures */
@@ -1880,6 +1884,17 @@ void DRW_draw_pass(DRWPass *pass)
 	pass->wasdrawn = true;
 }
 
+void DRW_draw_pass(DRWPass *pass)
+{
+	DRW_draw_pass_ex(pass, pass->shgroups.first, pass->shgroups.last);
+}
+
+/* Draw only a subset of shgroups. Used in special situations as grease pencil strokes */
+void DRW_draw_pass_subset(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group)
+{
+	DRW_draw_pass_ex(pass, start_group, end_group);
+}
+
 void DRW_draw_callbacks_pre_scene(void)
 {
 	RegionView3D *rv3d = DST.draw_ctx.rv3d;




More information about the Bf-blender-cvs mailing list