[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