From 7273dbd47b7ab7ae0016f17f95e71221fb8773d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 26 Aug 2019 18:43:46 +0200 Subject: Fix T69051 Vertex Paint: Selection not show in vertex select mode. --- source/blender/draw/intern/draw_cache_extract_mesh.c | 15 +++++++++++---- source/blender/draw/intern/draw_cache_impl_mesh.c | 3 +++ 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'source/blender/draw') diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c b/source/blender/draw/intern/draw_cache_extract_mesh.c index 7753b349032..6280bd8ccb2 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh.c +++ b/source/blender/draw/intern/draw_cache_extract_mesh.c @@ -1433,7 +1433,7 @@ static void extract_pos_nor_loop_mesh(const MeshRenderData *mr, int l, const MLoop *mloop, int UNUSED(p), - const MPoly *mpoly, + const MPoly *UNUSED(mpoly), void *_data) { MeshExtract_PosNor_Data *data = _data; @@ -1442,9 +1442,9 @@ static void extract_pos_nor_loop_mesh(const MeshRenderData *mr, copy_v3_v3(vert->pos, mvert->co); vert->nor = data->packed_nor[mloop->v]; /* Flag for paint mode overlay. */ - if (mpoly->flag & ME_HIDE) + if (mvert->flag & ME_HIDE) vert->nor.w = -1; - else if (mpoly->flag & ME_FACE_SEL) + else if (mvert->flag & SELECT) vert->nor.w = 1; else vert->nor.w = 0; @@ -1526,7 +1526,7 @@ static void *extract_lnor_init(const MeshRenderData *mr, void *buf) { static GPUVertFormat format = {0}; if (format.attr_len == 0) { - GPU_vertformat_attr_add(&format, "nor", GPU_COMP_I10, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); + GPU_vertformat_attr_add(&format, "nor", GPU_COMP_I10, 4, GPU_FETCH_INT_TO_FLOAT_UNIT); GPU_vertformat_alias_add(&format, "lnor"); } GPUVertBuf *vbo = buf; @@ -1561,6 +1561,13 @@ static void extract_lnor_loop_mesh( else { ((GPUPackedNormal *)data)[l] = GPU_normal_convert_i10_v3(mr->poly_normals[p]); } + /* Flag for paint mode overlay. */ + if (mpoly->flag & ME_HIDE) + ((GPUPackedNormal *)data)[l].w = -1; + else if (mpoly->flag & ME_FACE_SEL) + ((GPUPackedNormal *)data)[l].w = 1; + else + ((GPUPackedNormal *)data)[l].w = 0; } static const MeshExtract extract_lnor = { diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 884d39343c6..456e21db6ed 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -549,6 +549,7 @@ void DRW_mesh_batch_cache_dirty_tag(Mesh *me, int mode) { GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.lines_paint_mask); GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.pos_nor); + GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.lnor); } GPU_BATCH_DISCARD_SAFE(cache->batch.surface); GPU_BATCH_DISCARD_SAFE(cache->batch.wire_loops); @@ -1140,6 +1141,8 @@ void DRW_mesh_batch_cache_create_requested( } if (DRW_batch_requested(cache->batch.wire_loops, GPU_PRIM_LINES)) { DRW_ibo_request(cache->batch.wire_loops, &mbufcache->ibo.lines_paint_mask); + /* Order matters. First ones override latest vbos' attribs. */ + DRW_vbo_request(cache->batch.wire_loops, &mbufcache->vbo.lnor); DRW_vbo_request(cache->batch.wire_loops, &mbufcache->vbo.pos_nor); } if (DRW_batch_requested(cache->batch.wire_edges, GPU_PRIM_LINES)) { -- cgit v1.2.3