diff options
4 files changed, 8 insertions, 5 deletions
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) |