Blender  V3.3
deg_node_operation.cc
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 
9 
10 #include "MEM_guardedalloc.h"
11 
12 #include "BLI_utildefines.h"
13 
14 #include "intern/depsgraph.h"
18 
19 namespace blender::deg {
20 
22 {
23  switch (opcode) {
24  /* Generic Operations. */
26  return "OPERATION";
28  return "ID_PROPERTY";
30  return "PARAMETERS_ENTRY";
32  return "PARAMETERS_EVAL";
34  return "PARAMETERS_EXIT";
36  return "VISIBILITY";
37  /* Animation, Drivers, etc. */
39  return "ANIMATION_ENTRY";
41  return "ANIMATION_EVAL";
43  return "ANIMATION_EXIT";
45  return "DRIVER";
46  /* Scene related. */
48  return "SCENE_EVAL";
50  return "AUDIO_ENTRY";
52  return "AUDIO_VOLUME";
53  /* Object related. */
55  return "OBJECT_FROM_LAYER_ENTRY";
57  return "OBJECT_BASE_FLAGS";
59  return "OBJECT_FROM_LAYER_EXIT";
61  return "DIMENSIONS";
62  /* Transform. */
64  return "TRANSFORM_INIT";
66  return "TRANSFORM_LOCAL";
68  return "TRANSFORM_PARENT";
70  return "TRANSFORM_CONSTRAINTS";
72  return "TRANSFORM_FINAL";
74  return "TRANSFORM_EVAL";
76  return "TRANSFORM_SIMULATION_INIT";
77  /* Rigid body. */
79  return "RIGIDBODY_REBUILD";
81  return "RIGIDBODY_SIM";
83  return "RIGIDBODY_TRANSFORM_COPY";
84  /* Geometry. */
86  return "GEOMETRY_EVAL_INIT";
88  return "GEOMETRY_EVAL";
90  return "GEOMETRY_EVAL_DONE";
92  return "GEOMETRY_SHAPEKEY";
93  /* Object data. */
95  return "LIGHT_PROBE_EVAL";
97  return "SPEAKER_EVAL";
99  return "SOUND_EVAL";
101  return "ARMATURE_EVAL";
102  /* Pose. */
104  return "POSE_INIT";
106  return "POSE_INIT_IK";
108  return "POSE_CLEANUP";
110  return "POSE_DONE";
112  return "POSE_IK_SOLVER";
114  return "POSE_SPLINE_IK_SOLVER";
115  /* Bone. */
117  return "BONE_LOCAL";
119  return "BONE_POSE_PARENT";
121  return "BONE_CONSTRAINTS";
123  return "BONE_READY";
125  return "BONE_DONE";
127  return "BONE_SEGMENTS";
128  /* Particle System. */
130  return "PARTICLE_SYSTEM_INIT";
132  return "PARTICLE_SYSTEM_EVAL";
134  return "PARTICLE_SYSTEM_DONE";
135  /* Particles Settings. */
137  return "PARTICLE_SETTINGS_INIT";
139  return "PARTICLE_SETTINGS_EVAL";
141  return "PARTICLE_SETTINGS_RESET";
142  /* Point Cache. */
144  return "POINT_CACHE_RESET";
145  /* File cache. */
147  return "FILE_CACHE_UPDATE";
148  /* Batch cache. */
150  return "GEOMETRY_SELECT_UPDATE";
151  /* Masks. */
153  return "MASK_ANIMATION";
155  return "MASK_EVAL";
156  /* Collections. */
158  return "VIEW_LAYER_EVAL";
159  /* Copy on write. */
161  return "COPY_ON_WRITE";
162  /* Shading. */
164  return "SHADING";
166  return "MATERIAL_UPDATE";
168  return "LIGHT_UPDATE";
170  return "WORLD_UPDATE";
171  /* Node Tree. */
173  return "NTREE_OUTPUT";
174  /* Movie clip. */
176  return "MOVIECLIP_EVAL";
178  return "MOVIECLIP_SELECT_UPDATE";
179  /* Image. */
181  return "IMAGE_ANIMATION";
182  /* Synchronization. */
184  return "SYNCHRONIZE_TO_ORIGINAL";
185  /* Generic datablock. */
187  return "GENERIC_DATABLOCK_UPDATE";
188  /* Sequencer. */
190  return "SEQUENCES_EVAL";
191  /* instancing/duplication. */
193  return "DUPLI";
195  return "SIMULATION_EVAL";
196  }
197  BLI_assert_msg(0, "Unhandled operation code, should never happen.");
198  return "UNKNOWN";
199 }
200 
201 OperationNode::OperationNode() : name_tag(-1), flag(0)
202 {
203 }
204 
206 {
207  return string(operationCodeAsString(opcode)) + "(" + name + ")";
208 }
209 
211 {
212  string owner_str = owner->owner->name;
213  if (owner->type == NodeType::BONE || !owner->name.empty()) {
214  owner_str += "/" + owner->name;
215  }
216  return owner_str + "/" + identifier();
217 }
218 
220 {
221  /* Ensure that there is an entry tag for this update.
222  *
223  * Note that the node might already be tagged for an update due invisible state of the node
224  * during previous dependency evaluation. Here the node gets re-tagged, so we need to give
225  * the evaluated clues that evaluation needs to happen again. */
226  graph->add_entry_tag(this);
227 
228  /* Tag for update, but also note that this was the source of an update. */
230  switch (source) {
234  /* Currently nothing. */
235  break;
238  break;
239  }
240 }
241 
243 {
244  BLI_assert(owner != nullptr);
245  owner->set_entry_operation(this);
246 }
247 
249 {
250  BLI_assert(owner != nullptr);
251  owner->set_exit_operation(this);
252 }
253 
256 
258 {
260 }
261 
262 } // namespace blender::deg
#define BLI_assert(a)
Definition: BLI_assert.h:46
#define BLI_assert_msg(a, msg)
Definition: BLI_assert.h:53
Read Guarded memory(de)allocation.
Depsgraph * graph
void register_node_typeinfo(DepsNodeFactory *factory)
const char * operationCodeAsString(OperationCode opcode)
static DepsNodeFactoryImpl< OperationNode > DNTI_OPERATION
void deg_register_operation_depsnodes()
DEG_DEPSNODE_DEFINE(TimeSourceNode, NodeType::TIMESOURCE, "Time Source")
@ DEG_UPDATE_SOURCE_USER_EDIT
@ DEG_UPDATE_SOURCE_RELATIONS
@ DEG_UPDATE_SOURCE_VISIBILITY
void set_exit_operation(OperationNode *op_node)
void set_entry_operation(OperationNode *op_node)
virtual void tag_update(Depsgraph *graph, eUpdateSource source) override
virtual string identifier() const override