diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-06-22 14:20:09 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-06-22 14:31:00 +0300 |
commit | b204bdad47ffbd92b7b6702e2a680da9cbd6489a (patch) | |
tree | 3488037b2e2eb33450a7cfee813538c4d4ce76b4 /source/blender/editors/space_view3d | |
parent | 493c6b622fe3fb80243dfeac29f9399ac6fc4a8c (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/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 7c12b8ea7a5..1999ff7a6cf 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -4250,12 +4250,15 @@ static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3 if (ob == obedit || drawlinked) { DerivedMesh *finalDM, *cageDM; - if (obedit != ob) - finalDM = cageDM = editbmesh_get_derived_base(ob, em); - else + if (obedit != ob) { + finalDM = cageDM = editbmesh_get_derived_base( + ob, em, scene->customdata_mask); + } + else { cageDM = editbmesh_get_derived_cage_and_final( scene, ob, em, scene->customdata_mask, &finalDM); + } const bool use_material = ((me->drawflag & ME_DRAWEIGHT) == 0); @@ -8480,7 +8483,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r DerivedMesh *dm = NULL, *edm = NULL; if (ob->mode & OB_MODE_EDIT) { - edm = editbmesh_get_derived_base(ob, me->edit_btmesh); + edm = editbmesh_get_derived_base(ob, me->edit_btmesh, CD_MASK_BAREMESH); DM_update_materials(edm, ob); } else { |