Merge branch 'master' into blender2.8
[blender.git] / source / blender / modifiers / intern / MOD_particleinstance.c
index 97f01ac8ab10f9f9d9828f475d2928b959b808b4..b93e567fe56c25bb76cf96acb543f1af50938a25 100644 (file)
@@ -52,7 +52,6 @@
 #include "BKE_particle.h"
 #include "BKE_pointcache.h"
 
-#include "depsgraph_private.h"
 #include "DEG_depsgraph_build.h"
 
 static void initData(ModifierData *md)
@@ -131,20 +130,6 @@ static bool isDisabled(ModifierData *md, int useRenderParams)
        return false;
 }
 
-
-static void updateDepgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
-{
-       ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *) md;
-
-       if (pimd->ob) {
-               DagNode *curNode = dag_get_node(ctx->forest, pimd->ob);
-
-               dag_add_relation(ctx->forest, curNode, ctx->obNode,
-                                DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
-                                "Particle Instance Modifier");
-       }
-}
-
 static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
 {
        ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *) md;
@@ -217,9 +202,8 @@ static void store_float_in_vcol(MLoopCol *vcol, float float_value)
        vcol->a = 1.0f;
 }
 
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
-                                  DerivedMesh *derivedData,
-                                  ModifierApplyFlag UNUSED(flag))
+static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
+                                  DerivedMesh *derivedData)
 {
        DerivedMesh *dm = derivedData, *result;
        ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *) md;
@@ -232,7 +216,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
        int totvert, totpoly, totloop , totedge;
        int maxvert, maxpoly, maxloop, maxedge, part_end = 0, part_start;
        int k, p, p_skip;
-       short track = ob->trackflag % 3, trackneg, axis = pimd->axis;
+       short track = ctx->object->trackflag % 3, trackneg, axis = pimd->axis;
        float max_co = 0.0, min_co = 0.0, temp_co[3];
        float *size = NULL;
        float spacemat[4][4];
@@ -240,9 +224,9 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
        const bool use_children = pimd->flag & eParticleInstanceFlag_Children;
        bool between;
 
-       trackneg = ((ob->trackflag > 2) ? 1 : 0);
+       trackneg = ((ctx->object->trackflag > 2) ? 1 : 0);
 
-       if (pimd->ob == ob) {
+       if (pimd->ob == ctx->object) {
                pimd->ob = NULL;
                return derivedData;
        }
@@ -267,6 +251,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
        if (part_end == 0)
                return derivedData;
 
+       sim.depsgraph = ctx->depsgraph;
        sim.scene = md->scene;
        sim.ob = pimd->ob;
        sim.psys = psys;
@@ -555,17 +540,25 @@ ModifierTypeInfo modifierType_ParticleInstance = {
                                eModifierTypeFlag_EnableInEditmode,
 
        /* copyData */          copyData,
+
+       /* deformVerts_DM */    NULL,
+       /* deformMatrices_DM */ NULL,
+       /* deformVertsEM_DM */  NULL,
+       /* deformMatricesEM_DM*/NULL,
+       /* applyModifier_DM */  applyModifier,
+       /* applyModifierEM_DM */NULL,
+
        /* deformVerts */       NULL,
        /* deformMatrices */    NULL,
        /* deformVertsEM */     NULL,
        /* deformMatricesEM */  NULL,
-       /* applyModifier */     applyModifier,
+       /* applyModifier */     NULL,
        /* applyModifierEM */   NULL,
+
        /* initData */          initData,
        /* requiredDataMask */  requiredDataMask,
        /* freeData */          NULL,
        /* isDisabled */        isDisabled,
-       /* updateDepgraph */    updateDepgraph,
        /* updateDepsgraph */   updateDepsgraph,
        /* dependsOnTime */     NULL,
        /* dependsOnNormals */  NULL,