Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-06-25 17:04:56 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-06-25 18:15:07 +0300
commit2c9b32949bc00e73603bcabadb74e5b3176a161a (patch)
treef6bb1ee5b514cce92db337c3116ac967821a4c65 /source
parent26251282e093d4c0d04c4c667b0b32ad66d329b2 (diff)
Cleanup: refactor depsgraph physics API functions.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/collision.c12
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_build.h16
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_physics.h34
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc2
-rw-r--r--source/blender/depsgraph/intern/depsgraph.cc6
-rw-r--r--source/blender/depsgraph/intern/depsgraph.h5
-rw-r--r--source/blender/depsgraph/intern/depsgraph_build.cc76
-rw-r--r--source/blender/depsgraph/intern/depsgraph_intern.h3
-rw-r--r--source/blender/depsgraph/intern/depsgraph_physics.cc176
-rw-r--r--source/blender/modifiers/intern/MOD_cloth.c1
-rw-r--r--source/blender/modifiers/intern/MOD_dynamicpaint.c1
-rw-r--r--source/blender/modifiers/intern/MOD_smoke.c1
-rw-r--r--source/blender/modifiers/intern/MOD_softbody.c1
13 files changed, 168 insertions, 166 deletions
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 546f37dbee6..1debdbb847e 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -545,14 +545,7 @@ void BKE_collision_relations_free(ListBase *relations)
* Self will be excluded. */
Object **BKE_collision_objects_create(Depsgraph *depsgraph, Object *self, Collection *collection, unsigned int *numcollobj, unsigned int modifier_type)
{
- ListBase *relations;
-
- if (modifier_type == eModifierType_Smoke) {
- relations = DEG_get_smoke_collision_relations(depsgraph, collection);
- }
- else {
- relations = DEG_get_collision_relations(depsgraph, collection);
- }
+ ListBase *relations = DEG_get_collision_relations(depsgraph, collection, modifier_type);
if (!relations) {
return NULL;
@@ -592,8 +585,7 @@ void BKE_collision_objects_free(Object **objects)
* Self will be excluded. */
ListBase *BKE_collider_cache_create(Depsgraph *depsgraph, Object *self, Collection *collection)
{
- /* TODO: does this get built? */
- ListBase *relations = DEG_get_collision_relations(depsgraph, collection);
+ ListBase *relations = DEG_get_collision_relations(depsgraph, collection, eModifierType_Collision);
ListBase *cache = NULL;
if (!relations) {
diff --git a/source/blender/depsgraph/DEG_depsgraph_build.h b/source/blender/depsgraph/DEG_depsgraph_build.h
index 834d45a7e61..30fefb7d4e4 100644
--- a/source/blender/depsgraph/DEG_depsgraph_build.h
+++ b/source/blender/depsgraph/DEG_depsgraph_build.h
@@ -153,22 +153,6 @@ void DEG_add_object_cache_relation(struct DepsNodeHandle *handle,
struct Depsgraph *DEG_get_graph_from_handle(struct DepsNodeHandle *handle);
void DEG_add_special_eval_flag(struct Depsgraph *graph, struct ID *id, short flag);
-/* Utility functions for physics modifiers */
-typedef bool (*DEG_CollobjFilterFunction)(struct Object *obj, struct ModifierData *md);
-
-void DEG_add_collision_relations(struct DepsNodeHandle *handle,
- struct Object *object,
- struct Collection *collection,
- unsigned int modifier_type,
- DEG_CollobjFilterFunction fn,
- const char *name);
-void DEG_add_forcefield_relations(struct DepsNodeHandle *handle,
- struct Object *object,
- struct EffectorWeights *eff,
- bool add_absorption,
- int skip_forcefield,
- const char *name);
-
/* ************************************************ */
#ifdef __cplusplus
diff --git a/source/blender/depsgraph/DEG_depsgraph_physics.h b/source/blender/depsgraph/DEG_depsgraph_physics.h
index c90f66838cc..fd35a7fb2c0 100644
--- a/source/blender/depsgraph/DEG_depsgraph_physics.h
+++ b/source/blender/depsgraph/DEG_depsgraph_physics.h
@@ -34,21 +34,49 @@
struct Colllection;
struct Depsgraph;
+struct DepsNodeHandle;
+struct EffectorWeights;
struct ListBase;
+struct Object;
#ifdef __cplusplus
extern "C" {
#endif
+typedef enum ePhysicsRelationType {
+ DEG_PHYSICS_EFFECTOR = 0,
+ DEG_PHYSICS_COLLISION = 1,
+ DEG_PHYSICS_SMOKE_COLLISION = 2,
+ DEG_PHYSICS_DYNAMIC_BRUSH = 3,
+ DEG_PHYSICS_RELATIONS_NUM = 4
+} ePhysicsRelationType;
+
/* Get collision/effector relations from collection or entire scene. These
* created during depsgraph relations building and should only be accessed
* during evaluation. */
struct ListBase *DEG_get_effector_relations(const struct Depsgraph *depsgraph,
struct Collection *collection);
struct ListBase *DEG_get_collision_relations(const struct Depsgraph *depsgraph,
- struct Collection *collection);
-struct ListBase *DEG_get_smoke_collision_relations(const struct Depsgraph *depsgraph,
- struct Collection *collection);
+ struct Collection *collection,
+ unsigned int modifier_type);
+
+
+/* Build collision/effector relations for depsgraph. */
+typedef bool (*DEG_CollobjFilterFunction)(struct Object *obj,
+ struct ModifierData *md);
+
+void DEG_add_collision_relations(struct DepsNodeHandle *handle,
+ struct Object *object,
+ struct Collection *collection,
+ unsigned int modifier_type,
+ DEG_CollobjFilterFunction fn,
+ const char *name);
+void DEG_add_forcefield_relations(struct DepsNodeHandle *handle,
+ struct Object *object,
+ struct EffectorWeights *eff,
+ bool add_absorption,
+ int skip_forcefield,
+ const char *name);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index d87cb59e976..06c17b19a8c 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -302,7 +302,7 @@ void DepsgraphRelationBuilder::add_collision_relations(
Collection *collection,
const char *name)
{
- ListBase *relations = deg_build_collision_relations(graph_, collection);
+ ListBase *relations = deg_build_collision_relations(graph_, collection, eModifierType_Collision);
LISTBASE_FOREACH (CollisionRelation *, relation, relations) {
if (relation->ob != object) {
diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc
index 267cadb7993..ddc6e44ee1b 100644
--- a/source/blender/depsgraph/intern/depsgraph.cc
+++ b/source/blender/depsgraph/intern/depsgraph.cc
@@ -93,16 +93,14 @@ Depsgraph::Depsgraph(Scene *scene,
mode(mode),
ctime(BKE_scene_frame_get(scene)),
scene_cow(NULL),
- is_active(false),
- collision_relations(NULL),
- smoke_collision_relations(NULL),
- effector_relations(NULL)
+ is_active(false)
{
BLI_spin_init(&lock);
id_hash = BLI_ghash_ptr_new("Depsgraph id hash");
entry_tags = BLI_gset_ptr_new("Depsgraph entry_tags");
debug_flags = G.debug;
memset(id_type_updated, 0, sizeof(id_type_updated));
+ memset(physics_relations, 0, sizeof(physics_relations));
}
Depsgraph::~Depsgraph()
diff --git a/source/blender/depsgraph/intern/depsgraph.h b/source/blender/depsgraph/intern/depsgraph.h
index 3517a6f6f34..804fd1b36c2 100644
--- a/source/blender/depsgraph/intern/depsgraph.h
+++ b/source/blender/depsgraph/intern/depsgraph.h
@@ -45,6 +45,7 @@
#include "BLI_threads.h" /* for SpinLock */
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_physics.h"
#include "intern/depsgraph_types.h"
@@ -229,9 +230,7 @@ struct Depsgraph {
/* Cached list of colliders/effectors for collections and the scene
* created along with relations, for fast lookup during evaluation. */
- GHash *collision_relations;
- GHash *smoke_collision_relations;
- GHash *effector_relations;
+ GHash *physics_relations[DEG_PHYSICS_RELATIONS_NUM];
};
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc
index 042cf801e6b..fccb5808711 100644
--- a/source/blender/depsgraph/intern/depsgraph_build.cc
+++ b/source/blender/depsgraph/intern/depsgraph_build.cc
@@ -43,12 +43,8 @@ extern "C" {
#include "DNA_cachefile_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "DNA_object_force_types.h"
#include "BKE_main.h"
-#include "BKE_collision.h"
-#include "BKE_effect.h"
-#include "BKE_modifier.h"
#include "BKE_scene.h"
} /* extern "C" */
@@ -322,75 +318,3 @@ void DEG_relations_tag_update(Main *bmain)
}
}
}
-
-void DEG_add_collision_relations(DepsNodeHandle *handle,
- Object *object,
- Collection *collection,
- unsigned int modifier_type,
- DEG_CollobjFilterFunction fn,
- const char *name)
-{
- Depsgraph *depsgraph = DEG_get_graph_from_handle(handle);
- DEG::Depsgraph *deg_graph = (DEG::Depsgraph *)depsgraph;
- ListBase *relations;
-
- if (modifier_type == eModifierType_Smoke) {
- relations = deg_build_smoke_collision_relations(deg_graph, collection);
- }
- else {
- relations = deg_build_collision_relations(deg_graph, collection);
- }
-
- LISTBASE_FOREACH (CollisionRelation *, relation, relations) {
- Object *ob1 = relation->ob;
- if (ob1 != object) {
- if (!fn || fn(ob1, modifiers_findByType(ob1, (ModifierType)modifier_type))) {
- DEG_add_object_relation(handle, ob1, DEG_OB_COMP_TRANSFORM, name);
- DEG_add_object_relation(handle, ob1, DEG_OB_COMP_GEOMETRY, name);
- }
- }
- }
-}
-
-void DEG_add_forcefield_relations(DepsNodeHandle *handle,
- Object *object,
- EffectorWeights *effector_weights,
- bool add_absorption,
- int skip_forcefield,
- const char *name)
-{
- Depsgraph *depsgraph = DEG_get_graph_from_handle(handle);
- DEG::Depsgraph *deg_graph = (DEG::Depsgraph *)depsgraph;
- ListBase *relations = deg_build_effector_relations(deg_graph, effector_weights->group);
-
- LISTBASE_FOREACH (EffectorRelation *, relation, relations) {
- if (relation->ob != object && relation->pd->forcefield != skip_forcefield) {
- DEG_add_object_relation(handle, relation->ob, DEG_OB_COMP_TRANSFORM, name);
- if (relation->psys) {
- DEG_add_object_relation(handle, relation->ob, DEG_OB_COMP_EVAL_PARTICLES, name);
- /* TODO: remove this when/if EVAL_PARTICLES is sufficient
- * for up to date particles.
- */
- DEG_add_object_relation(handle, relation->ob, DEG_OB_COMP_GEOMETRY, name);
- }
- if (relation->pd->forcefield == PFIELD_SMOKEFLOW && relation->pd->f_source) {
- DEG_add_object_relation(handle,
- relation->pd->f_source,
- DEG_OB_COMP_TRANSFORM,
- "Smoke Force Domain");
- DEG_add_object_relation(handle,
- relation->pd->f_source,
- DEG_OB_COMP_GEOMETRY,
- "Smoke Force Domain");
- }
- if (add_absorption && (relation->pd->flag & PFIELD_VISIBILITY)) {
- DEG_add_collision_relations(handle,
- object,
- NULL,
- eModifierType_Collision,
- NULL,
- "Force Absorption");
- }
- }
- }
-}
diff --git a/source/blender/depsgraph/intern/depsgraph_intern.h b/source/blender/depsgraph/intern/depsgraph_intern.h
index 55ecfacf126..aa67226c47e 100644
--- a/source/blender/depsgraph/intern/depsgraph_intern.h
+++ b/source/blender/depsgraph/intern/depsgraph_intern.h
@@ -143,8 +143,7 @@ string deg_color_end(void);
/* Physics Utilities -------------------------------------------------- */
struct ListBase *deg_build_effector_relations(Depsgraph *graph, struct Collection *collection);
-struct ListBase *deg_build_collision_relations(Depsgraph *graph, struct Collection *collection);
-struct ListBase *deg_build_smoke_collision_relations(Depsgraph *graph, struct Collection *collection);
+struct ListBase *deg_build_collision_relations(Depsgraph *graph, struct Collection *collection, unsigned int modifier_type);
void deg_clear_physics_relations(Depsgraph *graph);
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/depsgraph_physics.cc b/source/blender/depsgraph/intern/depsgraph_physics.cc
index ba42ef96365..2745a6c8722 100644
--- a/source/blender/depsgraph/intern/depsgraph_physics.cc
+++ b/source/blender/depsgraph/intern/depsgraph_physics.cc
@@ -31,55 +31,132 @@
#include "BLI_compiler_compat.h"
#include "BLI_ghash.h"
+#include "BLI_listbase.h"
extern "C" {
#include "BKE_collision.h"
#include "BKE_effect.h"
+#include "BKE_modifier.h"
} /* extern "C" */
#include "DNA_group_types.h"
+#include "DNA_object_force_types.h"
+#include "DEG_depsgraph_build.h"
#include "DEG_depsgraph_physics.h"
#include "depsgraph.h"
#include "depsgraph_intern.h"
-/************************ Public API *************************/
+/*********************** Evaluation Query API *************************/
+
+static ePhysicsRelationType modifier_to_relation_type(unsigned int modifier_type)
+{
+ switch (modifier_type) {
+ case eModifierType_Collision:
+ return DEG_PHYSICS_COLLISION;
+ case eModifierType_Smoke:
+ return DEG_PHYSICS_SMOKE_COLLISION;
+ case eModifierType_DynamicPaint:
+ return DEG_PHYSICS_DYNAMIC_BRUSH;
+ };
+
+ BLI_assert(!"Unknown collision modifier type");
+ return DEG_PHYSICS_RELATIONS_NUM;
+}
ListBase *DEG_get_effector_relations(const Depsgraph *graph,
Collection *collection)
{
const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
- if (deg_graph->effector_relations == NULL) {
+ if (deg_graph->physics_relations[DEG_PHYSICS_EFFECTOR] == NULL) {
return NULL;
}
- return (ListBase *)BLI_ghash_lookup(deg_graph->effector_relations, collection);
+ return (ListBase *)BLI_ghash_lookup(deg_graph->physics_relations[DEG_PHYSICS_EFFECTOR], collection);
}
ListBase *DEG_get_collision_relations(const Depsgraph *graph,
- Collection *collection)
+ Collection *collection,
+ unsigned int modifier_type)
{
const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
- if (deg_graph->collision_relations == NULL) {
+ const ePhysicsRelationType type = modifier_to_relation_type(modifier_type);
+ if (deg_graph->physics_relations[type] == NULL) {
return NULL;
}
- return (ListBase*)BLI_ghash_lookup(deg_graph->collision_relations, collection);
+ return (ListBase *)BLI_ghash_lookup(deg_graph->physics_relations[type], collection);
}
-ListBase *DEG_get_smoke_collision_relations(const Depsgraph *graph,
- Collection *collection)
+/********************** Depsgraph Building API ************************/
+
+void DEG_add_collision_relations(DepsNodeHandle *handle,
+ Object *object,
+ Collection *collection,
+ unsigned int modifier_type,
+ DEG_CollobjFilterFunction fn,
+ const char *name)
{
- const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
- if (deg_graph->smoke_collision_relations == NULL) {
- return NULL;
+ Depsgraph *depsgraph = DEG_get_graph_from_handle(handle);
+ DEG::Depsgraph *deg_graph = (DEG::Depsgraph *)depsgraph;
+ ListBase *relations = deg_build_collision_relations(deg_graph, collection, modifier_type);
+
+ LISTBASE_FOREACH (CollisionRelation *, relation, relations) {
+ Object *ob1 = relation->ob;
+ if (ob1 != object) {
+ if (!fn || fn(ob1, modifiers_findByType(ob1, (ModifierType)modifier_type))) {
+ DEG_add_object_relation(handle, ob1, DEG_OB_COMP_TRANSFORM, name);
+ DEG_add_object_relation(handle, ob1, DEG_OB_COMP_GEOMETRY, name);
+ }
+ }
}
+}
- return (ListBase*)BLI_ghash_lookup(deg_graph->smoke_collision_relations, collection);
+void DEG_add_forcefield_relations(DepsNodeHandle *handle,
+ Object *object,
+ EffectorWeights *effector_weights,
+ bool add_absorption,
+ int skip_forcefield,
+ const char *name)
+{
+ Depsgraph *depsgraph = DEG_get_graph_from_handle(handle);
+ DEG::Depsgraph *deg_graph = (DEG::Depsgraph *)depsgraph;
+ ListBase *relations = deg_build_effector_relations(deg_graph, effector_weights->group);
+
+ LISTBASE_FOREACH (EffectorRelation *, relation, relations) {
+ if (relation->ob != object && relation->pd->forcefield != skip_forcefield) {
+ DEG_add_object_relation(handle, relation->ob, DEG_OB_COMP_TRANSFORM, name);
+ if (relation->psys) {
+ DEG_add_object_relation(handle, relation->ob, DEG_OB_COMP_EVAL_PARTICLES, name);
+ /* TODO: remove this when/if EVAL_PARTICLES is sufficient
+ * for up to date particles.
+ */
+ DEG_add_object_relation(handle, relation->ob, DEG_OB_COMP_GEOMETRY, name);
+ }
+ if (relation->pd->forcefield == PFIELD_SMOKEFLOW && relation->pd->f_source) {
+ DEG_add_object_relation(handle,
+ relation->pd->f_source,
+ DEG_OB_COMP_TRANSFORM,
+ "Smoke Force Domain");
+ DEG_add_object_relation(handle,
+ relation->pd->f_source,
+ DEG_OB_COMP_GEOMETRY,
+ "Smoke Force Domain");
+ }
+ if (add_absorption && (relation->pd->flag & PFIELD_VISIBILITY)) {
+ DEG_add_collision_relations(handle,
+ object,
+ NULL,
+ eModifierType_Collision,
+ NULL,
+ "Force Absorption");
+ }
+ }
+ }
}
-/*********************** Internal API ************************/
+/**************************** Internal API ****************************/
namespace DEG
{
@@ -87,49 +164,38 @@ namespace DEG
ListBase *deg_build_effector_relations(Depsgraph *graph,
Collection *collection)
{
- if (graph->effector_relations == NULL) {
- graph->effector_relations = BLI_ghash_ptr_new("Depsgraph effector relations hash");
+ GHash *hash = graph->physics_relations[DEG_PHYSICS_EFFECTOR];
+ if (hash == NULL) {
+ graph->physics_relations[DEG_PHYSICS_EFFECTOR] = BLI_ghash_ptr_new("Depsgraph physics relations hash");
+ hash = graph->physics_relations[DEG_PHYSICS_EFFECTOR];
}
- ListBase *relations = reinterpret_cast<ListBase*>(BLI_ghash_lookup(graph->effector_relations, collection));
+ ListBase *relations = reinterpret_cast<ListBase*>(BLI_ghash_lookup(hash, collection));
if (relations == NULL) {
::Depsgraph *depsgraph = reinterpret_cast<::Depsgraph*>(graph);
relations = BKE_effector_relations_create(depsgraph, graph->view_layer, collection);
- BLI_ghash_insert(graph->effector_relations, collection, relations);
+ BLI_ghash_insert(hash, collection, relations);
}
return relations;
}
ListBase *deg_build_collision_relations(Depsgraph *graph,
- Collection *collection)
+ Collection *collection,
+ unsigned int modifier_type)
{
- if (graph->collision_relations == NULL) {
- graph->collision_relations = BLI_ghash_ptr_new("Depsgraph collision relations hash");
+ const ePhysicsRelationType type = modifier_to_relation_type(modifier_type);
+ GHash *hash = graph->physics_relations[type];
+ if (hash == NULL) {
+ graph->physics_relations[type] = BLI_ghash_ptr_new("Depsgraph physics relations hash");
+ hash = graph->physics_relations[type];
}
- ListBase *relations = reinterpret_cast<ListBase*>(BLI_ghash_lookup(graph->collision_relations, collection));
+ ListBase *relations = reinterpret_cast<ListBase*>(BLI_ghash_lookup(hash, collection));
if (relations == NULL) {
::Depsgraph *depsgraph = reinterpret_cast<::Depsgraph*>(graph);
- relations = BKE_collision_relations_create(depsgraph, collection, eModifierType_Collision);
- BLI_ghash_insert(graph->collision_relations, collection, relations);
- }
-
- return relations;
-}
-
-ListBase *deg_build_smoke_collision_relations(Depsgraph *graph,
- Collection *collection)
-{
- if (graph->smoke_collision_relations == NULL) {
- graph->smoke_collision_relations = BLI_ghash_ptr_new("Depsgraph smoke collision relations hash");
- }
-
- ListBase *relations = reinterpret_cast<ListBase*>(BLI_ghash_lookup(graph->smoke_collision_relations, collection));
- if (relations == NULL) {
- ::Depsgraph *depsgraph = reinterpret_cast<::Depsgraph*>(graph);
- relations = BKE_collision_relations_create(depsgraph, collection, eModifierType_Smoke);
- BLI_ghash_insert(graph->smoke_collision_relations, collection, relations);
+ relations = BKE_collision_relations_create(depsgraph, collection, modifier_type);
+ BLI_ghash_insert(hash, collection, relations);
}
return relations;
@@ -147,17 +213,25 @@ static void free_collision_relations(void *value)
void deg_clear_physics_relations(Depsgraph *graph)
{
- if (graph->collision_relations) {
- BLI_ghash_free(graph->collision_relations, NULL, free_collision_relations);
- graph->collision_relations = NULL;
- }
- if (graph->smoke_collision_relations) {
- BLI_ghash_free(graph->smoke_collision_relations, NULL, free_collision_relations);
- graph->smoke_collision_relations = NULL;
- }
- if (graph->effector_relations) {
- BLI_ghash_free(graph->effector_relations, NULL, free_effector_relations);
- graph->effector_relations = NULL;
+ for (int i = 0; i < DEG_PHYSICS_RELATIONS_NUM; i++) {
+ if (graph->physics_relations[i]) {
+ ePhysicsRelationType type = (ePhysicsRelationType)i;
+
+ switch (type) {
+ case DEG_PHYSICS_EFFECTOR:
+ BLI_ghash_free(graph->physics_relations[i], NULL, free_effector_relations);
+ break;
+ case DEG_PHYSICS_COLLISION:
+ case DEG_PHYSICS_SMOKE_COLLISION:
+ case DEG_PHYSICS_DYNAMIC_BRUSH:
+ BLI_ghash_free(graph->physics_relations[i], NULL, free_collision_relations);
+ break;
+ case DEG_PHYSICS_RELATIONS_NUM:
+ break;
+ }
+
+ graph->physics_relations[i] = NULL;
+ }
}
}
diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c
index 49f5c45d5c2..979faacc809 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -54,6 +54,7 @@
#include "BKE_modifier.h"
#include "BKE_pointcache.h"
+#include "DEG_depsgraph_physics.h"
#include "DEG_depsgraph_query.h"
#include "MOD_util.h"
diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c
index 1d62abc283a..9131bc0659f 100644
--- a/source/blender/modifiers/intern/MOD_dynamicpaint.c
+++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c
@@ -43,6 +43,7 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_physics.h"
#include "DEG_depsgraph_query.h"
#include "MOD_modifiertypes.h"
diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c
index a7a76b73521..e81c760ed67 100644
--- a/source/blender/modifiers/intern/MOD_smoke.c
+++ b/source/blender/modifiers/intern/MOD_smoke.c
@@ -55,6 +55,7 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_physics.h"
#include "DEG_depsgraph_query.h"
#include "MOD_modifiertypes.h"
diff --git a/source/blender/modifiers/intern/MOD_softbody.c b/source/blender/modifiers/intern/MOD_softbody.c
index 911eb10a020..55df32b0e18 100644
--- a/source/blender/modifiers/intern/MOD_softbody.c
+++ b/source/blender/modifiers/intern/MOD_softbody.c
@@ -46,6 +46,7 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_physics.h"
#include "DEG_depsgraph_query.h"
#include "MOD_modifiertypes.h"