[Bf-blender-cvs] [b4979ab] depsgraph_refactor: Depsgraph: Fill in missing updateDepsgraph() callbacks for modifiers

Sergey Sharybin noreply at git.blender.org
Fri Jan 2 14:57:47 CET 2015


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. @@




More information about the Bf-blender-cvs mailing list