From e4a727626e34eef20e2b41cc3e26b41db4f360a0 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 1 Jun 2018 17:06:25 +0200 Subject: X-Ray: Added a slider for the alpha - will not render when set to 0.0 for speed reasons. so when user sets transparency to hide everything the bigger passes will be skipped. --- .../blender/draw/engines/workbench/workbench_forward.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'source/blender/draw/engines/workbench/workbench_forward.c') diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index 279e6a745ee..50cf5676239 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -178,6 +178,7 @@ static WORKBENCH_MaterialData *get_or_create_material_data( drawtype == OB_SOLID ? wpd->transparent_accum_sh : wpd->transparent_accum_texture_sh, psl->transparent_accum_pass); DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo); + DRW_shgroup_uniform_float(grp, "alpha", &wpd->shading.xray_alpha, 1); workbench_material_set_normal_world_matrix(grp, wpd, e_data.normal_world_matrix); material->object_id = engine_object_data->object_id; copy_v4_v4(material->material_data.diffuse_color, material_template.material_data.diffuse_color); @@ -343,6 +344,7 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata) int state = DRW_STATE_WRITE_COLOR | DRW_STATE_TRANSPARENT_REVEALAGE; psl->transparent_revealage_pass = DRW_pass_create("Transparent Revealage", state); grp = DRW_shgroup_create(e_data.transparent_revealage_sh, psl->transparent_revealage_pass); + DRW_shgroup_uniform_float(grp, "alpha", &wpd->shading.xray_alpha, 1); wpd->transparent_revealage_shgrp = grp; } #endif @@ -546,14 +548,17 @@ void workbench_forward_draw_scene(WORKBENCH_Data *vedata) /* Write Depth + Object ID */ GPU_framebuffer_bind(fbl->object_outline_fb); DRW_draw_pass(psl->object_outline_pass); - - /* Shade */ - GPU_framebuffer_bind(fbl->transparent_accum_fb); - DRW_draw_pass(psl->transparent_accum_pass); + + if (wpd->shading.xray_alpha > 0.0) { + /* Shade */ + GPU_framebuffer_bind(fbl->transparent_accum_fb); + DRW_draw_pass(psl->transparent_accum_pass); #ifdef WORKBENCH_REVEALAGE_ENABLED - GPU_framebuffer_bind(fbl->transparent_revealage_fb); - DRW_draw_pass(psl->transparent_revealage_pass); + GPU_framebuffer_bind(fbl->transparent_revealage_fb); + DRW_draw_pass(psl->transparent_revealage_pass); #endif + } + /* Composite */ GPU_framebuffer_bind(fbl->composite_fb); DRW_draw_pass(psl->composite_pass); -- cgit v1.2.3