Merge from 2.5 r20991 through r21037
[blender.git] / source / blender / blenkernel / BKE_depsgraph.h
index 007b38b984caddebd479fc768cdf2508ed16a06c..70b6c1d13f4862e834e9795b1b901a2fb368a1c9 100644 (file)
@@ -1,15 +1,12 @@
 /**
  * $Id$
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -25,7 +22,7 @@
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  */
 
 #ifndef DEPSGRAPH_API
@@ -39,32 +36,28 @@ struct Scene;
 struct DagNodeQueue;
 struct DagForest;
 struct DagNode;
+struct GHash;
+
+/* **** DAG relation types *** */
+
+       /* scene link to object */
+#define DAG_RL_SCENE           1
+       /* object link to data */
+#define DAG_RL_DATA                    2
+
+       /* object changes object (parent, track, constraints) */
+#define DAG_RL_OB_OB           4
+       /* object changes obdata (hooks, constraints) */
+#define DAG_RL_OB_DATA         8
+       /* data changes object (vertex parent) */
+#define DAG_RL_DATA_OB         16
+       /* data changes data (deformers) */
+#define DAG_RL_DATA_DATA       32
+
+#define DAG_NO_RELATION                64
+#define DAG_RL_ALL                     63
+#define DAG_RL_ALL_BUT_DATA 61
 
-typedef enum { 
-       DAG_RL_SCENE                            = 1,
-       DAG_RL_DATA                                     = 2,
-       DAG_RL_PARENT                           = 4,
-       DAG_RL_TRACK                            = 8,
-       DAG_RL_PATH                                     = 16,
-       DAG_RL_CONSTRAINT                       = 32,
-       DAG_RL_HOOK                                     = 64,
-       DAG_RL_DATA_CONSTRAINT          = 128,
-       DAG_NO_RELATION                         = 256
-} dag_rel_type;
-
-
-typedef enum {
-       DAG_RL_SCENE_MASK                       = 1,
-       DAG_RL_DATA_MASK                        = 2,
-       DAG_RL_PARENT_MASK                      = 4,
-       DAG_RL_TRACK_MASK                       = 8,
-       DAG_RL_PATH_MASK                        = 16,
-       DAG_RL_CONSTRAINT_MASK          = 32,
-       DAG_RL_HOOK_MASK                        = 64,
-       DAG_RL_DATA_CONSTRAINT_MASK     = 128,
-       DAG_RL_ALL_BUT_DATA_MASK        = 253,
-       DAG_RL_ALL_MASK                         = 255
-} dag_rel_type_mask;
 
 typedef void (*graph_action_func)(void * ob, void **data);
 
@@ -91,13 +84,28 @@ int pre_and_post_source_DFS(struct DagForest *dag, short mask, struct DagNode *s
 struct DagNodeQueue *get_obparents(struct DagForest    *dag, void *ob); 
 struct DagNodeQueue *get_first_ancestors(struct DagForest      *dag, void *ob); 
 struct DagNodeQueue *get_all_childs(struct DagForest   *dag, void *ob); //
-dag_rel_type           are_obs_related(struct DagForest        *dag, void *ob1, void *ob2);
+short          are_obs_related(struct DagForest        *dag, void *ob1, void *ob2);
 int                                    is_acyclic(struct DagForest     *dag); //
 //int                                  get_cycles(struct DagForest     *dag, struct DagNodeQueue **queues, int *count); //
-void                           topo_sort_baselist(struct Scene *sce);
 
 void   boundbox_deps(void);
 void   draw_all_deps(void);
 
+/* ********** API *************** */
+/* Note that the DAG never executes changes in Objects, only sets flags in Objects */
+
+void   DAG_scene_sort(struct Scene *sce);
+
+               /* flag all objects that need recalc because they're animated */
+void   DAG_scene_update_flags(struct Scene *sce, unsigned int lay);
+               /* flag all objects that need recalc because they're animated, influencing this object only */
+void   DAG_object_update_flags(struct Scene *sce, struct Object *ob, unsigned int lay);
+
+               /* flushes all recalc flags in objects down the dependency tree */
+void   DAG_scene_flush_update(struct Scene *sce, unsigned int lay, int time);
+               /* flushes all recalc flags for this object down the dependency tree */
+void   DAG_object_flush_update(struct Scene *sce, struct Object *ob, short flag);
 
-#endif
\ No newline at end of file
+void   DAG_pose_sort(struct Object *ob);
+               
+#endif