Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-05-13 22:20:18 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-05-14 17:16:29 +0300
commitc233271b0b1f63c730903e580dc1877dfb1d3402 (patch)
treed661d62b5e68d82d662d446df36b5bc3a33d38d2 /source/blender/draw/engines
parent97f50c71b9ef3b2a4030b172d48e940f4aa5d87d (diff)
Fix T76126 Overlay: Glitch when hiding Nurb vertices
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r--source/blender/draw/engines/overlay/overlay_edit_curve.c5
-rw-r--r--source/blender/draw/engines/overlay/shaders/edit_curve_handle_geom.glsl5
-rw-r--r--source/blender/draw/engines/overlay/shaders/edit_curve_point_vert.glsl10
3 files changed, 16 insertions, 4 deletions
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);
+ }
}