[Bf-blender-cvs] [2cc69a5e202] master: Workbench: Support transparency from object color alpha

Clément Foucault noreply at git.blender.org
Tue Jan 29 20:35:12 CET 2019


Commit: 2cc69a5e2023ddc5a6a6ebed16a5d9ea3af2eaef
Author: Clément Foucault
Date:   Tue Jan 29 19:56:22 2019 +0100
Branches: master
https://developer.blender.org/rB2cc69a5e2023ddc5a6a6ebed16a5d9ea3af2eaef

Workbench: Support transparency from object color alpha

Support the alpha channel use of the object color in solid mode.

The Transparency effect is still using the Xray algorithm and not
true Alpha blending.

===================================================================

M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_private.h

===================================================================

diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index c1b4398c3d2..3f8a29a20a5 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -938,8 +938,17 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
 		else if (ELEM(wpd->shading.color_type,
 		              V3D_SHADING_SINGLE_COLOR, V3D_SHADING_OBJECT_COLOR, V3D_SHADING_RANDOM_COLOR))
 		{
-			/* Draw solid color */
-			material = get_or_create_material_data(vedata, ob, NULL, NULL, wpd->shading.color_type, 0);
+			if ((ob->col[3] < 1.0f) &&
+			    (wpd->shading.color_type == V3D_SHADING_OBJECT_COLOR))
+			{
+				wpd->shading.xray_alpha = ob->col[3];
+				material = workbench_forward_get_or_create_material_data(vedata, ob, NULL, NULL, wpd->shading.color_type, 0);
+				has_transp_mat = true;
+			}
+			else {
+				/* Draw solid color */
+				material = get_or_create_material_data(vedata, ob, NULL, NULL, wpd->shading.color_type, 0);
+			}
 			if (is_sculpt_mode) {
 				DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat);
 			}
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index e9c98b020ac..ee0811eecfe 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -62,7 +62,7 @@
 #define SHADOW_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_SHADOW)
 #define GHOST_ENABLED(psl) (!DRW_pass_is_empty(psl->ghost_prepass_pass) || !DRW_pass_is_empty(psl->ghost_prepass_hair_pass))
 #define CULL_BACKFACE_ENABLED(wpd) ((wpd->shading.flag & V3D_SHADING_BACKFACE_CULLING) != 0)
-#define OIT_ENABLED(wpd) (wpd->shading.color_type == V3D_SHADING_MATERIAL_COLOR)
+#define OIT_ENABLED(wpd) (ELEM(wpd->shading.color_type, V3D_SHADING_MATERIAL_COLOR, V3D_SHADING_OBJECT_COLOR))
 
 #define IS_NAVIGATING(wpd) ((DRW_context_state_get()->rv3d) && (DRW_context_state_get()->rv3d->rflag & RV3D_NAVIGATING))
 #define FXAA_ENABLED(wpd) ((!DRW_state_is_opengl_render()) && \



More information about the Bf-blender-cvs mailing list