Fix active face-dot color
[blender.git] / source / blender / draw / modes / shaders / edit_mesh_overlay_common_lib.glsl
1
2 uniform bool selectFaces = true;
3 uniform bool selectEdges = true;
4
5 vec4 EDIT_MESH_edge_color_outer(int edge_flag, int face_flag, float crease, float bweight)
6 {
7   vec4 color = vec4(0.0);
8   color = ((edge_flag & EDGE_FREESTYLE) != 0) ? colorEdgeFreestyle : color;
9   color = ((edge_flag & EDGE_SHARP) != 0) ? colorEdgeSharp : color;
10   color = (crease > 0.0) ? vec4(colorEdgeCrease.rgb, crease) : color;
11   color = (bweight > 0.0) ? vec4(colorEdgeBWeight.rgb, bweight) : color;
12   color = ((edge_flag & EDGE_SEAM) != 0) ? colorEdgeSeam : color;
13   return color;
14 }
15
16 vec4 EDIT_MESH_edge_color_inner(int edge_flag)
17 {
18   vec4 color = colorWireEdit;
19   vec4 color_select = (selectEdges) ? colorEdgeSelect : mix(colorEdgeSelect, colorWireEdit, .45);
20   color = ((edge_flag & EDGE_SELECTED) != 0) ? color_select : color;
21   color = ((edge_flag & EDGE_ACTIVE) != 0) ? colorEditMeshActive : color;
22
23   color.a = (selectEdges || (edge_flag & (EDGE_SELECTED | EDGE_ACTIVE)) != 0) ? 1.0 : 0.4;
24   return color;
25 }
26
27 vec4 EDIT_MESH_edge_vertex_color(int vertex_flag)
28 {
29   vec4 color = colorWireEdit;
30   vec4 color_select = (selectEdges) ? colorEdgeSelect : mix(colorEdgeSelect, colorWireEdit, .45);
31
32   bool edge_selected = (vertex_flag & (VERT_ACTIVE | VERT_SELECTED)) != 0;
33   color = (edge_selected) ? color_select : color;
34
35   color.a = (selectEdges || edge_selected) ? 1.0 : 0.4;
36   return color;
37 }
38
39 vec4 EDIT_MESH_vertex_color(int vertex_flag)
40 {
41   if ((vertex_flag & VERT_ACTIVE) != 0) {
42     return vec4(colorEditMeshActive.xyz, 1.0);
43   }
44   else if ((vertex_flag & VERT_SELECTED) != 0) {
45     return colorVertexSelect;
46   }
47   else {
48     return colorVertex;
49   }
50 }
51
52 vec4 EDIT_MESH_face_color(int face_flag)
53 {
54   vec4 color = colorFace;
55   vec4 color_active = mix(colorFaceSelect, colorEditMeshActive, 0.5);
56   color = ((face_flag & FACE_FREESTYLE) != 0) ? colorFaceFreestyle : color;
57   color = ((face_flag & FACE_SELECTED) != 0) ? colorFaceSelect : color;
58   color = ((face_flag & FACE_ACTIVE) != 0) ? color_active : color;
59   color.a *= ((face_flag & (FACE_FREESTYLE | FACE_SELECTED | FACE_ACTIVE)) == 0 || selectFaces) ?
60                  1.0 :
61                  0.5;
62   return color;
63 }
64
65 vec4 EDIT_MESH_facedot_color(float facedot_flag)
66 {
67   if (facedot_flag < 0.0f) {
68     return vec4(colorEditMeshActive.xyz, 1.0);
69   }
70   else if (facedot_flag > 0.0f) {
71     return colorFaceDot;
72   }
73   else {
74     return colorVertex;
75   }
76 }