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 15:25:43 +0300
committerLuca Rood <dev@lucarood.com>2017-05-05 16:53:37 +0300
commit872d8993ddda28a4340730a5842af18ccf55fd2b (patch)
tree1fe03d2615d0f49843121363d2249edb8ea21728 /source/blender/draw/intern
parent14bf4ed19407e98575ca7646e942f8230a0b2e8d (diff)
Clean up weight/vertex painting code
Now passing selection state instead of colors for the wire/face mask overlay thing. Also added masking indication on the faces in vertex paint.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/draw_cache.c4
-rw-r--r--source/blender/draw/intern/draw_cache.h2
-rw-r--r--source/blender/draw/intern/draw_cache_impl.h2
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c69
4 files changed, 28 insertions, 49 deletions
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index 7e49d998fa0..eed62725df5 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -1818,12 +1818,12 @@ Batch *DRW_cache_mesh_verts_get(Object *ob)
return DRW_mesh_batch_cache_get_all_verts(me);
}
-Batch *DRW_cache_mesh_edges_paint_overlay_get(Object *ob, bool use_wire, bool use_sel, bool use_theme)
+Batch *DRW_cache_mesh_edges_paint_overlay_get(Object *ob, bool use_wire, bool use_sel)
{
BLI_assert(ob->type == OB_MESH);
Mesh *me = ob->data;
- return DRW_mesh_batch_cache_get_weight_overlay_edges(me, use_wire, use_sel, use_theme);
+ return DRW_mesh_batch_cache_get_weight_overlay_edges(me, use_wire, use_sel);
}
Batch *DRW_cache_mesh_faces_weight_overlay_get(Object *ob)
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index 160cfaf1693..00031560113 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -99,7 +99,7 @@ struct Batch *DRW_cache_mesh_surface_vert_colors_get(struct Object *ob);
struct Batch *DRW_cache_mesh_surface_verts_get(struct Object *ob);
struct Batch *DRW_cache_mesh_edges_get(struct Object *ob);
struct Batch *DRW_cache_mesh_verts_get(struct Object *ob);
-struct Batch *DRW_cache_mesh_edges_paint_overlay_get(struct Object *ob, bool use_wire, bool use_sel, bool use_theme);
+struct Batch *DRW_cache_mesh_edges_paint_overlay_get(struct Object *ob, bool use_wire, bool use_sel);
struct Batch *DRW_cache_mesh_faces_weight_overlay_get(struct Object *ob);
struct Batch *DRW_cache_mesh_verts_weight_overlay_get(struct Object *ob);
struct Batch **DRW_cache_mesh_surface_shaded_get(struct Object *ob);
diff --git a/source/blender/draw/intern/draw_cache_impl.h b/source/blender/draw/intern/draw_cache_impl.h
index bbb1c820f63..ddcc55fd85e 100644
--- a/source/blender/draw/intern/draw_cache_impl.h
+++ b/source/blender/draw/intern/draw_cache_impl.h
@@ -68,7 +68,7 @@ struct Batch *DRW_lattice_batch_cache_get_overlay_verts(struct Lattice *lt);
/* Mesh */
struct Batch **DRW_mesh_batch_cache_get_surface_shaded(struct Mesh *me);
-struct Batch *DRW_mesh_batch_cache_get_weight_overlay_edges(struct Mesh *me, bool use_wire, bool use_sel, bool use_theme);
+struct Batch *DRW_mesh_batch_cache_get_weight_overlay_edges(struct Mesh *me, bool use_wire, bool use_sel);
struct Batch *DRW_mesh_batch_cache_get_weight_overlay_faces(struct Mesh *me);
struct Batch *DRW_mesh_batch_cache_get_weight_overlay_verts(struct Mesh *me);
struct Batch *DRW_mesh_batch_cache_get_all_edges(struct Mesh *me);
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 5d6f7673c9e..e17f3700bf6 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -51,8 +51,6 @@
#include "GPU_batch.h"
#include "GPU_draw.h"
-#include "UI_resources.h"
-
#include "draw_cache_impl.h" /* own include */
static void mesh_batch_cache_clear(Mesh *me);
@@ -1329,8 +1327,8 @@ static bool mesh_render_data_looptri_cos_select_id_get(
static bool mesh_render_data_edge_cos_sel_get(
MeshRenderData *rdata, const int edge_idx,
- float r_vert_cos[2][3], float r_vert_col[3],
- bool use_wire, bool use_sel, bool use_theme)
+ float r_vert_cos[2][3], int *r_vert_sel,
+ bool use_wire, bool use_sel)
{
BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_POLY | MR_DATATYPE_LOOP));
@@ -1361,20 +1359,11 @@ static bool mesh_render_data_edge_cos_sel_get(
}
if (use_sel && rdata->edge_selection[edge_idx]) {
- if (use_theme) {
- UI_GetThemeColorShade3fv(TH_EDGE_SELECT, -50, r_vert_col);
- }
- else {
- r_vert_col[0] = 1.0f;
- r_vert_col[1] = 1.0f;
- r_vert_col[2] = 1.0f;
- }
+ *r_vert_sel = true;
}
else {
if (use_wire) {
- r_vert_col[0] = 0.5f;
- r_vert_col[1] = 0.5f;
- r_vert_col[2] = 0.5f;
+ *r_vert_sel = false;
}
else {
return false;
@@ -1390,7 +1379,7 @@ static bool mesh_render_data_edge_cos_sel_get(
static bool mesh_render_data_tri_cos_sel_get(
MeshRenderData *rdata, const int tri_idx,
- float r_vert_cos[3][3], float r_vert_col[4])
+ float r_vert_cos[3][3])
{
BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_POLY | MR_DATATYPE_LOOP | MR_DATATYPE_LOOPTRI));
@@ -1401,13 +1390,7 @@ static bool mesh_render_data_tri_cos_sel_get(
const MLoopTri *mlt = &rdata->mlooptri[tri_idx];
if (rdata->mpoly[mlt->poly].flag & ME_FACE_SEL) {
- r_vert_col[3] = 0.0f;
- }
- else {
- r_vert_col[0] = 1.0f;
- r_vert_col[1] = 1.0f;
- r_vert_col[2] = 1.0f;
- r_vert_col[3] = 0.2f;
+ return false;
}
copy_v3_v3(r_vert_cos[0], rdata->mvert[rdata->mloop[mlt->tri[0]].v].co);
@@ -1663,7 +1646,7 @@ typedef struct MeshBatchCache {
Batch *overlay_loose_verts;
Batch *overlay_loose_edges;
Batch *overlay_facedots;
- Batch *overlay_weight_edges;
+ Batch *overlay_paint_edges;
Batch *overlay_weight_faces;
Batch *overlay_weight_verts;
@@ -1800,7 +1783,7 @@ static void mesh_batch_cache_clear(Mesh *me)
BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_verts);
BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_edges);
BATCH_DISCARD_ALL_SAFE(cache->overlay_facedots);
- BATCH_DISCARD_ALL_SAFE(cache->overlay_weight_edges);
+ BATCH_DISCARD_ALL_SAFE(cache->overlay_paint_edges);
BATCH_DISCARD_ALL_SAFE(cache->overlay_weight_faces);
BATCH_DISCARD_ALL_SAFE(cache->overlay_weight_verts);
@@ -2373,7 +2356,7 @@ static ElementList **mesh_batch_cache_get_shaded_triangles_in_order(MeshRenderDa
}
static VertexBuffer *mesh_batch_cache_get_edge_pos_with_sel(
- MeshRenderData *rdata, MeshBatchCache *cache, bool use_wire, bool use_sel, bool use_theme)
+ MeshRenderData *rdata, MeshBatchCache *cache, bool use_wire, bool use_sel)
{
BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_POLY | MR_DATATYPE_LOOP));
@@ -2385,7 +2368,7 @@ static VertexBuffer *mesh_batch_cache_get_edge_pos_with_sel(
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);
+ col_id = VertexFormat_add_attrib(&format, "select", COMP_U8, 1, KEEP_INT);
}
const int edge_len = mesh_render_data_edges_len_get(rdata);
@@ -2397,13 +2380,14 @@ static VertexBuffer *mesh_batch_cache_get_edge_pos_with_sel(
VertexBuffer_allocate_data(vbo, vbo_len_capacity);
for (int i = 0; i < edge_len; i++) {
- static float edge_vert_cos[2][3], edge_vert_col[3];
+ static float edge_vert_cos[2][3];
+ static int edge_vert_sel;
if (mesh_render_data_edge_cos_sel_get(
- rdata, i, edge_vert_cos, edge_vert_col, use_wire, use_sel, use_theme))
+ rdata, i, edge_vert_cos, &edge_vert_sel, use_wire, use_sel))
{
- VertexBuffer_set_attrib(vbo, col_id, cidx++, edge_vert_col);
- VertexBuffer_set_attrib(vbo, col_id, cidx++, edge_vert_col);
+ VertexBuffer_set_attrib(vbo, col_id, cidx++, &edge_vert_sel);
+ VertexBuffer_set_attrib(vbo, col_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]);
@@ -2425,14 +2409,13 @@ static VertexBuffer *mesh_batch_cache_get_tri_pos_with_sel(MeshRenderData *rdata
BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_POLY | MR_DATATYPE_LOOP | MR_DATATYPE_LOOPTRI));
if (cache->tri_pos_with_sel == NULL) {
- unsigned int vidx = 0, cidx = 0;
+ unsigned int vidx = 0;
static VertexFormat format = { 0 };
- static unsigned int pos_id, col_id;
+ static unsigned int pos_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, 4, KEEP_FLOAT);
}
const int tri_len = mesh_render_data_looptri_len_get(rdata);
@@ -2444,15 +2427,11 @@ static VertexBuffer *mesh_batch_cache_get_tri_pos_with_sel(MeshRenderData *rdata
VertexBuffer_allocate_data(vbo, vbo_len_capacity);
for (int i = 0; i < tri_len; i++) {
- static float tri_vert_cos[3][3], tri_vert_col[4];
+ static float tri_vert_cos[3][3];
if (mesh_render_data_tri_cos_sel_get(
- rdata, i, tri_vert_cos, tri_vert_col))
+ rdata, i, tri_vert_cos))
{
- VertexBuffer_set_attrib(vbo, col_id, cidx++, tri_vert_col);
- VertexBuffer_set_attrib(vbo, col_id, cidx++, tri_vert_col);
- VertexBuffer_set_attrib(vbo, col_id, cidx++, tri_vert_col);
-
VertexBuffer_set_attrib(vbo, pos_id, vidx++, tri_vert_cos[0]);
VertexBuffer_set_attrib(vbo, pos_id, vidx++, tri_vert_cos[1]);
VertexBuffer_set_attrib(vbo, pos_id, vidx++, tri_vert_cos[2]);
@@ -2941,22 +2920,22 @@ Batch **DRW_mesh_batch_cache_get_surface_shaded(Mesh *me)
return cache->shaded_triangles;
}
-Batch *DRW_mesh_batch_cache_get_weight_overlay_edges(Mesh *me, bool use_wire, bool use_sel, bool use_theme)
+Batch *DRW_mesh_batch_cache_get_weight_overlay_edges(Mesh *me, bool use_wire, bool use_sel)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
- if (cache->overlay_weight_edges == NULL) {
+ if (cache->overlay_paint_edges == NULL) {
/* create batch from Mesh */
const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_POLY | MR_DATATYPE_LOOP;
MeshRenderData *rdata = mesh_render_data_create(me, datatype);
- cache->overlay_weight_edges = Batch_create(
- PRIM_LINES, mesh_batch_cache_get_edge_pos_with_sel(rdata, cache, use_wire, use_sel, use_theme), NULL);
+ cache->overlay_paint_edges = Batch_create(
+ PRIM_LINES, mesh_batch_cache_get_edge_pos_with_sel(rdata, cache, use_wire, use_sel), NULL);
mesh_render_data_free(rdata);
}
- return cache->overlay_weight_edges;
+ return cache->overlay_paint_edges;
}
Batch *DRW_mesh_batch_cache_get_weight_overlay_faces(Mesh *me)