DRW: Add DRW_shgroup_is_empty and DRW_pass_is_empty
This commit is contained in:
@@ -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. */
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user