DRW: Add DRW_shgroup_is_empty and DRW_pass_is_empty

This commit is contained in:
2018-07-30 12:23:23 +02:00
parent 6a493e4430
commit d65df10216
2 changed files with 31 additions and 0 deletions

View File

@@ -402,6 +402,8 @@ void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, co
void DRW_shgroup_uniform_bool_copy(DRWShadingGroup *shgroup, const char *name, const bool value);
void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, const float value);
bool DRW_shgroup_is_empty(DRWShadingGroup *shgroup);
/* Passes */
DRWPass *DRW_pass_create(const char *name, DRWState state);
void DRW_pass_state_set(DRWPass *pass, DRWState state);
@@ -410,6 +412,8 @@ void DRW_pass_state_remove(DRWPass *pass, DRWState state);
void DRW_pass_foreach_shgroup(DRWPass *pass, void (*callback)(void *userData, DRWShadingGroup *shgrp), void *userData);
void DRW_pass_sort_shgroup_z(DRWPass *pass);
bool DRW_pass_is_empty(DRWPass *pass);
/* Viewport */
typedef enum {
/* keep in sync with the union struct DRWMatrixState. */

View File

@@ -998,6 +998,23 @@ void DRW_shgroup_stencil_mask(DRWShadingGroup *shgroup, uint mask)
shgroup->stencil_mask = mask;
}
bool DRW_shgroup_is_empty(DRWShadingGroup *shgroup)
{
switch (shgroup->type) {
case DRW_SHG_NORMAL:
case DRW_SHG_FEEDBACK_TRANSFORM:
return shgroup->calls.first == NULL;
case DRW_SHG_POINT_BATCH:
case DRW_SHG_LINE_BATCH:
case DRW_SHG_TRIANGLE_BATCH:
case DRW_SHG_INSTANCE:
case DRW_SHG_INSTANCE_EXTERNAL:
return shgroup->instance_count == 0;
}
BLI_assert(!"Shading Group type not supported");
return true;
}
/** \} */
/* -------------------------------------------------------------------- */
@@ -1019,6 +1036,16 @@ DRWPass *DRW_pass_create(const char *name, DRWState state)
return pass;
}
bool DRW_pass_is_empty(DRWPass *pass)
{
for (DRWShadingGroup *shgroup = pass->shgroups.first; shgroup; shgroup = shgroup->next) {
if (!DRW_shgroup_is_empty(shgroup)) {
return false;
}
}
return true;
}
void DRW_pass_state_set(DRWPass *pass, DRWState state)
{
pass->state = state;