Blender V4.3
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
10
11#include "MEM_guardedalloc.h"
12
13#include "BLI_utildefines.h"
14
15#include "intern/depsgraph.hh"
19
20namespace blender::deg {
21
23{
24 switch (opcode) {
25 /* Generic Operations. */
27 return "OPERATION";
29 return "ID_PROPERTY";
31 return "PARAMETERS_ENTRY";
33 return "PARAMETERS_EVAL";
35 return "PARAMETERS_EXIT";
37 return "VISIBILITY";
38 /* Hierarchy. */
40 return "HIERARCHY";
41 /* Animation, Drivers, etc. */
43 return "ANIMATION_ENTRY";
45 return "ANIMATION_EVAL";
47 return "ANIMATION_EXIT";
49 return "DRIVER";
50 /* Scene related. */
52 return "SCENE_EVAL";
54 return "AUDIO_ENTRY";
56 return "AUDIO_VOLUME";
57 /* Object related. */
59 return "OBJECT_FROM_LAYER_ENTRY";
61 return "OBJECT_BASE_FLAGS";
63 return "OBJECT_FROM_LAYER_EXIT";
65 return "DIMENSIONS";
66 /* Transform. */
68 return "TRANSFORM_INIT";
70 return "TRANSFORM_LOCAL";
72 return "TRANSFORM_PARENT";
74 return "TRANSFORM_CONSTRAINTS";
76 return "TRANSFORM_FINAL";
78 return "TRANSFORM_EVAL";
80 return "TRANSFORM_SIMULATION_INIT";
81 /* Rigid body. */
83 return "RIGIDBODY_REBUILD";
85 return "RIGIDBODY_SIM";
87 return "RIGIDBODY_TRANSFORM_COPY";
88 /* Geometry. */
90 return "GEOMETRY_EVAL_INIT";
92 return "MODIFIER";
94 return "GEOMETRY_EVAL";
96 return "GEOMETRY_EVAL_DONE";
98 return "GEOMETRY_SHAPEKEY";
99 /* Object data. */
101 return "LIGHT_PROBE_EVAL";
103 return "SPEAKER_EVAL";
105 return "SOUND_EVAL";
107 return "ARMATURE_EVAL";
108 /* Pose. */
110 return "POSE_INIT";
112 return "POSE_INIT_IK";
114 return "POSE_CLEANUP";
116 return "POSE_DONE";
118 return "POSE_IK_SOLVER";
120 return "POSE_SPLINE_IK_SOLVER";
121 /* Bone. */
123 return "BONE_LOCAL";
125 return "BONE_POSE_PARENT";
127 return "BONE_CONSTRAINTS";
129 return "BONE_READY";
131 return "BONE_DONE";
133 return "BONE_SEGMENTS";
134 /* Particle System. */
136 return "PARTICLE_SYSTEM_INIT";
138 return "PARTICLE_SYSTEM_EVAL";
140 return "PARTICLE_SYSTEM_DONE";
141 /* Particles Settings. */
143 return "PARTICLE_SETTINGS_INIT";
145 return "PARTICLE_SETTINGS_EVAL";
147 return "PARTICLE_SETTINGS_RESET";
148 /* Point Cache. */
150 return "POINT_CACHE_RESET";
151 /* File cache. */
153 return "FILE_CACHE_UPDATE";
154 /* Batch cache. */
156 return "GEOMETRY_SELECT_UPDATE";
157 /* Masks. */
159 return "MASK_ANIMATION";
161 return "MASK_EVAL";
162 /* Collections. */
164 return "VIEW_LAYER_EVAL";
165 /* Copy on eval. */
167 return "COPY_ON_EVAL";
168 /* Shading. */
170 return "SHADING";
172 return "SHADING_DONE";
174 return "MATERIAL_UPDATE";
176 return "LIGHT_UPDATE";
178 return "WORLD_UPDATE";
179 /* Light linking. */
181 return "LIGHT_LINKING_UPDATE";
182 /* Node Tree. */
184 return "NTREE_OUTPUT";
186 return "NTREE_GEOMETRY_PREPROCESS";
187 /* Movie clip. */
189 return "MOVIECLIP_EVAL";
190 /* Image. */
192 return "IMAGE_ANIMATION";
193 /* Synchronization. */
195 return "SYNCHRONIZE_TO_ORIGINAL";
196 /* Generic datablock. */
198 return "GENERIC_DATABLOCK_UPDATE";
199 /* Sequencer. */
201 return "SEQUENCES_EVAL";
202 /* instancing. */
204 return "INSTANCER";
206 return "INSTANCE";
208 return "INSTANCE_GEOMETRY";
209 }
210 BLI_assert_msg(0, "Unhandled operation code, should never happen.");
211 return "UNKNOWN";
212}
213
214OperationNode::OperationNode() : name_tag(-1), flag(0) {}
215
217{
218 return string(operationCodeAsString(opcode)) + "(" + name + ")";
219}
220
222{
223 string owner_str = owner->owner->name;
224 if (owner->type == NodeType::BONE || !owner->name.empty()) {
225 owner_str += "/" + owner->name;
226 }
227 return owner_str + "/" + identifier();
228}
229
231{
232 /* Ensure that there is an entry tag for this update.
233 *
234 * Note that the node might already be tagged for an update due invisible state of the node
235 * during previous dependency evaluation. Here the node gets re-tagged, so we need to give
236 * the evaluated clues that evaluation needs to happen again. */
237 graph->add_entry_tag(this);
238
239 /* Enforce dynamic visibility code-path update.
240 * This ensures visibility flags are consistently propagated throughout the dependency graph when
241 * there is no animated visibility in the graph.
242 *
243 * For example this ensures that graph is updated properly when manually toggling non-animated
244 * modifier visibility. */
246 graph->need_update_nodes_visibility = true;
247 }
248
249 /* Tag for update, but also note that this was the source of an update. */
251 switch (source) {
256 /* Currently nothing. */
257 break;
260 break;
261 }
262}
263
265{
266 BLI_assert(owner != nullptr);
268}
269
271{
272 BLI_assert(owner != nullptr);
274}
275
278
283
284} // namespace blender::deg
#define BLI_assert(a)
Definition BLI_assert.h:50
#define BLI_assert_msg(a, msg)
Definition BLI_assert.h:57
Read Guarded memory(de)allocation.
#define DEG_DEPSNODE_DEFINE(NodeType, type_, tname_)
Definition deg_node.hh:217
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 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
uint8_t flag
Definition wm_window.cc:138