[Bf-blender-cvs] [9c629b06bfd] blender2.8: Workbench OpenGL render: always render alpha on 1.0

Jeroen Bakker noreply at git.blender.org
Fri Jun 15 17:42:36 CEST 2018


Commit: 9c629b06bfdf645c009d953902c936b82900053a
Author: Jeroen Bakker
Date:   Fri Jun 15 17:40:18 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB9c629b06bfdf645c009d953902c936b82900053a

Workbench OpenGL render: always render alpha on 1.0

Old implementation rendered alpha to 0.0 for background, but only during
deferred rendering. We should attach this to an DNA setting and also let
the forward shading respect this. But for now this is a better default

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

M	source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
M	source/blender/draw/engines/workbench/workbench_data.c
M	source/blender/draw/engines/workbench/workbench_private.h

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

diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
index f67d2ff6745..069cb0f52d8 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
@@ -17,7 +17,8 @@ struct WorldData {
 	LightData lights[3];
 	int num_lights;
 	int matcap_orientation;
-	int pad[2];
+	float background_alpha;
+	int pad[1];
 };
 
 struct MaterialData {
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
index 461fb2fb130..4a1d88c29c1 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
@@ -32,7 +32,7 @@ void main()
 
 #ifndef V3D_SHADING_OBJECT_OUTLINE
 	if (object_id == NO_OBJECT_ID) {
-		fragColor = vec4(background_color(world_data, uv_viewport.y), 0.0);
+		fragColor = vec4(background_color(world_data, uv_viewport.y), world_data.background_alpha);
 		return;
 	}
 #else /* !V3D_SHADING_OBJECT_OUTLINE */
@@ -41,10 +41,10 @@ void main()
 	if (object_id == NO_OBJECT_ID) {
 		vec3 background = background_color(world_data, uv_viewport.y);
 		if (object_outline == 0.0) {
-			fragColor = vec4(background, 0.0);
+			fragColor = vec4(background, world_data.background_alpha);
 		}
 		else {
-			fragColor = vec4(mix(world_data.object_outline_color.rgb, background, object_outline), 1.0-object_outline);
+			fragColor = vec4(mix(world_data.object_outline_color.rgb, background, object_outline), clamp(world_data.background_alpha, 1.0, object_outline));
 		}
 		return;
 	}
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index df0a2bf4684..72d59068e03 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -36,6 +36,7 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
 
 	WORKBENCH_UBO_World *wd = &wpd->world_data;
 	wd->matcap_orientation = (wpd->shading.flag & V3D_SHADING_MATCAP_FLIP_X) > 0;
+	wd->background_alpha = 1.0f;
 
 	if ((v3d->flag3 & V3D_SHOW_WORLD) &&
 	    (scene->world != NULL))
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index 5e8a7c05161..7a74deed357 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -124,7 +124,8 @@ typedef struct WORKBENCH_UBO_World {
 	WORKBENCH_UBO_Light lights[3];
 	int num_lights;
 	int matcap_orientation;
-	int pad[2];
+	float background_alpha;
+	int pad[1];
 } WORKBENCH_UBO_World;
 BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_World, 16)



More information about the Bf-blender-cvs mailing list