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.
This commit is contained in:
Antonio Vazquez
2017-06-26 20:42:58 +02:00
parent 1758330220
commit daf02baaea
2 changed files with 18 additions and 2 deletions

View File

@@ -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);

View File

@@ -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;