From 24140444f2fb92292f93abbb472613d6cf7700a9 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Mon, 11 May 2020 15:15:26 +0200 Subject: [PATCH] Fix T75556: Select Emitter Object via Hair MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit {rB3685347b4172} introduced a conservative depth rendering for selection. The conservative depth rendering assumed that all geometry are triangle based. Hair is lined base. This patch will use a normal depth shader for rendering hair. Reviewed By: Clément Foucault Differential Revision: https://developer.blender.org/D7661 --- source/blender/draw/engines/basic/basic_engine.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c index 799359098fe..ab53f7025c0 100644 --- a/source/blender/draw/engines/basic/basic_engine.c +++ b/source/blender/draw/engines/basic/basic_engine.c @@ -79,6 +79,7 @@ static struct { typedef struct BASIC_PrivateData { DRWShadingGroup *depth_shgrp[2]; DRWShadingGroup *depth_shgrp_cull[2]; + DRWShadingGroup *depth_hair_shgrp[2]; } BASIC_PrivateData; /* Transient data */ /* Functions */ @@ -137,6 +138,9 @@ static void basic_cache_init(void *vedata) DRW_shgroup_uniform_vec2(grp, "sizeViewport", DRW_viewport_size_get(), 1); DRW_shgroup_uniform_vec2(grp, "sizeViewportInv", DRW_viewport_invert_size_get(), 1); + stl->g_data->depth_hair_shgrp[i] = grp = DRW_shgroup_create(sh_data->depth, + psl->depth_pass[i]); + state |= DRW_STATE_CULL_BACK; DRW_PASS_CREATE(psl->depth_pass_cull[i], state | clip_state | infront_state); stl->g_data->depth_shgrp_cull[i] = grp = DRW_shgroup_create(sh, psl->depth_pass_cull[i]); @@ -167,7 +171,7 @@ static void basic_cache_populate(void *vedata, Object *ob) const int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as; if (draw_as == PART_DRAW_PATH) { struct GPUBatch *hairs = DRW_cache_particles_get_hair(ob, psys, NULL); - DRW_shgroup_call(stl->g_data->depth_shgrp[do_in_front], hairs, NULL); + DRW_shgroup_call(stl->g_data->depth_hair_shgrp[do_in_front], hairs, NULL); } } }