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
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-11-13 19:21:41 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-11-14 16:08:39 +0300
commitfdd1fea8514952efc3f2f78d61381ef0fba3d211 (patch)
tree4f9565cf1ecd940e2bc24204a064e9bc0d0df2e4 /source/blender/depsgraph/intern/depsgraph_physics.cc
parent1386a4a0f2b03f44f123381448240652788cca29 (diff)
Depsgraph: Cleanup, code style
Should be no functional changes.
Diffstat (limited to 'source/blender/depsgraph/intern/depsgraph_physics.cc')
-rw-r--r--source/blender/depsgraph/intern/depsgraph_physics.cc148
1 files changed, 88 insertions, 60 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_physics.cc b/source/blender/depsgraph/intern/depsgraph_physics.cc
index 1868069f0ac..1299542e823 100644
--- a/source/blender/depsgraph/intern/depsgraph_physics.cc
+++ b/source/blender/depsgraph/intern/depsgraph_physics.cc
@@ -50,9 +50,10 @@ extern "C" {
#include "depsgraph.h"
#include "depsgraph_intern.h"
-/*********************** Evaluation Query API *************************/
+/*************************** Evaluation Query API *****************************/
-static ePhysicsRelationType modifier_to_relation_type(unsigned int modifier_type)
+static ePhysicsRelationType modifier_to_relation_type(
+ unsigned int modifier_type)
{
switch (modifier_type) {
case eModifierType_Collision:
@@ -70,27 +71,32 @@ static ePhysicsRelationType modifier_to_relation_type(unsigned int modifier_type
ListBase *DEG_get_effector_relations(const Depsgraph *graph,
Collection *collection)
{
- const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
+ const DEG::Depsgraph *deg_graph =
+ reinterpret_cast<const DEG::Depsgraph *>(graph);
if (deg_graph->physics_relations[DEG_PHYSICS_EFFECTOR] == NULL) {
return NULL;
}
ID *collection_orig = DEG_get_original_id(&collection->id);
- return (ListBase *)BLI_ghash_lookup(deg_graph->physics_relations[DEG_PHYSICS_EFFECTOR], collection_orig);
+ return (ListBase *)BLI_ghash_lookup(
+ deg_graph->physics_relations[DEG_PHYSICS_EFFECTOR],
+ collection_orig);
}
ListBase *DEG_get_collision_relations(const Depsgraph *graph,
Collection *collection,
unsigned int modifier_type)
{
- const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
+ const DEG::Depsgraph *deg_graph =
+ reinterpret_cast<const DEG::Depsgraph *>(graph);
const ePhysicsRelationType type = modifier_to_relation_type(modifier_type);
if (deg_graph->physics_relations[type] == NULL) {
return NULL;
}
-
ID *collection_orig = DEG_get_original_id(&collection->id);
- return (ListBase *)BLI_ghash_lookup(deg_graph->physics_relations[type], collection_orig);
+ return (ListBase *)BLI_ghash_lookup(
+ deg_graph->physics_relations[type],
+ collection_orig);
}
/********************** Depsgraph Building API ************************/
@@ -99,20 +105,25 @@ void DEG_add_collision_relations(DepsNodeHandle *handle,
Object *object,
Collection *collection,
unsigned int modifier_type,
- DEG_CollobjFilterFunction fn,
+ DEG_CollobjFilterFunction filter_function,
const char *name)
{
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 *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);
- }
+ if (ob1 == object) {
+ continue;
+ }
+ if (filter_function == NULL ||
+ filter_function(
+ 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);
}
}
}
@@ -126,41 +137,49 @@ void DEG_add_forcefield_relations(DepsNodeHandle *handle,
{
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 *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");
- }
+ if (relation->ob == object) {
+ continue;
+ }
+ if (relation->pd->forcefield == skip_forcefield) {
+ continue;
+ }
+ 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 != NULL)
+ {
+ 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
{
@@ -170,17 +189,18 @@ ListBase *deg_build_effector_relations(Depsgraph *graph,
{
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");
+ 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(hash, 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);
+ relations = BKE_effector_relations_create(
+ depsgraph, graph->view_layer, collection);
BLI_ghash_insert(hash, &collection->id, relations);
}
-
return relations;
}
@@ -191,30 +211,35 @@ ListBase *deg_build_collision_relations(Depsgraph *graph,
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");
+ 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(hash, 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, modifier_type);
+ relations = BKE_collision_relations_create(
+ depsgraph, collection, modifier_type);
BLI_ghash_insert(hash, &collection->id, relations);
}
-
return relations;
}
-static void free_effector_relations(void *value)
+namespace {
+
+void free_effector_relations(void *value)
{
BKE_effector_relations_free(reinterpret_cast<ListBase*>(value));
}
-static void free_collision_relations(void *value)
+void free_collision_relations(void *value)
{
BKE_collision_relations_free(reinterpret_cast<ListBase*>(value));
}
+} // namespace
+
void deg_clear_physics_relations(Depsgraph *graph)
{
for (int i = 0; i < DEG_PHYSICS_RELATIONS_NUM; i++) {
@@ -223,17 +248,20 @@ void deg_clear_physics_relations(Depsgraph *graph)
switch (type) {
case DEG_PHYSICS_EFFECTOR:
- BLI_ghash_free(graph->physics_relations[i], NULL, free_effector_relations);
+ 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);
+ BLI_ghash_free(graph->physics_relations[i],
+ NULL,
+ free_collision_relations);
break;
case DEG_PHYSICS_RELATIONS_NUM:
break;
}
-
graph->physics_relations[i] = NULL;
}
}