Merge branch 'blender2.7' of git.blender.org:blender
[blender.git] / source / blender / depsgraph / DEG_depsgraph_build.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2013 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup depsgraph
22  *
23  * Public API for Depsgraph
24  */
25
26 #ifndef __DEG_DEPSGRAPH_BUILD_H__
27 #define __DEG_DEPSGRAPH_BUILD_H__
28
29 /* ************************************************* */
30
31 /* Dependency Graph */
32 struct Depsgraph;
33
34 /* ------------------------------------------------ */
35
36 struct CacheFile;
37 struct Collection;
38 struct CustomData_MeshMasks;
39 struct EffectorWeights;
40 struct ID;
41 struct Main;
42 struct ModifierData;
43 struct Object;
44 struct Scene;
45 struct ViewLayer;
46
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50
51 #include "BLI_sys_types.h"
52
53 /* Graph Building -------------------------------- */
54
55 /* Build depsgraph for the given scene, and dump results in given
56  * graph container.
57  */
58 void DEG_graph_build_from_view_layer(struct Depsgraph *graph,
59                                       struct Main *bmain,
60                                       struct Scene *scene,
61                                       struct ViewLayer *view_layer);
62
63 /* Tag relations from the given graph for update. */
64 void DEG_graph_tag_relations_update(struct Depsgraph *graph);
65
66 /* Create or update relations in the specified graph. */
67 void DEG_graph_relations_update(struct Depsgraph *graph,
68                                 struct Main *bmain,
69                                 struct Scene *scene,
70                                 struct ViewLayer *view_layer);
71
72 /* Tag all relations in the database for update.*/
73 void DEG_relations_tag_update(struct Main *bmain);
74
75 /* Add Dependencies  ----------------------------- */
76
77 /* Handle for components to define their dependencies from callbacks.
78  * This is generated by the depsgraph and passed to dependency callbacks
79  * as a symbolic reference to the current DepsNode.
80  * All relations will be defined in reference to that node.
81  */
82 struct DepsNodeHandle;
83
84 typedef enum eDepsSceneComponentType {
85         /* Parameters Component - Default when nothing else fits
86          * (i.e. just SDNA property setting). */
87         DEG_SCENE_COMP_PARAMETERS,
88         /* Animation Component
89          * TODO(sergey): merge in with parameters?  */
90         DEG_SCENE_COMP_ANIMATION,
91         /* Sequencer Component (Scene Only). */
92         DEG_SCENE_COMP_SEQUENCER,
93 } eDepsSceneComponentType;
94
95 typedef enum eDepsObjectComponentType {
96         /* Parameters Component - Default when nothing else fits
97          * (i.e. just SDNA property setting). */
98         DEG_OB_COMP_PARAMETERS,
99         /* Generic "Proxy-Inherit" Component.
100          * TODO(sergey): Also for instancing of subgraphs? */
101         DEG_OB_COMP_PROXY,
102         /* Animation Component.
103          *
104          * TODO(sergey): merge in with parameters? */
105         DEG_OB_COMP_ANIMATION,
106         /* Transform Component (Parenting/Constraints) */
107         DEG_OB_COMP_TRANSFORM,
108         /* Geometry Component (Mesh/Displist) */
109         DEG_OB_COMP_GEOMETRY,
110
111         /* Evaluation-Related Outer Types (with Subdata) */
112
113         /* Pose Component - Owner/Container of Bones Eval */
114         DEG_OB_COMP_EVAL_POSE,
115         /* Bone Component - Child/Subcomponent of Pose */
116         DEG_OB_COMP_BONE,
117
118         /* Material Shading Component */
119         DEG_OB_COMP_SHADING,
120         /* Cache Component */
121         DEG_OB_COMP_CACHE,
122 } eDepsObjectComponentType;
123
124 void DEG_add_scene_relation(struct DepsNodeHandle *node_handle,
125                             struct Scene *scene,
126                             eDepsSceneComponentType component,
127                             const char *description);
128 void DEG_add_object_relation(struct DepsNodeHandle *node_handle,
129                              struct Object *object,
130                              eDepsObjectComponentType component,
131                              const char *description);
132 void DEG_add_bone_relation(struct DepsNodeHandle *handle,
133                            struct Object *object,
134                            const char *bone_name,
135                            eDepsObjectComponentType component,
136                            const char *description);
137 void DEG_add_object_cache_relation(struct DepsNodeHandle *handle,
138                                    struct CacheFile *cache_file,
139                                    eDepsObjectComponentType component,
140                                    const char *description);
141 /* Adds relation from DEG_OPCODE_GENERIC_DATABLOCK_UPDATE of a given ID.
142  * Is used for such entities as textures and images. */
143 void DEG_add_generic_id_relation(struct DepsNodeHandle *node_handle,
144                                  struct ID *id,
145                                  const char *description);
146
147 /* Special function which is used from modifiers' updateDepsgraph() callback
148  * to indicate that the modifietr needs to know transformation of the object
149  * which that modifier belongs to.
150  * This function will take care of checking which operation is required to
151  * have transformation for the modifier, taking into account possible simulation
152  * solvers. */
153 void DEG_add_modifier_to_transform_relation(
154         struct DepsNodeHandle *node_handle,
155         const char *description);
156
157 /* Adds relations from the given component of a given object to the given node
158  * handle AND the component to the point cache component of the node's ID. */
159 void DEG_add_object_pointcache_relation(struct DepsNodeHandle *node_handle,
160                                         struct Object *object,
161                                         eDepsObjectComponentType component,
162                                         const char *description);
163
164 void DEG_add_special_eval_flag(struct DepsNodeHandle *handle, struct ID *id, uint32_t flag);
165 void DEG_add_customdata_mask(struct DepsNodeHandle *handle, struct Object *object, const struct CustomData_MeshMasks *masks);
166
167 struct ID *DEG_get_id_from_handle(struct DepsNodeHandle *node_handle);
168 struct Depsgraph *DEG_get_graph_from_handle(struct DepsNodeHandle *node_handle);
169
170 /* ************************************************ */
171
172 #ifdef __cplusplus
173 } /* extern "C" */
174 #endif
175
176 #endif  /* __DEG_DEPSGRAPH_BUILD_H__ */