Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / intern / multires.c
index 3fc052414eb75869e89b53a76aaa495b821771ad..b6e3d048f0b456d29abfa5236cad51178f4c8be7 100644 (file)
@@ -277,14 +277,14 @@ static MDisps *multires_mdisps_initialize_hidden(Mesh *me, int level)
        return mdisps;
 }
 
-DerivedMesh *get_multires_dm(Scene *scene, MultiresModifierData *mmd, Object *ob)
+DerivedMesh *get_multires_dm(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd, Object *ob)
 {
        ModifierData *md = (ModifierData *)mmd;
        const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-       DerivedMesh *tdm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+       DerivedMesh *tdm = mesh_get_derived_deform(eval_ctx, scene, ob, CD_MASK_BAREMESH);
        DerivedMesh *dm;
 
-       dm = mti->applyModifier(md, ob, tdm, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY);
+       dm = mti->applyModifier(md, eval_ctx, ob, tdm, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY);
        if (dm == tdm) {
                dm = CDDM_copy(tdm);
        }
@@ -398,10 +398,10 @@ void multires_force_render_update(Object *ob)
                multires_force_update(ob);
 }
 
-int multiresModifier_reshapeFromDM(Scene *scene, MultiresModifierData *mmd,
+int multiresModifier_reshapeFromDM(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd,
                                    Object *ob, DerivedMesh *srcdm)
 {
-       DerivedMesh *mrdm = get_multires_dm(scene, mmd, ob);
+       DerivedMesh *mrdm = get_multires_dm(eval_ctx, scene, mmd, ob);
 
        if (mrdm && srcdm && mrdm->getNumVerts(mrdm) == srcdm->getNumVerts(srcdm)) {
                multires_mvert_to_ss(mrdm, srcdm->getVertArray(srcdm));
@@ -420,13 +420,13 @@ int multiresModifier_reshapeFromDM(Scene *scene, MultiresModifierData *mmd,
 }
 
 /* Returns 1 on success, 0 if the src's totvert doesn't match */
-int multiresModifier_reshape(Scene *scene, MultiresModifierData *mmd, Object *dst, Object *src)
+int multiresModifier_reshape(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd, Object *dst, Object *src)
 {
-       DerivedMesh *srcdm = mesh_get_derived_final(scene, src, CD_MASK_BAREMESH);
-       return multiresModifier_reshapeFromDM(scene, mmd, dst, srcdm);
+       DerivedMesh *srcdm = mesh_get_derived_final(eval_ctx, scene, src, CD_MASK_BAREMESH);
+       return multiresModifier_reshapeFromDM(eval_ctx, scene, mmd, dst, srcdm);
 }
 
-int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mmd,
+int multiresModifier_reshapeFromDeformMod(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd,
                                           Object *ob, ModifierData *md)
 {
        const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -438,12 +438,12 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm
                return 0;
 
        /* Create DerivedMesh for deformation modifier */
-       dm = get_multires_dm(scene, mmd, ob);
+       dm = get_multires_dm(eval_ctx, scene, mmd, ob);
        numVerts = dm->getNumVerts(dm);
        deformedVerts = MEM_mallocN(sizeof(float[3]) * numVerts, "multiresReshape_deformVerts");
 
        dm->getVertCos(dm, deformedVerts);
-       mti->deformVerts(md, ob, dm, deformedVerts, numVerts, 0);
+       mti->deformVerts(md, eval_ctx, ob, dm, deformedVerts, numVerts, 0);
 
        ndm = CDDM_copy(dm);
        CDDM_apply_vert_coords(ndm, deformedVerts);
@@ -452,7 +452,7 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm
        dm->release(dm);
 
        /* Reshaping */
-       result = multiresModifier_reshapeFromDM(scene, mmd, ob, ndm);
+       result = multiresModifier_reshapeFromDM(eval_ctx, scene, mmd, ob, ndm);
 
        /* Cleanup */
        ndm->release(ndm);
@@ -2271,7 +2271,7 @@ static void multires_apply_smat_cb(
        }
 }
 
-static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
+static void multires_apply_smat(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float smat[3][3])
 {
        DerivedMesh *dm = NULL, *cddm = NULL, *subdm = NULL;
        CCGElem **gridData, **subGridData;
@@ -2296,10 +2296,10 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
        high_mmd.lvl = high_mmd.totlvl;
 
        /* unscaled multires with applied displacement */
-       subdm = get_multires_dm(scene, &high_mmd, ob);
+       subdm = get_multires_dm(eval_ctx, scene, &high_mmd, ob);
 
        /* prepare scaled CDDM to create ccgDN */
-       cddm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+       cddm = mesh_get_derived_deform(eval_ctx, scene, ob, CD_MASK_BAREMESH);
 
        totvert = cddm->getNumVerts(cddm);
        vertCos = MEM_mallocN(sizeof(*vertCos) * totvert, "multiresScale vertCos");
@@ -2360,17 +2360,17 @@ int multires_mdisp_corners(MDisps *s)
        return 0;
 }
 
-void multiresModifier_scale_disp(Scene *scene, Object *ob)
+void multiresModifier_scale_disp(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob)
 {
        float smat[3][3];
 
        /* object's scale matrix */
        BKE_object_scale_to_mat3(ob, smat);
 
-       multires_apply_smat(scene, ob, smat);
+       multires_apply_smat(eval_ctx, scene, ob, smat);
 }
 
-void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob)
+void multiresModifier_prepare_join(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, Object *to_ob)
 {
        float smat[3][3], tmat[3][3], mat[3][3];
        multires_sync_levels(scene, to_ob, ob);
@@ -2381,7 +2381,7 @@ void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob)
        BKE_object_scale_to_mat3(ob, smat);
        mul_m3_m3m3(mat, smat, tmat);
 
-       multires_apply_smat(scene, ob, mat);
+       multires_apply_smat(eval_ctx, scene, ob, mat);
 }
 
 /* update multires data after topology changing */