[Bf-blender-cvs] [c75cde31dbb] blender2.8: Re-use vertex position VBO in weight-paint mode

Campbell Barton noreply at git.blender.org
Thu May 18 06:51:07 CEST 2017


Commit: c75cde31dbb1a427363d9dedef53f3f93a7a26d5
Author: Campbell Barton
Date:   Thu May 18 14:53:43 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBc75cde31dbb1a427363d9dedef53f3f93a7a26d5

Re-use vertex position VBO in weight-paint mode

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

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 6f40825b3de..841092f1c8d 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1649,6 +1649,7 @@ static void mesh_batch_cache_clear(Mesh *me)
 	BATCH_DISCARD_SAFE(cache->all_triangles);
 
 	VERTEXBUFFER_DISCARD_SAFE(cache->pos_in_order);
+	VERTEXBUFFER_DISCARD_SAFE(cache->pos_with_select_bool);
 	ELEMENTLIST_DISCARD_SAFE(cache->edges_in_order);
 	ELEMENTLIST_DISCARD_SAFE(cache->triangles_in_order);
 	ELEMENTLIST_DISCARD_SAFE(cache->overlay_triangles_vpaint);
@@ -1671,7 +1672,7 @@ static void mesh_batch_cache_clear(Mesh *me)
 	BATCH_DISCARD_SAFE(cache->overlay_loose_edges_nor);
 
 	BATCH_DISCARD_SAFE(cache->overlay_weight_faces);
-	BATCH_DISCARD_ALL_SAFE(cache->overlay_weight_verts);
+	BATCH_DISCARD_SAFE(cache->overlay_weight_verts);
 	BATCH_DISCARD_ALL_SAFE(cache->overlay_paint_edges);
 	BATCH_DISCARD_ALL_SAFE(cache->overlay_facedots);
 
@@ -2719,13 +2720,12 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_overlay_data(
 	BLI_assert(rdata->edit_bmesh == NULL);
 
 	if (cache->pos_with_select_bool == NULL) {
-		unsigned int vidx = 0, cidx = 0;
+		unsigned int cidx = 0;
 
 		static VertexFormat format = { 0 };
-		static struct { uint pos, sel; } attr_id;
+		static struct { uint data; } attr_id;
 		if (format.attrib_ct == 0) {
-			attr_id.pos = VertexFormat_add_attrib(&format, "pos", COMP_F32, 3, KEEP_FLOAT);
-			attr_id.sel = VertexFormat_add_attrib(&format, "data", COMP_I8, 1, KEEP_INT);
+			attr_id.data = VertexFormat_add_attrib(&format, "data", COMP_I8, 1, KEEP_INT);
 		}
 
 		const int vert_len = mesh_render_data_verts_len_get(rdata);
@@ -2739,10 +2739,9 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_overlay_data(
 		for (int i = 0; i < vert_len; i++) {
 			const MVert *mv = &rdata->mvert[i];
 			const char data = mv->flag & (SELECT | ME_HIDE);
-			VertexBuffer_set_attrib(vbo, attr_id.sel, cidx++, &data);
-			VertexBuffer_set_attrib(vbo, attr_id.pos, vidx++, mv->co);
+			VertexBuffer_set_attrib(vbo, attr_id.data, cidx++, &data);
 		}
-		vbo_len_used = vidx;
+		vbo_len_used = cidx;
 
 		if (vbo_len_capacity != vbo_len_used) {
 			VertexBuffer_resize_data(vbo, vbo_len_used);
@@ -3232,8 +3231,11 @@ Batch *DRW_mesh_batch_cache_get_weight_overlay_verts(Mesh *me)
 		MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT);
 
 		cache->overlay_weight_verts = Batch_create(
-		        PRIM_POINTS, mesh_batch_cache_get_vert_pos_with_overlay_data(rdata, cache), NULL);
+		        PRIM_POINTS, mesh_batch_cache_get_vert_pos_and_nor_in_order(rdata, cache), NULL);
 
+		Batch_add_VertexBuffer(
+		        cache->overlay_weight_verts,
+		        mesh_batch_cache_get_vert_pos_with_overlay_data(rdata, cache));
 		mesh_render_data_free(rdata);
 	}




More information about the Bf-blender-cvs mailing list