Pose brush: Smooth Iterations Brush Property
[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 CustomData_MeshMasks;
38 struct ID;
39 struct Main;
40 struct Object;
41 struct Scene;
42 struct ViewLayer;
43 struct bNodeTree;
44
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48
49 #include "BLI_sys_types.h"
50
51 /* Graph Building -------------------------------- */
52
53 /* Build depsgraph for the given scene, and dump results in given graph container. */
54 void DEG_graph_build_from_view_layer(struct Depsgraph *graph,
55                                      struct Main *bmain,
56                                      struct Scene *scene,
57                                      struct ViewLayer *view_layer);
58
59 /* Special version of builder which produces dependency graph suitable for the render pipeline.
60  * It will contain sequencer and compositor (if needed) and all their dependencies. */
61 void DEG_graph_build_for_render_pipeline(struct Depsgraph *graph,
62                                          struct Main *bmain,
63                                          struct Scene *scene,
64                                          struct ViewLayer *view_layer);
65
66 /* Builds minimal dependency graph for compositor preview.
67  *
68  * Note that compositor editor might have pinned node tree, which is different from scene's node
69  * tree.
70  */
71 void DEG_graph_build_for_compositor_preview(struct Depsgraph *graph,
72                                             struct Main *bmain,
73                                             struct Scene *scene,
74                                             struct ViewLayer *view_layer,
75                                             struct bNodeTree *nodetree);
76
77 void DEG_graph_build_from_ids(struct Depsgraph *graph,
78                               struct Main *bmain,
79                               struct Scene *scene,
80                               struct ViewLayer *view_layer,
81                               struct ID **ids,
82                               const int num_ids);
83
84 /* Tag relations from the given graph for update. */
85 void DEG_graph_tag_relations_update(struct Depsgraph *graph);
86
87 /* Create or update relations in the specified graph. */
88 void DEG_graph_relations_update(struct Depsgraph *graph,
89                                 struct Main *bmain,
90                                 struct Scene *scene,
91                                 struct ViewLayer *view_layer);
92
93 /* Tag all relations in the database for update.*/
94 void DEG_relations_tag_update(struct Main *bmain);
95
96 /* Add Dependencies  ----------------------------- */
97
98 /* Handle for components to define their dependencies from callbacks.
99  * This is generated by the depsgraph and passed to dependency callbacks
100  * as a symbolic reference to the current DepsNode.
101  * All relations will be defined in reference to that node.
102  */
103 struct DepsNodeHandle;
104
105 typedef enum eDepsSceneComponentType {
106   /* Parameters Component - Default when nothing else fits
107    * (i.e. just SDNA property setting). */
108   DEG_SCENE_COMP_PARAMETERS,
109   /* Animation Component
110    * TODO(sergey): merge in with parameters?  */
111   DEG_SCENE_COMP_ANIMATION,
112   /* Sequencer Component (Scene Only). */
113   DEG_SCENE_COMP_SEQUENCER,
114 } eDepsSceneComponentType;
115
116 typedef enum eDepsObjectComponentType {
117   /* Used in query API, to denote which component caller is interested in. */
118   DEG_OB_COMP_ANY,
119
120   /* Parameters Component - Default when nothing else fits
121    * (i.e. just SDNA property setting). */
122   DEG_OB_COMP_PARAMETERS,
123   /* Generic "Proxy-Inherit" Component.
124    * TODO(sergey): Also for instancing of subgraphs? */
125   DEG_OB_COMP_PROXY,
126   /* Animation Component.
127    *
128    * TODO(sergey): merge in with parameters? */
129   DEG_OB_COMP_ANIMATION,
130   /* Transform Component (Parenting/Constraints) */
131   DEG_OB_COMP_TRANSFORM,
132   /* Geometry Component (Mesh/Displist) */
133   DEG_OB_COMP_GEOMETRY,
134
135   /* Evaluation-Related Outer Types (with Sub-data) */
136
137   /* Pose Component - Owner/Container of Bones Eval */
138   DEG_OB_COMP_EVAL_POSE,
139   /* Bone Component - Child/Sub-component of Pose */
140   DEG_OB_COMP_BONE,
141
142   /* Material Shading Component */
143   DEG_OB_COMP_SHADING,
144   /* Cache Component */
145   DEG_OB_COMP_CACHE,
146 } eDepsObjectComponentType;
147
148 void DEG_add_scene_relation(struct DepsNodeHandle *node_handle,
149                             struct Scene *scene,
150                             eDepsSceneComponentType component,
151                             const char *description);
152 void DEG_add_object_relation(struct DepsNodeHandle *node_handle,
153                              struct Object *object,
154                              eDepsObjectComponentType component,
155                              const char *description);
156 void DEG_add_bone_relation(struct DepsNodeHandle *handle,
157                            struct Object *object,
158                            const char *bone_name,
159                            eDepsObjectComponentType component,
160                            const char *description);
161 void DEG_add_object_cache_relation(struct DepsNodeHandle *handle,
162                                    struct CacheFile *cache_file,
163                                    eDepsObjectComponentType component,
164                                    const char *description);
165 /* Adds relation from DEG_OPCODE_GENERIC_DATABLOCK_UPDATE of a given ID.
166  * Is used for such entities as textures and images. */
167 void DEG_add_generic_id_relation(struct DepsNodeHandle *node_handle,
168                                  struct ID *id,
169                                  const char *description);
170
171 /* Special function which is used from modifiers' updateDepsgraph() callback
172  * to indicate that the modifier needs to know transformation of the object
173  * which that modifier belongs to.
174  * This function will take care of checking which operation is required to
175  * have transformation for the modifier, taking into account possible simulation
176  * solvers. */
177 void DEG_add_modifier_to_transform_relation(struct DepsNodeHandle *node_handle,
178                                             const char *description);
179
180 /* Adds relations from the given component of a given object to the given node
181  * handle AND the component to the point cache component of the node's ID. */
182 void DEG_add_object_pointcache_relation(struct DepsNodeHandle *node_handle,
183                                         struct Object *object,
184                                         eDepsObjectComponentType component,
185                                         const char *description);
186
187 void DEG_add_special_eval_flag(struct DepsNodeHandle *handle, struct ID *id, uint32_t flag);
188 void DEG_add_customdata_mask(struct DepsNodeHandle *handle,
189                              struct Object *object,
190                              const struct CustomData_MeshMasks *masks);
191
192 struct ID *DEG_get_id_from_handle(struct DepsNodeHandle *node_handle);
193 struct Depsgraph *DEG_get_graph_from_handle(struct DepsNodeHandle *node_handle);
194
195 /* ************************************************ */
196
197 #ifdef __cplusplus
198 } /* extern "C" */
199 #endif
200
201 #endif /* __DEG_DEPSGRAPH_BUILD_H__ */