Blender  V3.3
deg_builder_nodes.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2013 Blender Foundation. All rights reserved. */
3 
8 #pragma once
9 
12 #include "intern/depsgraph_type.h"
15 
16 #include "DEG_depsgraph.h"
17 
18 struct CacheFile;
19 struct Camera;
20 struct Collection;
21 struct FCurve;
22 struct FreestyleLineSet;
23 struct FreestyleLineStyle;
24 struct ID;
25 struct IDProperty;
26 struct Image;
27 struct Key;
28 struct LayerCollection;
29 struct Light;
30 struct LightProbe;
31 struct ListBase;
32 struct Main;
33 struct Mask;
34 struct Material;
35 struct MovieClip;
36 struct Object;
37 struct ParticleSettings;
38 struct Scene;
39 struct Simulation;
40 struct Speaker;
41 struct Tex;
42 struct VFont;
43 struct World;
44 struct bAction;
45 struct bArmature;
46 struct bConstraint;
47 struct bGPdata;
48 struct bNodeSocket;
49 struct bNodeTree;
50 struct bPoseChannel;
51 struct bSound;
52 
53 namespace blender::deg {
54 
55 struct ComponentNode;
56 struct Depsgraph;
57 class DepsgraphBuilderCache;
58 struct IDNode;
59 struct OperationNode;
60 struct TimeSourceNode;
61 
63  public:
66 
67  /* For given original ID get ID which is created by CoW system. */
68  ID *get_cow_id(const ID *id_orig) const;
69  /* Similar to above, but for the cases when there is no ID node we create
70  * one. */
71  ID *ensure_cow_id(ID *id_orig);
72 
73  /* Helper wrapper function which wraps get_cow_id with a needed type cast. */
74  template<typename T> T *get_cow_datablock(const T *orig) const
75  {
76  return (T *)get_cow_id(&orig->id);
77  }
78 
79  /* For a given COW datablock get corresponding original one. */
80  template<typename T> T *get_orig_datablock(const T *cow) const
81  {
82  return (T *)cow->id.orig_id;
83  }
84 
85  virtual void begin_build();
86  virtual void end_build();
87 
92  int foreach_id_cow_detect_need_for_update_callback(ID *id_cow_self, ID *id_pointer);
93 
94  IDNode *add_id_node(ID *id);
95  IDNode *find_id_node(ID *id);
97 
98  ComponentNode *add_component_node(ID *id, NodeType comp_type, const char *comp_name = "");
99 
101  OperationCode opcode,
102  const DepsEvalOperationCb &op = nullptr,
103  const char *name = "",
104  int name_tag = -1);
106  NodeType comp_type,
107  const char *comp_name,
108  OperationCode opcode,
109  const DepsEvalOperationCb &op = nullptr,
110  const char *name = "",
111  int name_tag = -1);
113  NodeType comp_type,
114  OperationCode opcode,
115  const DepsEvalOperationCb &op = nullptr,
116  const char *name = "",
117  int name_tag = -1);
118 
120  NodeType comp_type,
121  const char *comp_name,
122  OperationCode opcode,
123  const DepsEvalOperationCb &op = nullptr,
124  const char *name = "",
125  int name_tag = -1);
127  NodeType comp_type,
128  OperationCode opcode,
129  const DepsEvalOperationCb &op = nullptr,
130  const char *name = "",
131  int name_tag = -1);
132 
133  bool has_operation_node(ID *id,
134  NodeType comp_type,
135  const char *comp_name,
136  OperationCode opcode,
137  const char *name = "",
138  int name_tag = -1);
139 
141  NodeType comp_type,
142  const char *comp_name,
143  OperationCode opcode,
144  const char *name = "",
145  int name_tag = -1);
146 
148  ID *id, NodeType comp_type, OperationCode opcode, const char *name = "", int name_tag = -1);
149 
150  virtual void build_id(ID *id);
151 
152  /* Build function for ID types that do not need their own build_xxx() function. */
153  virtual void build_generic_id(ID *id);
154 
155  virtual void build_idproperties(IDProperty *id_property);
156 
157  virtual void build_scene_render(Scene *scene, ViewLayer *view_layer);
158  virtual void build_scene_parameters(Scene *scene);
159  virtual void build_scene_compositor(Scene *scene);
160 
161  virtual void build_layer_collections(ListBase *lb);
162  virtual void build_view_layer(Scene *scene,
163  ViewLayer *view_layer,
164  eDepsNode_LinkedState_Type linked_state);
165  virtual void build_collection(LayerCollection *from_layer_collection, Collection *collection);
166  virtual void build_object(int base_index,
167  Object *object,
168  eDepsNode_LinkedState_Type linked_state,
169  bool is_visible);
170  virtual void build_object_instance_collection(Object *object, bool is_object_visible);
171  virtual void build_object_from_layer(int base_index,
172  Object *object,
173  eDepsNode_LinkedState_Type linked_state);
174  virtual void build_object_flags(int base_index,
175  Object *object,
176  eDepsNode_LinkedState_Type linked_state);
177  virtual void build_object_data(Object *object);
178  virtual void build_object_data_camera(Object *object);
179  virtual void build_object_data_geometry(Object *object);
180  virtual void build_object_data_geometry_datablock(ID *obdata);
181  virtual void build_object_data_light(Object *object);
182  virtual void build_object_data_lightprobe(Object *object);
183  virtual void build_object_data_speaker(Object *object);
184  virtual void build_object_transform(Object *object);
185  virtual void build_object_constraints(Object *object);
186  virtual void build_object_pointcache(Object *object);
187  virtual void build_pose_constraints(Object *object, bPoseChannel *pchan, int pchan_index);
188  virtual void build_rigidbody(Scene *scene);
189  virtual void build_particle_systems(Object *object, bool is_object_visible);
190  virtual void build_particle_settings(ParticleSettings *part);
195  virtual void build_animdata(ID *id);
196  virtual void build_animdata_nlastrip_targets(ListBase *strips);
200  virtual void build_animation_images(ID *id);
201  virtual void build_action(bAction *action);
208  virtual void build_driver(ID *id, FCurve *fcurve, int driver_index);
209  virtual void build_driver_variables(ID *id, FCurve *fcurve);
210  virtual void build_driver_id_property(ID *id, const char *rna_path);
211  virtual void build_parameters(ID *id);
212  virtual void build_dimensions(Object *object);
213  virtual void build_ik_pose(Object *object, bPoseChannel *pchan, bConstraint *con);
214  virtual void build_splineik_pose(Object *object, bPoseChannel *pchan, bConstraint *con);
215  virtual void build_rig(Object *object);
216  virtual void build_armature(bArmature *armature);
217  virtual void build_armature_bones(ListBase *bones);
218  virtual void build_shapekeys(Key *key);
219  virtual void build_camera(Camera *camera);
220  virtual void build_light(Light *lamp);
221  virtual void build_nodetree(bNodeTree *ntree);
222  virtual void build_nodetree_socket(bNodeSocket *socket);
223  virtual void build_material(Material *ma);
224  virtual void build_materials(Material **materials, int num_materials);
225  virtual void build_freestyle_lineset(FreestyleLineSet *fls);
227  virtual void build_texture(Tex *tex);
228  virtual void build_image(Image *image);
229  virtual void build_world(World *world);
230  virtual void build_cachefile(CacheFile *cache_file);
231  virtual void build_mask(Mask *mask);
232  virtual void build_movieclip(MovieClip *clip);
233  virtual void build_lightprobe(LightProbe *probe);
234  virtual void build_speaker(Speaker *speaker);
235  virtual void build_sound(bSound *sound);
236  virtual void build_simulation(Simulation *simulation);
237  virtual void build_scene_sequencer(Scene *scene);
238  virtual void build_scene_audio(Scene *scene);
239  virtual void build_scene_speakers(Scene *scene, ViewLayer *view_layer);
240  virtual void build_vfont(VFont *vfont);
241 
242  /* Per-ID information about what was already in the dependency graph.
243  * Allows to re-use certain values, to speed up following evaluation. */
244  struct IDInfo {
245  /* Copy-on-written pointer of the corresponding ID. */
247  /* Mask of visible components from previous state of the
248  * dependency graph. */
250  /* Special evaluation flag mask from the previous depsgraph. */
252  /* Mesh CustomData mask from the previous depsgraph. */
254  };
255 
256  protected:
257  /* Allows to identify an operation which was tagged for update at the time
258  * relations are being updated. We can not reuse operation node pointer
259  * since it will change during dependency graph construction. */
260  struct SavedEntryTag {
264  string name;
265  int name_tag;
266  };
268 
271  };
272  static void modifier_walk(void *user_data,
273  struct Object *object,
274  struct ID **idpoin,
275  int cb_flag);
276  static void constraint_walk(bConstraint *constraint,
277  ID **idpoin,
278  bool is_reference,
279  void *user_data);
280 
287 
288  /* State which demotes currently built entities. */
292  /* NOTE: Collection are possibly built recursively, so be careful when
293  * setting the current state. */
295  /* Accumulated flag over the hierarchy of currently building collections.
296  * Denotes whether all the hierarchy from parent of `collection_` to the
297  * very root is visible (aka not restricted.). */
299 
300  /* Indexed by original ID.session_uuid, values are IDInfo. */
302 
303  /* Set of IDs which were already build. Makes it easier to keep track of
304  * what was already built and what was not. */
306 };
307 
308 } // namespace blender::deg
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:35
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between camera
virtual void build_scene_parameters(Scene *scene)
virtual void build_scene_sequencer(Scene *scene)
virtual void build_object_data_camera(Object *object)
virtual void build_object_data_geometry(Object *object)
virtual void build_pose_constraints(Object *object, bPoseChannel *pchan, int pchan_index)
virtual void build_object_pointcache(Object *object)
static void modifier_walk(void *user_data, struct Object *object, struct ID **idpoin, int cb_flag)
virtual void build_world(World *world)
virtual void build_object(int base_index, Object *object, eDepsNode_LinkedState_Type linked_state, bool is_visible)
OperationNode * ensure_operation_node(ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const DepsEvalOperationCb &op=nullptr, const char *name="", int name_tag=-1)
virtual void build_freestyle_linestyle(FreestyleLineStyle *linestyle)
virtual void build_scene_speakers(Scene *scene, ViewLayer *view_layer)
virtual void build_cachefile(CacheFile *cache_file)
virtual void build_object_instance_collection(Object *object, bool is_object_visible)
virtual void build_object_data_speaker(Object *object)
OperationNode * add_operation_node(ComponentNode *comp_node, OperationCode opcode, const DepsEvalOperationCb &op=nullptr, const char *name="", int name_tag=-1)
virtual void build_vfont(VFont *vfont)
virtual void build_object_data(Object *object)
virtual void build_particle_settings(ParticleSettings *part)
static void constraint_walk(bConstraint *constraint, ID **idpoin, bool is_reference, void *user_data)
virtual void build_particle_systems(Object *object, bool is_object_visible)
virtual void build_dimensions(Object *object)
virtual void build_armature(bArmature *armature)
virtual void build_scene_audio(Scene *scene)
T * get_orig_datablock(const T *cow) const
virtual void build_simulation(Simulation *simulation)
ComponentNode * add_component_node(ID *id, NodeType comp_type, const char *comp_name="")
virtual void build_driver_variables(ID *id, FCurve *fcurve)
virtual void build_action(bAction *action)
virtual void build_animdata_nlastrip_targets(ListBase *strips)
virtual void build_material(Material *ma)
virtual void build_materials(Material **materials, int num_materials)
virtual void build_collection(LayerCollection *from_layer_collection, Collection *collection)
virtual void build_rigidbody(Scene *scene)
virtual void build_object_transform(Object *object)
OperationNode * find_operation_node(ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const char *name="", int name_tag=-1)
virtual void build_freestyle_lineset(FreestyleLineSet *fls)
virtual void build_movieclip(MovieClip *clip)
Vector< SavedEntryTag > saved_entry_tags_
virtual void build_object_data_light(Object *object)
virtual void build_ik_pose(Object *object, bPoseChannel *pchan, bConstraint *con)
virtual void build_scene_render(Scene *scene, ViewLayer *view_layer)
virtual void build_image(Image *image)
virtual void build_speaker(Speaker *speaker)
virtual void build_sound(bSound *sound)
virtual void build_object_data_geometry_datablock(ID *obdata)
DepsgraphNodeBuilder(Main *bmain, Depsgraph *graph, DepsgraphBuilderCache *cache)
virtual void build_layer_collections(ListBase *lb)
virtual void build_object_flags(int base_index, Object *object, eDepsNode_LinkedState_Type linked_state)
ID * get_cow_id(const ID *id_orig) const
virtual void build_rig(Object *object)
virtual void build_driver_id_property(ID *id, const char *rna_path)
virtual void build_lightprobe(LightProbe *probe)
int foreach_id_cow_detect_need_for_update_callback(ID *id_cow_self, ID *id_pointer)
virtual void build_nodetree(bNodeTree *ntree)
virtual void build_splineik_pose(Object *object, bPoseChannel *pchan, bConstraint *con)
virtual void build_idproperties(IDProperty *id_property)
virtual void build_camera(Camera *camera)
virtual void build_light(Light *lamp)
virtual void build_armature_bones(ListBase *bones)
virtual void build_driver(ID *id, FCurve *fcurve, int driver_index)
bool has_operation_node(ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const char *name="", int name_tag=-1)
virtual void build_view_layer(Scene *scene, ViewLayer *view_layer, eDepsNode_LinkedState_Type linked_state)
virtual void build_nodetree_socket(bNodeSocket *socket)
virtual void build_scene_compositor(Scene *scene)
virtual void build_object_data_lightprobe(Object *object)
virtual void build_object_constraints(Object *object)
T * get_cow_datablock(const T *orig) const
virtual void build_object_from_layer(int base_index, Object *object, eDepsNode_LinkedState_Type linked_state)
Depsgraph * graph
Scene scene
FreestyleLineStyle linestyle
World world
Simulation simulation
Light lamp
void * user_data
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img") .image(3
bNodeTree * ntree
smooth(Type::VEC4, "color_mul") .smooth(Type gpFillTexture gpSceneDepthTexture materials[GPENCIL_MATERIAL_BUFFER_LEN]
Definition: gpencil_info.hh:29
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
Definition: math_float4.h:513
#define T
uint64_t IDComponentsMask
Definition: deg_node_id.h:17
eDepsNode_LinkedState_Type
Definition: deg_node_id.h:23
function< void(struct ::Depsgraph *)> DepsEvalOperationCb
unsigned int uint32_t
Definition: stdint.h:80
Definition: DNA_ID.h:368
Definition: BKE_main.h:121