Commit: ccdf65f55e042130a8321a343011f77e407bc064
Author: Sergey Sharybin
Date:   Mon Nov 10 17:54:10 2014 +0100
Branches: depsgraph_refactor
https://developer.blender.org/rBccdf65f55e042130a8321a343011f77e407bc064

Depsgraph: Initial move towards animation support

It kinda works now, but gives issues with threaded update.
Plus it' really need to be cleaned up. Committing mainly to
have a starting point which does something.

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

M       source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
M       source/blender/depsgraph/intern/depsgraph_build_relations.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 79306c8..8534605 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
@@ -346,12 +346,23 @@ void DepsgraphNodeBuilder::build_animdata(ID *id)
        /* animation */
        if (adt->action || adt->nla_tracks.first || adt->drivers.first) {
                // XXX: Hook up specific update callbacks for special 
properties which may need it...
-               
+
+               /* actions */
+               if (adt->action != NULL) {
+                       for (FCurve *fcu = (FCurve *)adt->action->curves.first; 
fcu; fcu = fcu->next) {
+                               TimeSourceDepsNode *time_src = 
m_graph->find_time_source();
+                               add_operation_node(id, DEPSNODE_TYPE_ANIMATION,
+                                                  DEPSOP_TYPE_EXEC, 
bind(BKE_animsys_eval_driver, _1, id, fcu, time_src),
+                                                  
deg_op_name_action_fcurve(adt->action, fcu));
+                       }
+                       /* TODO(sergey): Action groups. */
+               }
+
                /* drivers */
                for (FCurve *fcu = (FCurve *)adt->drivers.first; fcu; fcu = 
fcu->next) {
                        /* create driver */
                        /*OperationDepsNode *driver_node =*/ build_driver(id, 
fcu);
-                       
+
                        /* hook up update callback associated with F-Curve */
                        // ...
                }
@@ -367,8 +378,9 @@ OperationDepsNode *DepsgraphNodeBuilder::build_driver(ID 
*id, FCurve *fcurve)
        ChannelDriver *driver = fcurve->driver;
        
        /* create data node for this driver 
..................................... */
+       TimeSourceDepsNode *time_src = m_graph->find_time_source();
        OperationDepsNode *driver_op = add_operation_node(id, 
DEPSNODE_TYPE_PARAMETERS,
-                                                         DEPSOP_TYPE_EXEC, 
bind(BKE_animsys_eval_driver, _1, id, fcurve),
+                                                         DEPSOP_TYPE_EXEC, 
bind(BKE_animsys_eval_driver, _1, id, fcurve, time_src),
                                                          
deg_op_name_driver(driver));
        
        /* tag "scripted expression" drivers as needing Python (due to GIL 
issues, etc.) */
diff --git a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp 
b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
index 005eb41..1644995 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -209,6 +209,7 @@ void DepsgraphRelationBuilder::build_object(Scene *scene, 
Object *ob)
         * time source.
         */
        if (object_modifiers_use_time(ob)) {
+               /* TODO(sergey): Replace with time relation. */
                m_graph->add_new_time_relation(m_graph->find_id_node(&ob->id));
        }
 
@@ -451,9 +452,12 @@ void DepsgraphRelationBuilder::build_animdata(ID *id)
        /* animation */
        if (adt->action || adt->nla_tracks.first) {
                /* wire up dependency to time source */
-               TimeSourceKey time_src_key;
-               add_relation(time_src_key, adt_key, DEPSREL_TYPE_TIME, 
"[TimeSrc -> Animation] DepsRel");
-               
+               //TimeSourceKey time_src_key;
+               //add_relation(time_src_key, adt_key, DEPSREL_TYPE_TIME, 
"[TimeSrc -> Animation] DepsRel");
+
+               /* TODO(sergey): Replace with time relation. */
+               m_graph->add_new_time_relation(m_graph->find_id_node(id));
+
                // XXX: Hook up specific update callbacks for special 
properties which may need it...
        }
        
@@ -990,10 +994,15 @@ void DepsgraphRelationBuilder::build_obdata_geom(Scene 
*scene, Object *ob)
        if (ob->modifiers.last) {
                ModifierData *md = (ModifierData *)ob->modifiers.last;
                OperationKey mod_key(&ob->id, DEPSNODE_TYPE_GEOMETRY, 
deg_op_name_modifier(md));
-               add_relation(mod_key, obdata_ubereval_key, 
DEPSREL_TYPE_GEOMETRY_EVAL, "Object Geometry UberEval");
+               add_relation(mod_key, obdata_ubereval_key, 
DEPSREL_TYPE_OPERATION, "Object Geometry UberEval");
        }
        else {
-               add_relation(geom_eval_key, obdata_ubereval_key, 
DEPSREL_TYPE_GEOMETRY_EVAL, "Object Geometry UberEval");
+               add_relation(geom_eval_key, obdata_ubereval_key, 
DEPSREL_TYPE_OPERATION, "Object Geometry UberEval");
+       }
+
+       if (ob->adt) {
+               ComponentKey adt_key(&ob->id, DEPSNODE_TYPE_ANIMATION);
+               add_relation(adt_key, obdata_ubereval_key, 
DEPSREL_TYPE_OPERATION, "Object Geometry UberEval");
        }
 }
 
diff --git a/source/blender/depsgraph/intern/depsgraph_type_defines.cpp 
b/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
index 44e5adb..4e10824 100644
--- a/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
@@ -62,7 +62,15 @@ extern "C" {
 
 #include "stubs.h" // XXX: THIS MUST BE REMOVED WHEN THE DEPSGRAPH REFACTOR IS 
DONE
 
-void BKE_animsys_eval_driver(EvaluationContext *eval_ctx, ID *id, FCurve 
*fcurve) {}
+void BKE_animsys_eval_driver(EvaluationContext *eval_ctx, ID *id, FCurve 
*fcurve, TimeSourceDepsNode *time_src)
+{
+       printf("%s on %s\n", __func__, id->name);
+       if (ID_REAL_USERS(id) > 0) {
+               AnimData *adt = BKE_animdata_from_id(id);
+               float ctime = time_src->cfra;
+               BKE_animsys_evaluate_animdata(NULL, id, adt, ctime, 
ADT_RECALC_ANIM);
+       }
+}
 
 void BKE_pose_constraints_evaluate(EvaluationContext *eval_ctx, Object *ob, 
bPoseChannel *pchan) {}
 
@@ -100,6 +108,15 @@ 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_fcurve(const bAction *action, const FCurve *fcu)
+{
+       if (fcu->rna_path != NULL) {
+               return string_format("Action FCurve @ %s:%s[%d]", 
action->id.name + 2, fcu->rna_path, fcu->array_index);
+       }
+       else {
+               return string_format("Action FCurve @ %s:%p", action->id.name, 
fcu);
+       }
+}
 string deg_op_name_driver(const ChannelDriver *driver)
 {
        return string_format("Driver @ %p", driver);
diff --git a/source/blender/depsgraph/intern/depsgraph_types.h 
b/source/blender/depsgraph/intern/depsgraph_types.h
index 55b24a8..b283565 100644
--- a/source/blender/depsgraph/intern/depsgraph_types.h
+++ b/source/blender/depsgraph/intern/depsgraph_types.h
@@ -36,10 +36,12 @@
 #include "depsgraph_util_function.h"
 #include "depsgraph_util_string.h"
 
+struct bAction;
 struct ChannelDriver;
 struct ModifierData;
 struct PointerRNA;
 struct EvaluationContext;
+struct FCurve;
 
 /* Evaluation Operation for atomic operation */
 // XXX: move this to another header that can be exposed?
@@ -97,6 +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_fcurve(const bAction *action, const FCurve *fcu);
 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 8485914..86783cb 100644
--- a/source/blender/depsgraph/intern/stubs.h
+++ b/source/blender/depsgraph/intern/stubs.h
@@ -23,8 +23,9 @@ struct Lattice;
 struct ModifierData;
 struct ParticleSystem;
 struct EvaluationContext;
+struct TimeSourceDepsNode;
 
-void BKE_animsys_eval_driver(struct EvaluationContext *eval_ctx, ID *id, 
FCurve *fcurve);
+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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to