[Bf-blender-cvs] [d65df10216b] blender2.8: DRW: Add DRW_shgroup_is_empty and DRW_pass_is_empty
Clément Foucault
noreply at git.blender.org
Mon Jul 30 14:21:00 CEST 2018
Commit: d65df10216b8de09b8a1cfc695030649511337a0
Author: Clément Foucault
Date: Mon Jul 30 12:23:23 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd65df10216b8de09b8a1cfc695030649511337a0
DRW: Add DRW_shgroup_is_empty and DRW_pass_is_empty
===================================================================
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager_data.c
===================================================================
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index adcfe2524c7..cd2db3cfd0a 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -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. */
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index dccb869c133..407eea16d91 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -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;
More information about the Bf-blender-cvs
mailing list