From 9747e63094f6de2a37900d5ea0075427cae8605e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Jul 2013 22:24:39 +0000 Subject: fix for [#35911] wasn't complete, while weigths would show in editmode, weights that were modified by a weight modifier wouldn't. --- source/blender/blenkernel/intern/DerivedMesh.c | 11 +++++++++-- source/blender/blenkernel/intern/modifier.c | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 6f86b0c3f88..9d9addb6239 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1945,10 +1945,10 @@ int editbmesh_modifier_is_enabled(Scene *scene, ModifierData *md, DerivedMesh *d static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, DerivedMesh **cage_r, DerivedMesh **final_r, CustomDataMask dataMask) -{ + { ModifierData *md, *previewmd = NULL; float (*deformedVerts)[3] = NULL; - CustomDataMask mask, previewmask = 0; + CustomDataMask mask, previewmask = 0, append_mask = 0; DerivedMesh *dm, *orcodm = NULL; int i, numVerts = 0, cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1); CDMaskLink *datamasks, *curr; @@ -2083,6 +2083,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D } /* set the DerivedMesh to only copy needed data */ + mask |= append_mask; mask = curr->mask; /* CD_MASK_ORCO may have been cleared above */ DM_set_only_copy(dm, mask | CD_MASK_ORIGINDEX); @@ -2112,6 +2113,12 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D } } + /* In case of active preview modifier, make sure preview mask remains for following modifiers. */ + if ((md == previewmd) && (do_mod_wmcol)) { + DM_update_weight_mcol(ob, dm, draw_flag, NULL, 0, NULL); + append_mask |= CD_MASK_PREVIEW_MLOOPCOL; + } + if (cage_r && i == cageIndex) { if (dm && deformedVerts) { *cage_r = CDDM_copy(dm); diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index a0fa3317297..41e0acf9f7a 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -421,7 +421,7 @@ ModifierData *modifiers_getLastPreview(struct Scene *scene, ModifierData *md, in { ModifierData *tmp_md = NULL; - if (required_mode != eModifierMode_Realtime) + if ((required_mode & ~eModifierMode_Editmode) != eModifierMode_Realtime) return tmp_md; /* Find the latest modifier in stack generating preview. */ -- cgit v1.2.3