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