51#undef INVALIDATE_ON_FLUSH
70void flush_init_id_node_func(
void *__restrict data_v,
82inline void flush_prepare(
Depsgraph *graph)
100 queue->push_back(op_node);
104 "Operation is entry point for update: %s\n",
109inline void flush_handle_id_node(
IDNode *id_node)
115inline void flush_handle_component_node(
IDNode *id_node,
191 queue->push_front(to_node);
223 "Accumulated recalc bits for %s: %u\n",
241#ifdef INVALIDATE_ON_FLUSH
242void invalidate_tagged_evaluated_transform(
ID *
id)
248 copy_vn_fl((
float *)object->object_to_world().ptr(), 16, NAN);
256void invalidate_tagged_evaluated_geometry(
ID *
id)
271void invalidate_tagged_evaluated_data(
Depsgraph *graph)
273#ifdef INVALIDATE_ON_FLUSH
286 switch (comp_node->
type) {
288 invalidate_tagged_evaluated_transform(id_cow);
291 invalidate_tagged_evaluated_geometry(id_cow);
318 flush_prepare(graph);
321 flush_schedule_entrypoints(graph, &queue);
324 update_ctx.
bmain = bmain;
329 while (!queue.empty()) {
332 while (op_node !=
nullptr) {
338 flush_handle_id_node(id_node);
339 flush_handle_component_node(id_node, comp_node, &queue);
341 op_node = flush_schedule_children(op_node, &queue);
345 flush_editors_id_update(graph, &update_ctx);
348 invalidate_tagged_evaluated_data(graph);
General operations, lookup, etc. for blender objects.
void BKE_object_free_derived_caches(Object *ob)
void copy_vn_fl(float *array_tar, int size, float val)
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
void DEG_graph_id_type_tag(Depsgraph *depsgraph, short id_type)
#define DEG_DEBUG_PRINTF(depsgraph, type,...)
@ RELATION_FLAG_FLUSH_USER_EDIT_ONLY
void deg_editors_id_update(const DEGEditorUpdateContext *update_ctx, ID *id)
std::deque< OperationNode * > FlushQueue
bool deg_eval_copy_is_expanded(const ID *id_cow)
void deg_graph_clear_tags(Depsgraph *graph)
DepsNodeFactory * type_get_factory(const NodeType type)
void deg_graph_flush_updates(Depsgraph *graph)
@ DEPSOP_FLAG_NEEDS_UPDATE
@ DEPSOP_FLAG_USER_MODIFIED
@ COMPONENT_STATE_SCHEDULED
OperationNode * get_entry_operation() override
Vector< OperationNode * > operations
virtual int id_recalc_tag() const =0
OperationNodes operations
Set< OperationNode * > entry_tags
TimeSourceNode * time_source
Map< ComponentIDKey, ComponentNode * > components
ComponentNode * find_component(NodeType type, StringRef name="") const
std::string identifier() const override
void flush_update_tag(Depsgraph *graph)