[Bf-blender-cvs] [684739c6f9d] blender2.8: Fix: missing cache invalidation when the active vertex group changed

Jacques Lucke noreply at git.blender.org
Fri Sep 21 16:20:58 CEST 2018


Commit: 684739c6f9ddafbbf9e7a2bb4e195f6f28fd3972
Author: Jacques Lucke
Date:   Fri Sep 21 16:19:34 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB684739c6f9ddafbbf9e7a2bb4e195f6f28fd3972

Fix: missing cache invalidation when the active vertex group changed

Reviewers: brecht

Differential Revision: https://developer.blender.org/D3716

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

M	source/blender/draw/intern/draw_cache_impl_mesh.c

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

diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 513a7372ad4..75aaac23f75 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1646,6 +1646,7 @@ typedef struct MeshBatchCache {
 	int vert_len;
 	int mat_len;
 	bool is_editmode;
+	int vertex_group_index;
 
 	/* XXX, only keep for as long as sculpt mode uses shaded drawing. */
 	bool is_sculpt_points_tag;
@@ -1721,6 +1722,7 @@ static void mesh_batch_cache_init(Mesh *me)
 
 	cache->is_maybe_dirty = false;
 	cache->is_dirty = false;
+	cache->vertex_group_index = -1;
 }
 
 static MeshBatchCache *mesh_batch_cache_get(Mesh *me)
@@ -1732,6 +1734,15 @@ static MeshBatchCache *mesh_batch_cache_get(Mesh *me)
 	return me->runtime.batch_cache;
 }
 
+static MeshBatchCache *mesh_batch_cache_get__check_vertex_group(Mesh *me, int defgroup)
+{
+	MeshBatchCache *cache = mesh_batch_cache_get(me);
+	if (cache->vertex_group_index != defgroup) {
+		cache->is_dirty = true;
+	}
+	return mesh_batch_cache_get(me);
+}
+
 static void mesh_batch_cache_discard_shaded_tri(MeshBatchCache *cache)
 {
 	GPU_VERTBUF_DISCARD_SAFE(cache->shaded_triangles_data);
@@ -3857,7 +3868,7 @@ GPUBatch *DRW_mesh_batch_cache_get_loose_edges_with_normals(Mesh *me)
 
 GPUBatch *DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(Mesh *me, int defgroup)
 {
-	MeshBatchCache *cache = mesh_batch_cache_get(me);
+	MeshBatchCache *cache = mesh_batch_cache_get__check_vertex_group(me, defgroup);
 
 	if (cache->triangles_with_weights == NULL) {
 		const bool use_hide = (me->editflag & (ME_EDIT_PAINT_VERT_SEL | ME_EDIT_PAINT_FACE_SEL)) != 0;
@@ -3867,6 +3878,7 @@ GPUBatch *DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(Mesh *me,
 
 		cache->triangles_with_weights = GPU_batch_create_ex(
 		        GPU_PRIM_TRIS, mesh_create_tri_weights(rdata, use_hide, defgroup), NULL, GPU_BATCH_OWNS_VBO);
+		cache->vertex_group_index = defgroup;
 
 		GPUVertBuf *vbo_tris = use_hide ?
 		        mesh_create_tri_pos_and_normals_visible_only(rdata) :



More information about the Bf-blender-cvs mailing list