Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Rood <dev@lucarood.com>2017-05-05 19:22:07 +0300
committerLuca Rood <dev@lucarood.com>2017-05-05 19:23:27 +0300
commitd9949c351d20bf911d273d0b43bbdad624741ddf (patch)
tree1a9a3c045395c2961a0416ac94a021245455cd9e
parent55395449582432fec91adc7bf8b7d97dc0e49137 (diff)
Pass selection to weight paint vert overlay instead of colors
-rw-r--r--source/blender/draw/CMakeLists.txt1
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c29
-rw-r--r--source/blender/draw/modes/paint_weight_mode.c7
3 files changed, 20 insertions, 17 deletions
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 4b5efe60eae..64371d74960 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -153,6 +153,7 @@ data_to_c_simple(modes/shaders/object_grid_frag.glsl SRC)
data_to_c_simple(modes/shaders/object_grid_vert.glsl SRC)
data_to_c_simple(modes/shaders/paint_wire_frag.glsl SRC)
data_to_c_simple(modes/shaders/paint_wire_vert.glsl SRC)
+data_to_c_simple(modes/shaders/paint_vert_frag.glsl SRC)
list(APPEND INC
)
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index e17f3700bf6..a75ea6fa11c 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1403,7 +1403,7 @@ static bool mesh_render_data_tri_cos_sel_get(
static bool mesh_render_data_vert_cos_sel_get(
MeshRenderData *rdata, const int vert_idx,
- float r_vert_co[3], float r_vert_col[3])
+ float r_vert_co[3], int *r_vert_sel)
{
BLI_assert(rdata->types & (MR_DATATYPE_VERT));
@@ -1414,14 +1414,10 @@ static bool mesh_render_data_vert_cos_sel_get(
const MVert *mv = &rdata->mvert[vert_idx];
if (mv->flag & SELECT) {
- r_vert_col[0] = 1.0f;
- r_vert_col[1] = 1.0f;
- r_vert_col[2] = 1.0f;
+ *r_vert_sel = true;
}
else {
- r_vert_col[0] = 0.4f;
- r_vert_col[1] = 0.4f;
- r_vert_col[2] = 0.4f;
+ *r_vert_sel = false;
}
copy_v3_v3(r_vert_co, mv->co);
@@ -2364,11 +2360,11 @@ static VertexBuffer *mesh_batch_cache_get_edge_pos_with_sel(
unsigned int vidx = 0, cidx = 0;
static VertexFormat format = { 0 };
- static unsigned int pos_id, col_id;
+ static unsigned int pos_id, sel_id;
if (format.attrib_ct == 0) {
/* initialize vertex format */
pos_id = VertexFormat_add_attrib(&format, "pos", COMP_F32, 3, KEEP_FLOAT);
- col_id = VertexFormat_add_attrib(&format, "select", COMP_U8, 1, KEEP_INT);
+ sel_id = VertexFormat_add_attrib(&format, "select", COMP_U8, 1, KEEP_INT);
}
const int edge_len = mesh_render_data_edges_len_get(rdata);
@@ -2386,8 +2382,8 @@ static VertexBuffer *mesh_batch_cache_get_edge_pos_with_sel(
if (mesh_render_data_edge_cos_sel_get(
rdata, i, edge_vert_cos, &edge_vert_sel, use_wire, use_sel))
{
- VertexBuffer_set_attrib(vbo, col_id, cidx++, &edge_vert_sel);
- VertexBuffer_set_attrib(vbo, col_id, cidx++, &edge_vert_sel);
+ VertexBuffer_set_attrib(vbo, sel_id, cidx++, &edge_vert_sel);
+ VertexBuffer_set_attrib(vbo, sel_id, cidx++, &edge_vert_sel);
VertexBuffer_set_attrib(vbo, pos_id, vidx++, edge_vert_cos[0]);
VertexBuffer_set_attrib(vbo, pos_id, vidx++, edge_vert_cos[1]);
@@ -2456,11 +2452,11 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_sel(MeshRenderData *rdat
unsigned int vidx = 0, cidx = 0;
static VertexFormat format = { 0 };
- static unsigned int pos_id, col_id;
+ static unsigned int pos_id, sel_id;
if (format.attrib_ct == 0) {
/* initialize vertex format */
pos_id = VertexFormat_add_attrib(&format, "pos", COMP_F32, 3, KEEP_FLOAT);
- col_id = VertexFormat_add_attrib(&format, "color", COMP_F32, 3, KEEP_FLOAT);
+ sel_id = VertexFormat_add_attrib(&format, "select", COMP_I8, 1, KEEP_INT);
}
const int vert_len = mesh_render_data_verts_len_get(rdata);
@@ -2472,12 +2468,13 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_sel(MeshRenderData *rdat
VertexBuffer_allocate_data(vbo, vbo_len_capacity);
for (int i = 0; i < vert_len; i++) {
- static float vert_co[3], vert_col[3];
+ static float vert_co[3];
+ static int vert_sel;
if (mesh_render_data_vert_cos_sel_get(
- rdata, i, vert_co, vert_col))
+ rdata, i, vert_co, &vert_sel))
{
- VertexBuffer_set_attrib(vbo, col_id, cidx++, vert_col);
+ VertexBuffer_set_attrib(vbo, sel_id, cidx++, &vert_sel);
VertexBuffer_set_attrib(vbo, pos_id, vidx++, vert_co);
}
}
diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c
index 10e798f1fc3..98ead1dc9fc 100644
--- a/source/blender/draw/modes/paint_weight_mode.c
+++ b/source/blender/draw/modes/paint_weight_mode.c
@@ -42,6 +42,7 @@ extern struct GlobalsUboStorage ts; /* draw_common.c */
extern char datatoc_paint_wire_vert_glsl[];
extern char datatoc_paint_wire_frag_glsl[];
+extern char datatoc_paint_vert_frag_glsl[];
extern char datatoc_common_globals_lib_glsl[];
/* *********** LISTS *********** */
@@ -110,7 +111,10 @@ static void PAINT_WEIGHT_engine_init(void *UNUSED(vedata))
}
if (!e_data.vert_overlay_shader) {
- e_data.vert_overlay_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR);
+ e_data.vert_overlay_shader = DRW_shader_create_with_lib(
+ datatoc_paint_wire_vert_glsl, NULL,
+ datatoc_paint_vert_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
}
}
@@ -208,6 +212,7 @@ static void PAINT_WEIGHT_draw_scene(void *vedata)
static void PAINT_WEIGHT_engine_free(void)
{
DRW_SHADER_FREE_SAFE(e_data.wire_overlay_shader);
+ DRW_SHADER_FREE_SAFE(e_data.vert_overlay_shader);
}
void PAINT_WEIGHT_collection_settings_create(IDProperty *properties)