[Bf-blender-cvs] [d4e7288af9] blender2.8: Edit Mode overlay: Update cache on selection

Clément Foucault noreply at git.blender.org
Mon Mar 6 04:10:21 CET 2017


Commit: d4e7288af9caec2c5f5a2af758d265663fd75063
Author: Clément Foucault
Date:   Mon Mar 6 03:58:08 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBd4e7288af9caec2c5f5a2af758d265663fd75063

Edit Mode overlay: Update cache on selection

===================================================================

M	source/blender/blenkernel/BKE_mesh_render.h
M	source/blender/blenkernel/intern/mesh_render.c
M	source/blender/editors/space_view3d/space_view3d.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_mesh_render.h b/source/blender/blenkernel/BKE_mesh_render.h
index 31c57d4513..0b51dc3d9d 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 ad0353b9ba..67991d08f9 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 b57f8e9d40..7920631b10 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;
 			}




More information about the Bf-blender-cvs mailing list