From b204bdad47ffbd92b7b6702e2a680da9cbd6489a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 22 Jun 2016 21:20:09 +1000 Subject: EditMesh: Avoid creating deform-vert layer every redraw Getting a new edit-derived-bmesh was always creating a deform-vert array, even when it wasn't needed. Since this was called on redraw, in many cases it was doing it unnecessarily. Now pass in a custom-data mask and only fill in deform-verts when needed. Gives noticeable drawing speedup (~10-30% here). --- source/blender/blenkernel/intern/crazyspace.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern/crazyspace.c') diff --git a/source/blender/blenkernel/intern/crazyspace.c b/source/blender/blenkernel/intern/crazyspace.c index c8de0786697..56df8e51eba 100644 --- a/source/blender/blenkernel/intern/crazyspace.c +++ b/source/blender/blenkernel/intern/crazyspace.c @@ -39,6 +39,7 @@ #include "DNA_meshdata_types.h" #include "BLI_utildefines.h" +#include "BLI_linklist.h" #include "BLI_math.h" #include "BKE_crazyspace.h" @@ -275,7 +276,13 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh(Scene *scene, Object *ob, if (mti->type == eModifierTypeType_OnlyDeform && mti->deformMatricesEM) { if (!defmats) { - dm = getEditDerivedBMesh(em, ob, NULL); + const int required_mode = eModifierMode_Realtime | eModifierMode_Editmode; + CustomDataMask data_mask = CD_MASK_BAREMESH; + CDMaskLink *datamasks = modifiers_calcDataMasks(scene, ob, md, data_mask, required_mode, NULL, 0); + data_mask = datamasks->mask; + BLI_linklist_free((LinkNode *)datamasks, NULL); + + dm = getEditDerivedBMesh(em, ob, data_mask, NULL); deformedVerts = editbmesh_get_vertex_cos(em, &numVerts); defmats = MEM_mallocN(sizeof(*defmats) * numVerts, "defmats"); -- cgit v1.2.3