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>2018-09-26 17:40:09 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-09-26 17:42:57 +0300
commitf7a81abe190a3ed546831577a077507758200777 (patch)
tree41973f3e02b784a36a9ad64728475fdafcd3fea2 /source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
parent1407a111381463cd05ca92a661403d9f114dc95a (diff)
Edit Surface: Use edit curve engine to display edit surface
It's so similar in practice that we don't need a separate engine for edit surface overlays.
Diffstat (limited to 'source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl')
-rw-r--r--source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl18
1 files changed, 13 insertions, 5 deletions
diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
index f284a347806..7bc9b381bad 100644
--- a/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
+++ b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
@@ -2,12 +2,13 @@
#define VERTEX_ACTIVE 1 << 0
#define VERTEX_SELECTED 1 << 1
#define ACTIVE_NURB 1 << 2 /* Keep the same value of `ACTIVE_NURB` in `draw_cache_imp_curve.c` */
-#define NURBS_EDGE_SELECTED (((vertFlag[1] & vertFlag[0]) & VERTEX_SELECTED) != 0)
+#define EVEN_U_BIT 1 << 3
layout(lines) in;
layout(triangle_strip, max_vertices = 10) out;
uniform vec2 viewportSize;
+uniform bool showCurveHandles;
flat in int vertFlag[];
@@ -28,13 +29,11 @@ void output_line(vec2 offset, vec4 color)
void main()
{
- /* TODO: vertex size */
-
vec4 v1 = gl_in[0].gl_Position;
vec4 v2 = gl_in[1].gl_Position;
int is_active_nurb = (vertFlag[1] & ACTIVE_NURB);
- int color_id = (vertFlag[1] >> 3);
+ int color_id = (vertFlag[1] >> 4);
/* Don't output any edges if we don't show handles */
if (!showCurveHandles && (color_id < 5))
@@ -48,7 +47,16 @@ void main()
else if (color_id == 2) inner_color = (edge_selected) ? colorHandleSelVect : colorHandleVect;
else if (color_id == 3) inner_color = (edge_selected) ? colorHandleSelAlign : colorHandleAlign;
else if (color_id == 4) inner_color = (edge_selected) ? colorHandleSelAutoclamp : colorHandleAutoclamp;
- else inner_color = (NURBS_EDGE_SELECTED) ? colorNurbSelUline : colorNurbUline;
+ else {
+ bool is_selected = (((vertFlag[1] & vertFlag[0]) & VERTEX_SELECTED) != 0);
+ bool is_u_segment = (((vertFlag[1] ^ vertFlag[0]) & EVEN_U_BIT) != 0);
+ if (is_u_segment) {
+ inner_color = (is_selected) ? colorNurbSelUline : colorNurbUline;
+ }
+ else {
+ inner_color = (is_selected) ? colorNurbSelVline : colorNurbVline;
+ }
+ }
vec4 outer_color = (is_active_nurb != 0)
? mix(colorActiveSpline, inner_color, 0.25) /* Minimize active color bleeding on inner_color. */