[Bf-blender-cvs] [d74b89aed03] blender2.8: DRW: add ability to skip drawing vertices

Campbell Barton noreply at git.blender.org
Thu Oct 11 07:55:26 CEST 2018


Commit: d74b89aed0310bcead9e17a8100f69b9b1872313
Author: Campbell Barton
Date:   Thu Oct 11 13:45:50 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBd74b89aed0310bcead9e17a8100f69b9b1872313

DRW: add ability to skip drawing vertices

===================================================================

M	source/blender/draw/intern/draw_cache_impl.h
M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl

===================================================================

diff --git a/source/blender/draw/intern/draw_cache_impl.h b/source/blender/draw/intern/draw_cache_impl.h
index 1aaedd39c85..27272769ec6 100644
--- a/source/blender/draw/intern/draw_cache_impl.h
+++ b/source/blender/draw/intern/draw_cache_impl.h
@@ -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) */
 };
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 8d901e9a05f..05b1a2499d3 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -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)
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
index 87ee0d7f00f..bdf3ef267e9 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
@@ -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;
 
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
index 7f985cd2c43..92eb00d4dcc 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
@@ -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
 
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
index 88cb6c07a94..68fcc33acff 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
@@ -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)
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
index 7d6c64afabc..d020bcc6951 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
@@ -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)



More information about the Bf-blender-cvs mailing list