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:
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/edit_curve_handle_geom.glsl')
-rw-r--r--source/blender/draw/engines/overlay/shaders/edit_curve_handle_geom.glsl16
1 files changed, 16 insertions, 0 deletions
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 b444b3b0fec..306fbb473ee 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
@@ -4,10 +4,15 @@
#define EVEN_U_BIT 1 << 4
#define COLOR_SHIFT 5
+/* Keep the same value in `handle_display` in `DNA_view3d_types.h` */
+#define CURVE_HANDLE_SELECTED 0
+#define CURVE_HANDLE_ALL 1
+
layout(lines) in;
layout(triangle_strip, max_vertices = 10) out;
uniform bool showCurveHandles;
+uniform int curveHandleDisplay;
flat in int vertFlag[];
@@ -46,6 +51,17 @@ void main()
}
bool edge_selected = (((vertFlag[1] | vertFlag[0]) & VERT_SELECTED) != 0);
+ bool handle_selected = (showCurveHandles &&
+ (((vertFlag[1] | vertFlag[0]) & HANDLE_SELECTED) != 0));
+
+ /* If handle type is only selected and the edge is not selected, don't show. */
+ if ((curveHandleDisplay != CURVE_HANDLE_ALL) && (!handle_selected)) {
+ /* Nurbs must show the handles always. */
+ bool is_u_segment = (((vertFlag[1] ^ vertFlag[0]) & EVEN_U_BIT) != 0);
+ if (!is_u_segment) {
+ return;
+ }
+ }
vec4 inner_color;
if (color_id == 0) {