Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2016-06-22 14:20:09 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-06-22 14:31:00 +0300
commitb204bdad47ffbd92b7b6702e2a680da9cbd6489a (patch)
tree3488037b2e2eb33450a7cfee813538c4d4ce76b4 /source/blender/blenkernel/intern/crazyspace.c
parent493c6b622fe3fb80243dfeac29f9399ac6fc4a8c (diff)
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).
Diffstat (limited to 'source/blender/blenkernel/intern/crazyspace.c')
-rw-r--r--source/blender/blenkernel/intern/crazyspace.c9
1 files changed, 8 insertions, 1 deletions
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");