DRW: add ability to skip drawing vertices
authorCampbell Barton <ideasman42@gmail.com>
Thu, 11 Oct 2018 02:45:50 +0000 (13:45 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 11 Oct 2018 05:43:38 +0000 (16:43 +1100)
source/blender/draw/intern/draw_cache_impl.h
source/blender/draw/intern/draw_cache_impl_mesh.c
source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl

index 1aaedd39c856592e08526269cdea1e4644751595..27272769ec6d9783163ec05eb44f7fc7ee6f8a3f 100644 (file)
@@ -178,9 +178,10 @@ void DRW_mesh_cache_uvedit(
 enum {
        VFLAG_VERTEX_ACTIVE   = 1 << 0,
        VFLAG_VERTEX_SELECTED = 1 << 1,
-       VFLAG_FACE_ACTIVE     = 1 << 2,
-       VFLAG_FACE_SELECTED   = 1 << 3,
-       VFLAG_FACE_FREESTYLE  = 1 << 4,
+       VFLAG_VERTEX_EXISTS   = 1 << 2,
+       VFLAG_FACE_ACTIVE     = 1 << 3,
+       VFLAG_FACE_SELECTED   = 1 << 4,
+       VFLAG_FACE_FREESTYLE  = 1 << 5,
        /* Beware to not go over 1 << 7 (it's a byte flag)
         * (see gpu_shader_edit_mesh_overlay_geom.glsl) */
 };
index 8d901e9a05f4173f5cf8cd2c77630427572b075b..05b1a2499d3706f131d21d229d195d0afa91f40b 100644 (file)
@@ -1438,7 +1438,7 @@ static void mesh_render_data_edge_flag(
 
 static uchar mesh_render_data_vertex_flag(MeshRenderData *rdata, const BMVert *eve)
 {
-       uchar vflag = 0;
+       uchar vflag = VFLAG_VERTEX_EXISTS;
 
        /* Current vertex */
        if (eve == rdata->eve_act)
index 87ee0d7f00f2b0af66dcf39ca8fa01ef8df479c1..bdf3ef267e9317c425e7f8182e08cbd620e83dde 100644 (file)
@@ -6,9 +6,11 @@
 #define EDGE_FREESTYLE  (1 << 5)
 #define EDGE_VERTEX_ACTIVE   (1 << (0 + 8))
 #define EDGE_VERTEX_SELECTED (1 << (1 + 8))
+#define EDGE_VERTEX_EXISTS   (1 << (2 + 8))
 
 #define VERTEX_ACTIVE   (1 << 0)
 #define VERTEX_SELECTED (1 << 1)
+#define VERTEX_EXISTS   (1 << 2)
 
 uniform bool doEdges = true;
 
index 7f985cd2c436a5696c70c9d5f6f543659aedeb61..92eb00d4dccbde0f6b9746b9dd9da0813b67ba2c 100644 (file)
@@ -28,7 +28,7 @@ flat in vec2 ssPos[3];
 out vec4 FragColor;
 
 /* Vertex flag is shifted and combined with the edge flag */
-#define FACE_ACTIVE     (1 << (2 + 8))
+#define FACE_ACTIVE     (1 << (3 + 8))
 
 #define LARGE_EDGE_SIZE 3.0
 
@@ -106,13 +106,18 @@ void main()
        /* Points */
 #ifdef VERTEX_SELECTION
        for (int v = 0; v < 3; ++v) {
-               float size = p[v] - sizeVertex;
+               if ((flag[v] & EDGE_VERTEX_EXISTS) == 0) {
+                       /* Leave as-is, no vertex. */
+               }
+               else {
+                       float size = p[v] - sizeVertex;
 
-               vec4 point_color = colorVertex;
-               point_color = ((flag[v] & EDGE_VERTEX_SELECTED) != 0) ? colorVertexSelect : point_color;
-               point_color = ((flag[v] & EDGE_VERTEX_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : point_color;
+                       vec4 point_color = colorVertex;
+                       point_color = ((flag[v] & EDGE_VERTEX_SELECTED) != 0) ? colorVertexSelect : point_color;
+                       point_color = ((flag[v] & EDGE_VERTEX_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : point_color;
 
-               colorDist(point_color, size);
+                       colorDist(point_color, size);
+               }
        }
 #endif
 
index 88cb6c07a94c40a2f8a9f6846bbad33172202a4a..68fcc33acff3c99ad0412e1125db63fb8ba874af 100644 (file)
@@ -34,8 +34,8 @@ out float facing;
 /* See fragment shader */
 flat out vec2 ssPos[3];
 
-#define FACE_ACTIVE     (1 << 2)
-#define FACE_SELECTED   (1 << 3)
+#define FACE_ACTIVE     (1 << 3)
+#define FACE_SELECTED   (1 << 4)
 
 /* project to screen space */
 vec2 proj(vec4 pos)
index 7d6c64afabc8285c8db6d8417ec037f8f4859044..d020bcc69511f580fead75e2208855365032d223 100644 (file)
@@ -54,9 +54,9 @@ out float facing;
 /* See fragment shader */
 flat out vec2 ssPos[3];
 
-#define FACE_ACTIVE     (1 << 2)
-#define FACE_SELECTED   (1 << 3)
-#define FACE_FREESTYLE  (1 << 4)
+#define FACE_ACTIVE     (1 << 3)
+#define FACE_SELECTED   (1 << 4)
+#define FACE_FREESTYLE  (1 << 5)
 
 /* project to screen space */
 vec2 proj(vec4 pos)