Merging r57816 through r57896 from trunk into soc-2013-depsgraph_mt
[blender.git] / source / blender / blenkernel / intern / DerivedMesh.c
index d1bf42183c10edb62a83df02cf77d7fa4ce969d0..b2ba1755303b4d216e2b867934fa5f4b86aba2cd 100644 (file)
@@ -1947,9 +1947,9 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
                                      DerivedMesh **final_r,
                                      CustomDataMask dataMask)
 {
-       ModifierData *md;
+       ModifierData *md, *previewmd = NULL;
        float (*deformedVerts)[3] = NULL;
-       CustomDataMask mask;
+       CustomDataMask mask, previewmask = 0;
        DerivedMesh *dm, *orcodm = NULL;
        int i, numVerts = 0, cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
        CDMaskLink *datamasks, *curr;
@@ -1963,6 +1963,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
        const int do_final_wmcol = FALSE;
        int do_init_wmcol = ((((Mesh *)ob->data)->drawflag & ME_DRAWEIGHT) && !do_final_wmcol);
        int do_init_statvis = ((((Mesh *)ob->data)->drawflag & ME_DRAW_STATVIS) && !do_init_wmcol);
+       const int do_mod_wmcol = do_init_wmcol;
 
        modifiers_clearErrors(ob);
 
@@ -1973,7 +1974,18 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
        dm = NULL;
        md = modifiers_getVirtualModifierList(ob);
 
-       datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode, NULL, 0);
+       /* copied from mesh_calc_modifiers */
+       if (do_mod_wmcol) {
+               previewmd = modifiers_getLastPreview(scene, md, required_mode);
+               /* even if the modifier doesn't need the data, to make a preview it may */
+               if (previewmd) {
+                       if (do_mod_wmcol) {
+                               previewmask = CD_MASK_MDEFORMVERT;
+                       }
+               }
+       }
+
+       datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode, previewmd, previewmask);
 
        curr = datamasks;
        for (i = 0; md; i++, md = md->next, curr = curr->next) {