[Bf-blender-cvs] [fabd55a5e9e] blender2.8: DWM: hide hidden verts in weight-paint mode
Campbell Barton
noreply at git.blender.org
Wed May 17 10:07:59 CEST 2017
Commit: fabd55a5e9e9afc9975d44a1dc7c22531c2089eb
Author: Campbell Barton
Date: Wed May 17 18:09:40 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBfabd55a5e9e9afc9975d44a1dc7c22531c2089eb
DWM: hide hidden verts in weight-paint mode
===================================================================
M source/blender/draw/intern/draw_cache_impl_mesh.c
M source/blender/draw/modes/shaders/paint_vert_frag.glsl
M source/blender/draw/modes/shaders/paint_wire_vert.glsl
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 7059fd46ef5..5ff39878f72 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -2726,7 +2726,11 @@ static VertexBuffer *mesh_batch_cache_get_tri_pos_with_unselect_only(
return cache->tri_pos_with_unselect_only;
}
-static VertexBuffer *mesh_batch_cache_get_vert_pos_with_sel(MeshRenderData *rdata, MeshBatchCache *cache)
+/**
+ * Non-edit mode vertices (only used for weight-paint mode).
+ */
+static VertexBuffer *mesh_batch_cache_get_vert_pos_with_overlay_data(
+ MeshRenderData *rdata, MeshBatchCache *cache)
{
BLI_assert(rdata->types & (MR_DATATYPE_VERT));
BLI_assert(rdata->edit_bmesh == NULL);
@@ -2738,7 +2742,7 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_sel(MeshRenderData *rdat
static struct { uint pos, sel; } attr_id;
if (format.attrib_ct == 0) {
attr_id.pos = VertexFormat_add_attrib(&format, "pos", COMP_F32, 3, KEEP_FLOAT);
- attr_id.sel = VertexFormat_add_attrib(&format, "select", COMP_I8, 1, KEEP_INT);
+ attr_id.sel = VertexFormat_add_attrib(&format, "data", COMP_I8, 1, KEEP_INT);
}
const int vert_len = mesh_render_data_verts_len_get(rdata);
@@ -2751,8 +2755,8 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_sel(MeshRenderData *rdat
for (int i = 0; i < vert_len; i++) {
const MVert *mv = &rdata->mvert[i];
- const char vert_sel = (mv->flag & SELECT) != 0;
- VertexBuffer_set_attrib(vbo, attr_id.sel, cidx++, &vert_sel);
+ const char data = mv->flag & (SELECT | ME_HIDE);
+ VertexBuffer_set_attrib(vbo, attr_id.sel, cidx++, &data);
VertexBuffer_set_attrib(vbo, attr_id.pos, vidx++, mv->co);
}
vbo_len_used = vidx;
@@ -3242,7 +3246,7 @@ Batch *DRW_mesh_batch_cache_get_weight_overlay_verts(Mesh *me)
MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT);
cache->overlay_weight_verts = Batch_create(
- PRIM_POINTS, mesh_batch_cache_get_vert_pos_with_sel(rdata, cache), NULL);
+ PRIM_POINTS, mesh_batch_cache_get_vert_pos_with_overlay_data(rdata, cache), NULL);
mesh_render_data_free(rdata);
}
diff --git a/source/blender/draw/modes/shaders/paint_vert_frag.glsl b/source/blender/draw/modes/shaders/paint_vert_frag.glsl
index c6eb334711f..c22e1c04b96 100644
--- a/source/blender/draw/modes/shaders/paint_vert_frag.glsl
+++ b/source/blender/draw/modes/shaders/paint_vert_frag.glsl
@@ -1,9 +1,16 @@
-flat in int finalSelect;
+flat in int finalFlag;
out vec4 fragColor;
+#define VERTEX_SELECTED (1 << 0)
+#define VERTEX_HIDE (1 << 4)
+
void main()
{
+ if (bool(finalFlag & VERTEX_HIDE)) {
+ discard;
+ }
+
vec2 centered = gl_PointCoord - vec2(0.5);
float dist_squared = dot(centered, centered);
const float rad_squared = 0.25;
@@ -11,8 +18,9 @@ void main()
const vec4 colUnsel = vec4(0.5, 0.5, 0.5, 1.0);
// round point with jaggy edges
- if (dist_squared > rad_squared)
+ if (dist_squared > rad_squared) {
discard;
+ }
- fragColor = bool(finalSelect) ? colSel : colUnsel;
+ fragColor = bool(finalFlag & VERTEX_SELECTED) ? colSel : colUnsel;
}
diff --git a/source/blender/draw/modes/shaders/paint_wire_vert.glsl b/source/blender/draw/modes/shaders/paint_wire_vert.glsl
index 1f404d33c88..253c21745e2 100644
--- a/source/blender/draw/modes/shaders/paint_wire_vert.glsl
+++ b/source/blender/draw/modes/shaders/paint_wire_vert.glsl
@@ -2,12 +2,13 @@
uniform mat4 ModelViewProjectionMatrix;
in vec3 pos;
-in int select;
+in int data;
-flat out int finalSelect;
+flat out int finalFlag;
void main()
{
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
- finalSelect = select;
+
+ finalFlag = data;
}
More information about the Bf-blender-cvs
mailing list