From c233271b0b1f63c730903e580dc1877dfb1d3402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Wed, 13 May 2020 21:20:18 +0200 Subject: Fix T76126 Overlay: Glitch when hiding Nurb vertices --- source/blender/draw/engines/overlay/overlay_edit_curve.c | 5 +++-- .../draw/engines/overlay/shaders/edit_curve_handle_geom.glsl | 5 +++-- .../draw/engines/overlay/shaders/edit_curve_point_vert.glsl | 10 ++++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) (limited to 'source/blender/draw/engines') diff --git a/source/blender/draw/engines/overlay/overlay_edit_curve.c b/source/blender/draw/engines/overlay/overlay_edit_curve.c index d9b9fac6b4b..6456d6868a5 100644 --- a/source/blender/draw/engines/overlay/overlay_edit_curve.c +++ b/source/blender/draw/engines/overlay/overlay_edit_curve.c @@ -66,6 +66,7 @@ void OVERLAY_edit_curve_cache_init(OVERLAY_Data *vedata) sh = OVERLAY_shader_edit_curve_point(); pd->edit_curve_points_grp = grp = DRW_shgroup_create(sh, psl->edit_curve_handle_ps); + DRW_shgroup_uniform_bool_copy(grp, "showCurveHandles", pd->edit_curve.show_handles); DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo); } } @@ -94,7 +95,7 @@ void OVERLAY_edit_curve_cache_populate(OVERLAY_Data *vedata, Object *ob) DRW_shgroup_call_no_cull(pd->edit_curve_handle_grp, geom, ob); } - geom = DRW_cache_curve_vert_overlay_get(ob, pd->edit_curve.show_handles); + geom = DRW_cache_curve_vert_overlay_get(ob); if (geom) { DRW_shgroup_call_no_cull(pd->edit_curve_points_grp, geom, ob); } @@ -110,7 +111,7 @@ void OVERLAY_edit_surf_cache_populate(OVERLAY_Data *vedata, Object *ob) DRW_shgroup_call_no_cull(pd->edit_curve_handle_grp, geom, ob); } - geom = DRW_cache_curve_vert_overlay_get(ob, false); + geom = DRW_cache_curve_vert_overlay_get(ob); if (geom) { DRW_shgroup_call_no_cull(pd->edit_curve_points_grp, geom, ob); } diff --git a/source/blender/draw/engines/overlay/shaders/edit_curve_handle_geom.glsl b/source/blender/draw/engines/overlay/shaders/edit_curve_handle_geom.glsl index b6576ba7a21..b444b3b0fec 100644 --- a/source/blender/draw/engines/overlay/shaders/edit_curve_handle_geom.glsl +++ b/source/blender/draw/engines/overlay/shaders/edit_curve_handle_geom.glsl @@ -1,7 +1,8 @@ /* Keep the same value of `ACTIVE_NURB` in `draw_cache_imp_curve.c` */ #define ACTIVE_NURB 1 << 2 -#define EVEN_U_BIT 1 << 3 +#define EVEN_U_BIT 1 << 4 +#define COLOR_SHIFT 5 layout(lines) in; layout(triangle_strip, max_vertices = 10) out; @@ -37,7 +38,7 @@ void main() vec4 v2 = gl_in[1].gl_Position; int is_active_nurb = (vertFlag[1] & ACTIVE_NURB); - int color_id = (vertFlag[1] >> 4); + int color_id = (vertFlag[1] >> COLOR_SHIFT); /* Don't output any edges if we don't show handles */ if (!showCurveHandles && (color_id < 5)) { diff --git a/source/blender/draw/engines/overlay/shaders/edit_curve_point_vert.glsl b/source/blender/draw/engines/overlay/shaders/edit_curve_point_vert.glsl index aca40bba171..6fa4576ae71 100644 --- a/source/blender/draw/engines/overlay/shaders/edit_curve_point_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/edit_curve_point_vert.glsl @@ -1,4 +1,9 @@ +/* Keep the same value of `BEZIER_HANDLE` in `draw_cache_imp_curve.c` */ +#define BEZIER_HANDLE 1 << 3 + +uniform bool showCurveHandles; + in vec3 pos; in int data; @@ -26,4 +31,9 @@ void main() #ifdef USE_WORLD_CLIP_PLANES world_clip_planes_calc_clip_distance(world_pos); #endif + + if (!showCurveHandles && ((data & BEZIER_HANDLE) != 0)) { + /* We set the vertex at the camera origin to generate 0 fragments. */ + gl_Position = vec4(0.0, 0.0, -3e36, 0.0); + } } -- cgit v1.2.3