From 531e5ad49a037637c323ef79d872f3d182f589a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Fri, 14 Dec 2018 02:52:50 +0100 Subject: Displist: Reuse tesselated pos and nor for wireframes This lower the memory usage and also fix a bug with metaballs normals/tris winding being reversed. --- source/blender/draw/intern/draw_cache_impl_metaball.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'source/blender/draw/intern/draw_cache_impl_metaball.c') diff --git a/source/blender/draw/intern/draw_cache_impl_metaball.c b/source/blender/draw/intern/draw_cache_impl_metaball.c index f406ad2380a..b77268fb0a7 100644 --- a/source/blender/draw/intern/draw_cache_impl_metaball.c +++ b/source/blender/draw/intern/draw_cache_impl_metaball.c @@ -207,9 +207,15 @@ GPUBatch *DRW_metaball_batch_cache_get_wireframes_face(Object *ob) if (cache->face_wire.batch == NULL) { ListBase *lb = &ob->runtime.curve_cache->disp; - GPUVertBuf *vbo = MEM_callocN(sizeof(GPUVertBuf), __func__); - DRW_displist_vertbuf_create_wireframe_data_tess(lb, vbo); - cache->face_wire.batch = GPU_batch_create_ex(GPU_PRIM_TRIS, vbo, NULL, GPU_BATCH_OWNS_VBO); + + GPUVertBuf *vbo_pos_nor = MEM_callocN(sizeof(GPUVertBuf), __func__); + GPUVertBuf *vbo_wireframe_data = MEM_callocN(sizeof(GPUVertBuf), __func__); + + DRW_displist_vertbuf_create_pos_and_nor_and_uv_tess(lb, vbo_pos_nor, NULL); + DRW_displist_vertbuf_create_wireframe_data_tess(lb, vbo_wireframe_data); + + cache->face_wire.batch = GPU_batch_create_ex(GPU_PRIM_TRIS, vbo_pos_nor, NULL, GPU_BATCH_OWNS_VBO); + GPU_batch_vertbuf_add_ex(cache->face_wire.batch, vbo_wireframe_data, true); } return cache->face_wire.batch; -- cgit v1.2.3