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