[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