Fix T62869 Transparent background not working in Xray Mode / Wireframe

This was due to the forward part of the engine not supporting rendered
alpha channel.
This commit is contained in:
Clément Foucault 2019-03-23 22:13:57 +01:00
parent 13832988ad
commit e77dc3e7ff
Notes: blender-bot 2023-02-14 09:02:40 +01:00
Referenced by issue #62884, Missing control point in unselected mask handles
Referenced by issue #62869, No way to viewport render wireframe against transparent background in 2.80
2 changed files with 6 additions and 4 deletions

View File

@ -27,15 +27,16 @@ void main()
#ifndef ALPHA_COMPOSITE
vec3 bg_color = background_color(world_data, uv_viewport.y);
vec3 color = mix(trans_color, bg_color, trans_revealage);
bg_color = (world_data.background_alpha == 0.0) ? trans_color : bg_color;
vec4 color = mix(vec4(trans_color, 1.0), vec4(bg_color, world_data.background_alpha), trans_revealage);
# ifdef V3D_SHADING_OBJECT_OUTLINE
uint object_id = texelFetch(objectId, texel, 0).r;
float outline = calculate_object_outline(objectId, texel, object_id);
color = mix(world_data.object_outline_color.rgb, color, outline);
color = mix(vec4(world_data.object_outline_color.rgb, 1.0), color, outline);
# endif
fragColor = vec4(color, 1.0);
fragColor = color;
#else
fragColor = vec4(trans_color, 1.0 - trans_revealage);
#endif

View File

@ -325,6 +325,7 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
const float *viewport_size = DRW_viewport_size_get();
const int size[2] = {(int)viewport_size[0], (int)viewport_size[1]};
const eGPUTextureFormat comp_tex_format = DRW_state_is_image_render() ? GPU_RGBA16F : GPU_R11F_G11F_B10F;
e_data.object_id_tx = DRW_texture_pool_query_2d(
size[0], size[1], GPU_R32UI, &draw_engine_workbench_transparent);
@ -333,7 +334,7 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
e_data.transparent_revealage_tx = DRW_texture_pool_query_2d(
size[0], size[1], GPU_R16F, &draw_engine_workbench_transparent);
e_data.composite_buffer_tx = DRW_texture_pool_query_2d(
size[0], size[1], GPU_R11F_G11F_B10F, &draw_engine_workbench_transparent);
size[0], size[1], comp_tex_format, &draw_engine_workbench_transparent);
GPU_framebuffer_ensure_config(&fbl->object_outline_fb, {
GPU_ATTACHMENT_TEXTURE(dtxl->depth),