Commit: b4979ab4bf8d1cb83ffd88d047f9990ccd75ac57
Author: Sergey Sharybin
Date:   Fri Jan 2 18:56:52 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rBb4979ab4bf8d1cb83ffd88d047f9990ccd75ac57

Depsgraph: Fill in missing updateDepsgraph() callbacks for modifiers

Doesn't mean it's 100% working, but preliminary checks for most of the modifiers
seems to be fine. More intense testing is needed tho.

===================================================================

M       source/blender/modifiers/intern/MOD_armature.c
M       source/blender/modifiers/intern/MOD_array.c
M       source/blender/modifiers/intern/MOD_boolean.c
M       source/blender/modifiers/intern/MOD_cast.c
M       source/blender/modifiers/intern/MOD_cloth.c
M       source/blender/modifiers/intern/MOD_curve.c
M       source/blender/modifiers/intern/MOD_displace.c
M       source/blender/modifiers/intern/MOD_dynamicpaint.c
M       source/blender/modifiers/intern/MOD_fluidsim.c
M       source/blender/modifiers/intern/MOD_hook.c
M       source/blender/modifiers/intern/MOD_lattice.c
M       source/blender/modifiers/intern/MOD_mask.c
M       source/blender/modifiers/intern/MOD_meshdeform.c
M       source/blender/modifiers/intern/MOD_mirror.c
M       source/blender/modifiers/intern/MOD_particleinstance.c
M       source/blender/modifiers/intern/MOD_screw.c
M       source/blender/modifiers/intern/MOD_shrinkwrap.c
M       source/blender/modifiers/intern/MOD_simpledeform.c
M       source/blender/modifiers/intern/MOD_smoke.c
M       source/blender/modifiers/intern/MOD_uvproject.c
M       source/blender/modifiers/intern/MOD_uvwarp.c
M       source/blender/modifiers/intern/MOD_warp.c
M       source/blender/modifiers/intern/MOD_wave.c
M       source/blender/modifiers/intern/MOD_weightvgedit.c
M       source/blender/modifiers/intern/MOD_weightvgmix.c
M       source/blender/modifiers/intern/MOD_weightvgproximity.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_armature.c 
b/source/blender/modifiers/intern/MOD_armature.c
index 556e955..9e4889f 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -119,8 +119,7 @@ static void updateDepsgraph(ModifierData *md,
                             Object *UNUSED(ob),
                             struct DepsNodeHandle *node)
 {
-       ArmatureModifierData *amd = (ArmatureModifierData *) md;
-
+       ArmatureModifierData *amd = (ArmatureModifierData *)md;
        if (amd->object != NULL) {
                DEG_add_object_relation(node, amd->object, 
DEG_OB_COMP_EVAL_POSE, "Armature Modifier");
        }
diff --git a/source/blender/modifiers/intern/MOD_array.c 
b/source/blender/modifiers/intern/MOD_array.c
index 81cd191..2cadd65 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -133,6 +133,29 @@ static void updateDepgraph(ModifierData *md, DagForest 
*forest,
        }
 }
 
+static void updateDepsgraph(ModifierData *md,
+                            struct Scene *UNUSED(scene),
+                            Object *UNUSED(ob),
+                            struct DepsNodeHandle *node)
+{
+       ArrayModifierData *amd = (ArrayModifierData *)md;
+       if (amd->start_cap != NULL) {
+               DEG_add_object_relation(node, amd->start_cap, 
DEG_OB_COMP_TRANSFORM, "Hook Modifier Start Cap");
+       }
+       if (amd->end_cap != NULL) {
+               DEG_add_object_relation(node, amd->end_cap, 
DEG_OB_COMP_TRANSFORM, "Hook Modifier End Cap");
+       }
+       if (amd->curve_ob) {
+               /* TODO(sergey): Need to do the same eval_flags trick for path
+                * as happening in legacy depsgraph callback.
+                */
+               DEG_add_object_relation(node, amd->end_cap, 
DEG_OB_COMP_GEOMETRY, "Hook Modifier Curve");
+       }
+       if (amd->offset_ob != NULL) {
+               DEG_add_object_relation(node, amd->offset_ob, 
DEG_OB_COMP_TRANSFORM, "Hook Modifier Offset");
+       }
+}
+
 static float vertarray_size(const MVert *mvert, int numVerts, int axis)
 {
        int i;
@@ -769,7 +792,7 @@ ModifierTypeInfo modifierType_Array = {
        /* freeData */          NULL,
        /* isDisabled */        NULL,
        /* updateDepgraph */    updateDepgraph,
-       /* updateDepsgraph */   NULL,
+       /* updateDepsgraph */   updateDepsgraph,
        /* dependsOnTime */     NULL,
        /* dependsOnNormals */  NULL,
        /* foreachObjectLink */ foreachObjectLink,
diff --git a/source/blender/modifiers/intern/MOD_boolean.c 
b/source/blender/modifiers/intern/MOD_boolean.c
index f4d3bc7..95cca89 100644
--- a/source/blender/modifiers/intern/MOD_boolean.c
+++ b/source/blender/modifiers/intern/MOD_boolean.c
@@ -93,8 +93,7 @@ static void updateDepsgraph(ModifierData *md,
                             Object *ob,
                             struct DepsNodeHandle *node)
 {
-       BooleanModifierData *bmd = (BooleanModifierData *) md;
-
+       BooleanModifierData *bmd = (BooleanModifierData *)md;
        if (bmd->object != NULL) {
                DEG_add_object_relation(node, bmd->object, 
DEG_OB_COMP_TRANSFORM, "Boolean Modifier");
                DEG_add_object_relation(node, bmd->object, 
DEG_OB_COMP_GEOMETRY, "Boolean Modifier");
diff --git a/source/blender/modifiers/intern/MOD_cast.c 
b/source/blender/modifiers/intern/MOD_cast.c
index 38f732d..745d92a 100644
--- a/source/blender/modifiers/intern/MOD_cast.c
+++ b/source/blender/modifiers/intern/MOD_cast.c
@@ -120,6 +120,17 @@ static void updateDepgraph(ModifierData *md, DagForest 
*forest,
        }
 }
 
+static void updateDepsgraph(ModifierData *md,
+                            struct Scene *UNUSED(scene),
+                            Object *UNUSED(ob),
+                            struct DepsNodeHandle *node)
+{
+       CastModifierData *cmd = (CastModifierData *)md;
+       if (cmd->object != NULL) {
+               DEG_add_object_relation(node, cmd->object, 
DEG_OB_COMP_TRANSFORM, "Cast Modifier");
+       }
+}
+
 static void sphere_do(
         CastModifierData *cmd, Object *ob, DerivedMesh *dm,
         float (*vertexCos)[3], int numVerts)
@@ -499,7 +510,7 @@ ModifierTypeInfo modifierType_Cast = {
        /* freeData */          NULL,
        /* isDisabled */        isDisabled,
        /* updateDepgraph */    updateDepgraph,
-       /* updateDepsgraph */   NULL,
+       /* updateDepsgraph */   updateDepsgraph,
        /* dependsOnTime */     NULL,
        /* dependsOnNormals */  NULL,
        /* foreachObjectLink */ foreachObjectLink,
diff --git a/source/blender/modifiers/intern/MOD_cloth.c 
b/source/blender/modifiers/intern/MOD_cloth.c
index 5688805..7287dfd 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -137,6 +137,26 @@ static void updateDepgraph(ModifierData *md, DagForest 
*forest, Scene *scene, Ob
        }
 }
 
+static void updateDepsgraph(ModifierData *md,
+                            struct Scene *scene,
+                            Object *ob,
+                            struct DepsNodeHandle *node)
+{
+       ClothModifierData *clmd = (ClothModifierData *)md;
+       if (clmd != NULL) {
+               Base *base;
+               for (base = scene->base.first; base; base = base->next) {
+                       Object *ob1 = base->object;
+                       if (ob1 != ob) {
+                               CollisionModifierData *coll_clmd = 
(CollisionModifierData *)modifiers_findByType(ob1, eModifierType_Collision);
+                               if (coll_clmd) {
+                                       DEG_add_object_relation(node, ob1, 
DEG_OB_COMP_TRANSFORM, "Cloth Modifier");
+                               }
+                       }
+               }
+       }
+}
+
 static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
 {
        CustomDataMask dataMask = 0;
@@ -240,7 +260,7 @@ ModifierTypeInfo modifierType_Cloth = {
        /* freeData */          freeData,
        /* isDisabled */        NULL,
        /* updateDepgraph */    updateDepgraph,
-       /* updateDepsgraph */   NULL,
+       /* updateDepsgraph */   updateDepsgraph,
        /* dependsOnTime */     dependsOnTime,
        /* dependsOnNormals */  NULL,
        /* foreachObjectLink */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_curve.c 
b/source/blender/modifiers/intern/MOD_curve.c
index 500d2d5..372c495 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -45,6 +45,7 @@
 #include "BKE_modifier.h"
 
 #include "depsgraph_private.h"
+#include "DEG_depsgraph_build.h"
 
 
 static void initData(ModifierData *md)
@@ -107,6 +108,23 @@ static void updateDepgraph(ModifierData *md, DagForest 
*forest,
        }
 }
 
+static void updateDepsgraph(ModifierData *md,
+                            struct Scene *UNUSED(scene),
+                            Object *UNUSED(ob),
+                            struct DepsNodeHandle *node)
+{
+       CurveModifierData *cmd = (CurveModifierData *)md;
+       if (cmd->object != NULL) {
+               /* TODO(sergey): Need to do the same eval_flags trick for path
+                * as happening in legacy depsgraph callback.
+                */
+               /* TODO(sergey): Currently path is evaluated as a part of 
modifier stack,
+                * might be changed in the future.
+                */
+               DEG_add_object_relation(node, cmd->object, 
DEG_OB_COMP_GEOMETRY, "Curve Modifier");
+       }
+}
+
 static void deformVerts(ModifierData *md, Object *ob,
                         DerivedMesh *derivedData,
                         float (*vertexCos)[3],
@@ -155,7 +173,7 @@ ModifierTypeInfo modifierType_Curve = {
        /* freeData */          NULL,
        /* isDisabled */        isDisabled,
        /* updateDepgraph */    updateDepgraph,
-       /* updateDepsgraph */   NULL,
+       /* updateDepsgraph */   updateDepsgraph,
        /* dependsOnTime */     NULL,
        /* dependsOnNormals */  NULL,
        /* foreachObjectLink */ foreachObjectLink,
diff --git a/source/blender/modifiers/intern/MOD_displace.c 
b/source/blender/modifiers/intern/MOD_displace.c
index 079ab55..6bd3d45 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -170,6 +170,20 @@ static void updateDepgraph(ModifierData *md, DagForest 
*forest,
        
 }
 
+static void updateDepsgraph(ModifierData *md,
+                            struct Scene *UNUSED(scene),
+                            Object *ob,
+                            struct DepsNodeHandle *node)
+{
+       DisplaceModifierData *dmd = (DisplaceModifierData *)md;
+       if (dmd->map_object != NULL && dmd->texmapping == MOD_DISP_MAP_OBJECT) {
+               DEG_add_object_relation(node, dmd->map_object, 
DEG_OB_COMP_TRANSFORM, "Displace Modifier");
+       }
+       if (dmd->texmapping == MOD_DISP_MAP_GLOBAL) {
+               DEG_add_object_relation(node, ob, DEG_OB_COMP_TRANSFORM, 
"Displace Modifier");
+       }
+}
+
 /* dm must be a CDDerivedMesh */
 static void displaceModifier_do(
         DisplaceModifierData *dmd, Object *ob,
@@ -301,7 +315,7 @@ ModifierTypeInfo modifierType_Displace = {
        /* freeData */          freeData,
        /* isDisabled */        isDisabled,
        /* updateDepgraph */    updateDepgraph,
-       /* updateDepsgraph */   NULL,
+       /* updateDepsgraph */   updateDepsgraph,
        /* dependsOnTime */     dependsOnTime,
        /* dependsOnNormals */  dependsOnNormals,
        /* foreachObjectLink */ foreachObjectLink,
diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c 
b/source/blender/modifiers/intern/MOD_dynamicpaint.c
index f827918..5725aed 100644
--- a/source/blender/modifiers/intern/MOD_dynamicpaint.c
+++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c
@@ -38,6 +38,7 @@
 #include "BKE_modifier.h"
 
 #include "depsgraph_private.h"
+#include "DEG_depsgraph_build.h"
 
 
 static void initData(ModifierData *md) 
@@ -134,6 +135,25 @@ static void updateDepgraph(ModifierData *md, DagForest 
*forest,
        }
 }
 
+static void updateDepsgraph(ModifierData *md,
+                            struct Scene *scene,
+                            Object *ob,
+                            struct DepsNodeHandle *node)
+{
+       DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
+       /* Add relation from canvases to all brush objects. */
+       if (pmd->canvas != NULL) {
+               Base *base = scene->base.first;
+               for (; base; base = base->next) {
+                       DynamicPaintModifierData *pmd2 =
+                               (DynamicPaintModifierData 
*)modifiers_findByType(base->object, eModifierType_DynamicPaint);
+                       if (pmd2 && pmd2->brush && ob != base->object) {
+                               DEG_add_object_relation(node, base->object, 
DEG_OB_COMP_TRANSFORM, "Dynamic Paint Brush");
+                       }
+               }
+       }
+}
+
 static bool dependsOnTime(ModifierData *UNUSED(md))
 {
        return true;
@@ -186,7 +206,7 @@ ModifierTypeInfo modifierType_DynamicPaint = {
        /* freeData */          freeData,
        /* isDisabled */        NULL,
        /* updateDepgraph 

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to