[Bf-blender-cvs] [b5a8d0acaf8] master: Depsgraph: Cleanup, split driver builder function

Sergey Sharybin noreply at git.blender.org
Wed Dec 6 10:32:47 CET 2017


Commit: b5a8d0acaf86f3767b2ec9e6e9ccc7d859dc67b9
Author: Sergey Sharybin
Date:   Mon Dec 4 18:11:43 2017 +0100
Branches: master
https://developer.blender.org/rBb5a8d0acaf86f3767b2ec9e6e9ccc7d859dc67b9

Depsgraph: Cleanup, split driver builder function

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

M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index df69c64f9aa..522ed9956ca 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -961,11 +961,33 @@ void DepsgraphRelationBuilder::build_driver(ID *id, FCurve *fcu)
 	                        DEG_OPCODE_DRIVER,
 	                        fcu->rna_path ? fcu->rna_path : "",
 	                        fcu->array_index);
-	const char *rna_path = fcu->rna_path ? fcu->rna_path : "";
-	const RNAPathKey self_key(id, rna_path);
 	/* Driver -> data components (for interleaved evaluation
 	 * bones/constraints/modifiers).
 	 */
+	build_driver_data(id, fcu);
+	/* Loop over variables to get the target relationships. */
+	build_driver_variables(id, fcu);
+	/* It's quite tricky to detect if the driver actually depends on time or
+	 * not, so for now we'll be quite conservative here about optimization and
+	 * consider all python drivers to be depending on time.
+	 */
+	if ((driver->type == DRIVER_TYPE_PYTHON) &&
+	    python_driver_depends_on_time(driver))
+	{
+		TimeSourceKey time_src_key;
+		add_relation(time_src_key, driver_key, "TimeSrc -> Driver");
+	}
+}
+
+void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
+{
+	OperationKey driver_key(id,
+	                        DEG_NODE_TYPE_PARAMETERS,
+	                        DEG_OPCODE_DRIVER,
+	                        fcu->rna_path ? fcu->rna_path : "",
+	                        fcu->array_index);
+	const char *rna_path = fcu->rna_path ? fcu->rna_path : "";
+	const RNAPathKey self_key(id, rna_path);
 	if (GS(id->name) == ID_AR && strstr(rna_path, "bones[")) {
 		/* Drivers on armature-level bone settings (i.e. bbone stuff),
 		 * which will affect the evaluation of corresponding pose bones.
@@ -1009,18 +1031,6 @@ void DepsgraphRelationBuilder::build_driver(ID *id, FCurve *fcu)
 		RNAPathKey target_key(id, rna_path);
 		add_relation(driver_key, target_key, "Driver -> Target");
 	}
-	/* Loop over variables to get the target relationships. */
-	build_driver_variables(id, fcu);
-	/* It's quite tricky to detect if the driver actually depends on time or
-	 * not, so for now we'll be quite conservative here about optimization and
-	 * consider all python drivers to be depending on time.
-	 */
-	if ((driver->type == DRIVER_TYPE_PYTHON) &&
-	    python_driver_depends_on_time(driver))
-	{
-		TimeSourceKey time_src_key;
-		add_relation(time_src_key, driver_key, "TimeSrc -> Driver");
-	}
 }
 
 void DepsgraphRelationBuilder::build_driver_variables(ID *id, FCurve *fcu)
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 7aadf197c7b..1cf2f9847e2 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -198,6 +198,7 @@ struct DepsgraphRelationBuilder
 	                       RootPChanMap *root_map);
 	void build_animdata(ID *id);
 	void build_driver(ID *id, FCurve *fcurve);
+	void build_driver_data(ID *id, FCurve *fcurve);
 	void build_driver_variables(ID *id, FCurve *fcurve);
 	void build_world(World *world);
 	void build_rigidbody(Scene *scene);



More information about the Bf-blender-cvs mailing list