[Bf-blender-cvs] [69e0190] depsgraph_refactor: Use just a single combined blackbox opnode for Action + NLA

Joshua Leung noreply at git.blender.org
Thu Dec 4 04:58:49 CET 2014


Commit: 69e019070198c81d01c5e1a3418ec4fd53b31a16
Author: Joshua Leung
Date:   Thu Dec 4 12:21:35 2014 +1300
Branches: depsgraph_refactor
https://developer.blender.org/rB69e019070198c81d01c5e1a3418ec4fd53b31a16

Use just a single combined blackbox opnode for Action + NLA

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

M	source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
M	source/blender/depsgraph/intern/depsgraph_type_defines.cpp
M	source/blender/depsgraph/intern/depsgraph_types.h
M	source/blender/depsgraph/intern/stubs.h

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

diff --git a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
index 7075129..b050bde 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
@@ -343,22 +343,26 @@ void DepsgraphNodeBuilder::build_pose_constraints(Object *ob, bPoseChannel *pcha
 void DepsgraphNodeBuilder::build_animdata(ID *id)
 {
 	AnimData *adt = BKE_animdata_from_id(id);
-	if (!adt)
+	
+	if (adt == NULL)
 		return;
 	
 	/* animation */
 	if (adt->action || adt->nla_tracks.first || adt->drivers.first) {
+		TimeSourceDepsNode *time_src = m_graph->find_time_source();
+		
 		// XXX: Hook up specific update callbacks for special properties which may need it...
-
-		/* actions */
-		if (adt->action != NULL) {
-			TimeSourceDepsNode *time_src = m_graph->find_time_source();
+		
+		/* actions and NLA - as a single unit for now, as it gets complicated to schedule otherwise */
+		if ((adt->action) || (adt->nla_tracks.first)) {
 			add_operation_node(id, DEPSNODE_TYPE_ANIMATION,
-			                   DEPSOP_TYPE_EXEC, bind(BKE_animsys_eval_action, _1, id, adt->action, time_src),
-			                   deg_op_name_action(adt->action));
-			/* TODO(sergey): Action groups. */
+			                   DEPSOP_TYPE_EXEC, bind(BKE_animsys_eval_animdata, _1, id, time_src),
+			                   deg_op_name_animdata(id));
+			
+			// TODO: for each channel affected, we might also want to add some support for running RNA update callbacks on them
+			// (which will be needed for proper handling of drivers later)
 		}
-
+		
 		/* drivers */
 		for (FCurve *fcu = (FCurve *)adt->drivers.first; fcu; fcu = fcu->next) {
 			/* create driver */
diff --git a/source/blender/depsgraph/intern/depsgraph_type_defines.cpp b/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
index 978c490..0690aeb 100644
--- a/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
@@ -72,17 +72,16 @@ extern "C" {
 
 #include "stubs.h" // XXX: THIS MUST BE REMOVED WHEN THE DEPSGRAPH REFACTOR IS DONE
 
-void BKE_animsys_eval_action(EvaluationContext *UNUSED(eval_ctx),
+void BKE_animsys_eval_animdata(EvaluationContext *UNUSED(eval_ctx),
                              ID *id,
-                             bAction *action,
                              TimeSourceDepsNode *time_src)
 {
 	AnimData *adt = BKE_animdata_from_id(id);
-	PointerRNA id_ptr;
+	Scene *scene = NULL; // XXX: this is only needed for flushing RNA updates, which should get handled as part of the graph instead...
 	float ctime = time_src->cfra;
+	
 	printf("%s on %s\n", __func__, id->name);
-	RNA_id_pointer_create(id, &id_ptr);
-	animsys_evaluate_action(&id_ptr, action, adt->remap, ctime);
+	BKE_animsys_evaluate_animdata(scene, id, adt, ctime, ADT_RECALC_ANIM);
 }
 
 void BKE_animsys_eval_driver(EvaluationContext *UNUSED(eval_ctx),
@@ -260,9 +259,10 @@ const string deg_op_name_pose_eval_flush = "Flush Pose Eval";
 const string deg_op_name_ik_solver = "IK Solver";
 const string deg_op_name_spline_ik_solver = "Spline IK Solver";
 const string deg_op_name_psys_eval = "PSys Eval";
-string deg_op_name_action(const bAction *action)
+string deg_op_name_animdata(const ID *id)
 {
-	return string_format("Action %s", action->id.name);
+	AnimData *adt = BKE_animdata_from_id((ID *)id);
+	return string_format("AnimData %s : %s", id->name, (adt->action) ? adt->action->id.name : "<None>");
 }
 string deg_op_name_driver(const ChannelDriver *driver)
 {
diff --git a/source/blender/depsgraph/intern/depsgraph_types.h b/source/blender/depsgraph/intern/depsgraph_types.h
index c772582..018557a 100644
--- a/source/blender/depsgraph/intern/depsgraph_types.h
+++ b/source/blender/depsgraph/intern/depsgraph_types.h
@@ -99,7 +99,7 @@ extern const string deg_op_name_pose_eval_flush;
 extern const string deg_op_name_ik_solver;
 extern const string deg_op_name_spline_ik_solver;
 extern const string deg_op_name_psys_eval;
-string deg_op_name_action(const bAction *action);
+string deg_op_name_animdata(const ID *id);
 string deg_op_name_driver(const ChannelDriver *driver);
 string deg_op_name_modifier(const ModifierData *md);
 
diff --git a/source/blender/depsgraph/intern/stubs.h b/source/blender/depsgraph/intern/stubs.h
index 92a6f5b..48c2486 100644
--- a/source/blender/depsgraph/intern/stubs.h
+++ b/source/blender/depsgraph/intern/stubs.h
@@ -25,7 +25,7 @@ struct ParticleSystem;
 struct EvaluationContext;
 struct TimeSourceDepsNode;
 
-void BKE_animsys_eval_action(struct EvaluationContext *eval_ctx, ID *id, bAction *action, TimeSourceDepsNode *time_src);
+void BKE_animsys_eval_animdata(struct EvaluationContext *eval_ctx, ID *id, TimeSourceDepsNode *time_src);
 void BKE_animsys_eval_driver(struct EvaluationContext *eval_ctx, ID *id, FCurve *fcurve, TimeSourceDepsNode *time_src);
 
 void BKE_pose_constraints_evaluate(struct EvaluationContext *eval_ctx, Object *ob, bPoseChannel *pchan);




More information about the Bf-blender-cvs mailing list