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:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-04-05 19:03:36 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-04-05 19:03:36 +0300
commit9b8a92b874d30657753d9714d65ec6f16478c2ed (patch)
tree6de251d6c23884134d3a8a0acc11adffb53ca2ea /source
parentea0e2f9bd3849b73a29ef1805988fdb0484bc9d4 (diff)
Depsgraph: Pull indirect dependencies via pchan constraints
Was missing ID looper for pchan constraint.
Diffstat (limited to 'source')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc91
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h14
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc7
3 files changed, 66 insertions, 46 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 1613e9f6e53..7b2914303ce 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -114,51 +114,6 @@ extern "C" {
namespace DEG {
-namespace {
-
-struct BuilderWalkUserData {
- DepsgraphNodeBuilder *builder;
-};
-
-static void modifier_walk(void *user_data,
- struct Object * /*object*/,
- struct ID **idpoin,
- int /*cb_flag*/)
-{
- BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
- ID *id = *idpoin;
- if (id == NULL) {
- return;
- }
- switch (GS(id->name)) {
- case ID_OB:
- data->builder->build_object(NULL, (Object *)id);
- break;
- case ID_TE:
- data->builder->build_texture((Tex *)id);
- break;
- default:
- /* pass */
- break;
- }
-}
-
-void constraint_walk(bConstraint * /*con*/,
- ID **idpoin,
- bool /*is_reference*/,
- void *user_data)
-{
- BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
- if (*idpoin) {
- ID *id = *idpoin;
- if (GS(id->name) == ID_OB) {
- data->builder->build_object(NULL, (Object *)id);
- }
- }
-}
-
-} /* namespace */
-
/* ************ */
/* Node Builder */
@@ -1148,4 +1103,50 @@ void DepsgraphNodeBuilder::build_movieclip(MovieClip *clip) {
DEG_OPCODE_MOVIECLIP_EVAL);
}
+/* **** ID traversal callbacks functions **** */
+
+void DepsgraphNodeBuilder::modifier_walk(void *user_data,
+ struct Object * /*object*/,
+ struct ID **idpoin,
+ int /*cb_flag*/)
+{
+ BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
+ ID *id = *idpoin;
+ if (id == NULL) {
+ return;
+ }
+ switch (GS(id->name)) {
+ case ID_OB:
+ data->builder->build_object(NULL, (Object *)id);
+ break;
+ case ID_TE:
+ data->builder->build_texture((Tex *)id);
+ break;
+ default:
+ /* pass */
+ break;
+ }
+}
+
+void DepsgraphNodeBuilder::constraint_walk(bConstraint * /*con*/,
+ ID **idpoin,
+ bool /*is_reference*/,
+ void *user_data)
+{
+ BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
+ ID *id = *idpoin;
+ if (id == NULL) {
+ return;
+ }
+ switch (GS(id->name)) {
+ case ID_OB:
+ data->builder->build_object(NULL, (Object *)id);
+ break;
+ default:
+ /* pass */
+ break;
+ }
+}
+
+
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 17d2a4ad558..d64aee11536 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -165,6 +165,20 @@ struct DepsgraphNodeBuilder {
void build_movieclip(MovieClip *clip);
protected:
+ struct BuilderWalkUserData {
+ DepsgraphNodeBuilder *builder;
+ };
+
+ static void modifier_walk(void *user_data,
+ struct Object *object,
+ struct ID **idpoin,
+ int cb_flag);
+
+ static void constraint_walk(bConstraint *constraint,
+ ID **idpoin,
+ bool is_reference,
+ void *user_data);
+
/* State which never changes, same for the whole builder time. */
Main *bmain_;
Depsgraph *graph_;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
index 4e1de16235c..9cfe83e0087 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
@@ -49,6 +49,7 @@ extern "C" {
#include "BKE_action.h"
#include "BKE_armature.h"
+#include "BKE_constraint.h"
} /* extern "C" */
#include "DEG_depsgraph.h"
@@ -68,7 +69,11 @@ void DepsgraphNodeBuilder::build_pose_constraints(Object *object,
bPoseChannel *pchan,
int pchan_index)
{
- /* create node for constraint stack */
+ /* Pull indirect dependencies via constraints. */
+ BuilderWalkUserData data;
+ data.builder = this;
+ BKE_constraints_id_loop(&pchan->constraints, constraint_walk, &data);
+ /* Create node for constraint stack. */
add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
function_bind(BKE_pose_constraints_evaluate,
_1,