Blender V5.0
deg_node_operation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2013 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
10
11#include "intern/depsgraph.hh"
15
16namespace blender::deg {
17
19{
20 switch (opcode) {
21 /* Generic Operations. */
23 return "OPERATION";
25 return "ID_PROPERTY";
27 return "PARAMETERS_ENTRY";
29 return "PARAMETERS_EVAL";
31 return "PARAMETERS_EXIT";
33 return "VISIBILITY";
34 /* Hierarchy. */
36 return "HIERARCHY";
37 /* Animation, Drivers, etc. */
39 return "ANIMATION_ENTRY";
41 return "ANIMATION_EVAL";
43 return "ANIMATION_EXIT";
45 return "DRIVER";
47 return "DRIVER_UNSHARE";
48 /* Scene related. */
50 return "SCENE_EVAL";
52 return "AUDIO_ENTRY";
54 return "AUDIO_VOLUME";
55 /* Object related. */
57 return "OBJECT_FROM_LAYER_ENTRY";
59 return "OBJECT_BASE_FLAGS";
61 return "OBJECT_FROM_LAYER_EXIT";
63 return "DIMENSIONS";
64 /* Transform. */
66 return "TRANSFORM_INIT";
68 return "TRANSFORM_LOCAL";
70 return "TRANSFORM_PARENT";
72 return "TRANSFORM_CONSTRAINTS";
74 return "TRANSFORM_FINAL";
76 return "TRANSFORM_EVAL";
78 return "TRANSFORM_SIMULATION_INIT";
79 /* Rigid body. */
81 return "RIGIDBODY_REBUILD";
83 return "RIGIDBODY_SIM";
85 return "RIGIDBODY_TRANSFORM_COPY";
86 /* Geometry. */
88 return "GEOMETRY_EVAL_INIT";
90 return "MODIFIER";
92 return "GEOMETRY_EVAL";
94 return "GEOMETRY_EVAL_DONE";
96 return "GEOMETRY_SHAPEKEY";
97 /* Object data. */
99 return "LIGHT_PROBE_EVAL";
101 return "SPEAKER_EVAL";
103 return "SOUND_EVAL";
105 return "ARMATURE_EVAL";
106 /* Pose. */
108 return "POSE_INIT";
110 return "POSE_INIT_IK";
112 return "POSE_CLEANUP";
114 return "POSE_DONE";
116 return "POSE_IK_SOLVER";
118 return "POSE_SPLINE_IK_SOLVER";
119 /* Bone. */
121 return "BONE_LOCAL";
123 return "BONE_POSE_PARENT";
125 return "BONE_CONSTRAINTS";
127 return "BONE_READY";
129 return "BONE_DONE";
131 return "BONE_SEGMENTS";
132 /* Particle System. */
134 return "PARTICLE_SYSTEM_INIT";
136 return "PARTICLE_SYSTEM_EVAL";
138 return "PARTICLE_SYSTEM_DONE";
139 /* Particles Settings. */
141 return "PARTICLE_SETTINGS_INIT";
143 return "PARTICLE_SETTINGS_EVAL";
145 return "PARTICLE_SETTINGS_RESET";
146 /* Point Cache. */
148 return "POINT_CACHE_RESET";
149 /* File cache. */
151 return "FILE_CACHE_UPDATE";
152 /* Batch cache. */
154 return "GEOMETRY_SELECT_UPDATE";
155 /* Masks. */
157 return "MASK_ANIMATION";
159 return "MASK_EVAL";
160 /* Collections. */
162 return "VIEW_LAYER_EVAL";
163 /* Copy on eval. */
165 return "COPY_ON_EVAL";
166 /* Shading. */
168 return "SHADING";
170 return "SHADING_DONE";
172 return "MATERIAL_UPDATE";
174 return "LIGHT_UPDATE";
176 return "WORLD_UPDATE";
177 /* Light linking. */
179 return "LIGHT_LINKING_UPDATE";
180 /* Node Tree. */
182 return "NTREE_OUTPUT";
184 return "NTREE_GEOMETRY_PREPROCESS";
185 /* Movie clip. */
187 return "MOVIECLIP_EVAL";
188 /* Image. */
190 return "IMAGE_ANIMATION";
191 /* Synchronization. */
193 return "SYNCHRONIZE_TO_ORIGINAL";
194 /* Generic datablock. */
196 return "GENERIC_DATABLOCK_UPDATE";
197 /* Sequencer. */
199 return "SEQUENCES_EVAL";
200 /* instancing. */
202 return "INSTANCER";
204 return "INSTANCE";
206 return "INSTANCE_GEOMETRY";
207 }
208 BLI_assert_msg(0, "Unhandled operation code, should never happen.");
209 return "UNKNOWN";
210}
211
213
214std::string OperationNode::identifier() const
215{
216 return std::string(operationCodeAsString(opcode)) + "(" + name + ")";
217}
218
220{
221 std::string owner_str = owner->owner->name;
222 if (owner->type == NodeType::BONE || !owner->name.empty()) {
223 owner_str += "/" + owner->name;
224 }
225 return owner_str + "/" + identifier();
226}
227
229{
230 /* Ensure that there is an entry tag for this update.
231 *
232 * Note that the node might already be tagged for an update due invisible state of the node
233 * during previous dependency evaluation. Here the node gets re-tagged, so we need to give
234 * the evaluated clues that evaluation needs to happen again. */
235 graph->add_entry_tag(this);
236
237 /* Enforce dynamic visibility code-path update.
238 * This ensures visibility flags are consistently propagated throughout the dependency graph when
239 * there is no animated visibility in the graph.
240 *
241 * For example this ensures that graph is updated properly when manually toggling non-animated
242 * modifier visibility. */
244 graph->need_update_nodes_visibility = true;
245 }
246
247 /* Tag for update, but also note that this was the source of an update. */
249 switch (source) {
254 /* Currently nothing. */
255 break;
258 break;
259 }
260}
261
263{
264 BLI_assert(owner != nullptr);
265 owner->set_entry_operation(this);
266}
267
269{
270 BLI_assert(owner != nullptr);
271 owner->set_exit_operation(this);
272}
273
276
281
282} // namespace blender::deg
#define BLI_assert(a)
Definition BLI_assert.h:46
#define BLI_assert_msg(a, msg)
Definition BLI_assert.h:53
#define DEG_DEPSNODE_DEFINE(NodeType, type_, tname_)
Definition deg_node.hh:219
void register_node_typeinfo(DepsNodeFactory *factory)
const char * operationCodeAsString(OperationCode opcode)
static DepsNodeFactoryImpl< OperationNode > DNTI_OPERATION
void deg_register_operation_depsnodes()
@ DEG_UPDATE_SOURCE_SIDE_EFFECT_REQUEST
void add_entry_tag(OperationNode *node)
Definition depsgraph.cc:224
std::string name
Definition deg_node.hh:180
std::string full_identifier() const
void tag_update(Depsgraph *graph, eUpdateSource source) override
std::string identifier() const override