diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-10-11 05:45:50 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-10-11 08:43:38 +0300 |
commit | d74b89aed0310bcead9e17a8100f69b9b1872313 (patch) | |
tree | ee71ba071f9d9f829550c150c583bae3d6befcc8 | |
parent | b7363941f7ddfd5154a0a61f17c6186d049793be (diff) |
DRW: add ability to skip drawing vertices
6 files changed, 23 insertions, 15 deletions
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) |