From d4e7288af9caec2c5f5a2af758d265663fd75063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 6 Mar 2017 03:58:08 +0100 Subject: [PATCH] Edit Mode overlay: Update cache on selection --- source/blender/blenkernel/BKE_mesh_render.h | 1 + .../blender/blenkernel/intern/mesh_render.c | 24 +++++++++++++++++++ .../editors/space_view3d/space_view3d.c | 12 +++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_mesh_render.h b/source/blender/blenkernel/BKE_mesh_render.h index 31c57d4513d..0b51dc3d9d7 100644 --- a/source/blender/blenkernel/BKE_mesh_render.h +++ b/source/blender/blenkernel/BKE_mesh_render.h @@ -33,6 +33,7 @@ struct Batch; struct Mesh; void BKE_mesh_batch_cache_dirty(struct Mesh *me); +void BKE_mesh_batch_selection_dirty(struct Mesh *me); void BKE_mesh_batch_cache_clear(struct Mesh *me); void BKE_mesh_batch_cache_free(struct Mesh *me); struct Batch *BKE_mesh_batch_cache_get_all_edges(struct Mesh *me); diff --git a/source/blender/blenkernel/intern/mesh_render.c b/source/blender/blenkernel/intern/mesh_render.c index ad0353b9bac..67991d08f9d 100644 --- a/source/blender/blenkernel/intern/mesh_render.c +++ b/source/blender/blenkernel/intern/mesh_render.c @@ -811,6 +811,30 @@ void BKE_mesh_batch_cache_dirty(struct Mesh *me) } } +void BKE_mesh_batch_selection_dirty(struct Mesh *me) +{ + MeshBatchCache *cache = me->batch_cache; + if (cache) { + /* TODO Separate Flag vbo */ + if (cache->overlay_triangles) { + Batch_discard_all(cache->overlay_triangles); + cache->overlay_triangles = NULL; + } + if (cache->overlay_loose_verts) { + Batch_discard_all(cache->overlay_loose_verts); + cache->overlay_loose_verts = NULL; + } + if (cache->overlay_loose_edges) { + Batch_discard_all(cache->overlay_loose_edges); + cache->overlay_loose_edges = NULL; + } + if (cache->overlay_facedots) { + Batch_discard_all(cache->overlay_facedots); + cache->overlay_facedots = NULL; + } + } +} + void BKE_mesh_batch_cache_clear(Mesh *me) { MeshBatchCache *cache = me->batch_cache; diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index b57f8e9d40f..7920631b100 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -47,6 +47,7 @@ #include "BKE_icons.h" #include "BKE_library.h" #include "BKE_main.h" +#include "BKE_mesh_render.h" #include "BKE_object.h" #include "BKE_scene.h" #include "BKE_screen.h" @@ -893,9 +894,18 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w break; case NC_GEOM: switch (wmn->data) { + case ND_SELECT: + { + if (scene->obedit) { + Object *ob = scene->obedit; + if (ob->type == OB_MESH) { + struct Mesh *me = ob->data; + BKE_mesh_batch_selection_dirty(me); + } + } + } case ND_DATA: case ND_VERTEX_GROUP: - case ND_SELECT: ED_region_tag_redraw(ar); break; }