|
Blender V4.3
|
#include <fmt/format.h>#include "BLI_map.hh"#include "BLI_multi_value_map.hh"#include "BLI_noise.hh"#include "BLI_rand.hh"#include "BLI_set.hh"#include "BLI_stack.hh"#include "BLI_string_utf8_symbols.h"#include "BLI_vector_set.hh"#include "DNA_anim_types.h"#include "DNA_modifier_types.h"#include "DNA_node_types.h"#include "BKE_anim_data.hh"#include "BKE_image.hh"#include "BKE_main.hh"#include "BKE_node.hh"#include "BKE_node_enum.hh"#include "BKE_node_runtime.hh"#include "BKE_node_tree_anonymous_attributes.hh"#include "BKE_node_tree_update.hh"#include "MOD_nodes.hh"#include "NOD_geometry_nodes_gizmos.hh"#include "NOD_geometry_nodes_lazy_function.hh"#include "NOD_node_declaration.hh"#include "NOD_socket.hh"#include "NOD_texture.h"#include "BLT_translation.hh"Go to the source code of this file.
Classes | |
| struct | blender::bke::NodeTreeRelations |
| struct | blender::bke::TreeUpdateResult |
| class | blender::bke::NodeTreeMainUpdater |
Namespaces | |
| namespace | blender |
| namespace | blender::bke |
Typedefs | |
| using | blender::bke::TreeNodePair = std::pair<bNodeTree *, bNode *> |
| using | blender::bke::ObjectModifierPair = std::pair<Object *, ModifierData *> |
| using | blender::bke::NodeSocketPair = std::pair<bNode *, bNodeSocket *> |
Enumerations | |
| enum | eNodeTreeChangedFlag { NTREE_CHANGED_NOTHING = 0 , NTREE_CHANGED_ANY = (1 << 1) , NTREE_CHANGED_NODE_PROPERTY = (1 << 2) , NTREE_CHANGED_NODE_OUTPUT = (1 << 3) , NTREE_CHANGED_LINK = (1 << 4) , NTREE_CHANGED_REMOVED_NODE = (1 << 5) , NTREE_CHANGED_REMOVED_SOCKET = (1 << 6) , NTREE_CHANGED_SOCKET_PROPERTY = (1 << 7) , NTREE_CHANGED_INTERNAL_LINK = (1 << 8) , NTREE_CHANGED_PARENT = (1 << 9) , NTREE_CHANGED_ALL = -1 } |
Variables | |
| static bool | is_updating = false |
| enum eNodeTreeChangedFlag |
These flags are used by the changed_flag field in bNodeTree, bNode and bNodeSocket. This enum is not part of the public api. It should be used through the BKE_ntree_update_tag_* api.
Definition at line 46 of file node_tree_update.cc.
|
static |
Definition at line 67 of file node_tree_update.cc.
References add_tree_tag(), and flag.
Referenced by BKE_ntree_update_tag_id_changed(), BKE_ntree_update_tag_node_internal_link(), BKE_ntree_update_tag_node_mute(), BKE_ntree_update_tag_node_new(), BKE_ntree_update_tag_node_property(), BKE_ntree_update_tag_parent_change(), and blender::bke::NodeTreeMainUpdater::update_rooted().
|
static |
Definition at line 73 of file node_tree_update.cc.
References add_tree_tag(), flag, and bNodeSocket::runtime.
Referenced by BKE_ntree_update_tag_socket_availability(), BKE_ntree_update_tag_socket_new(), BKE_ntree_update_tag_socket_property(), and BKE_ntree_update_tag_socket_type().
|
static |
Definition at line 60 of file node_tree_update.cc.
References flag, and bNodeTree::runtime.
Referenced by add_node_tag(), add_socket_tag(), BKE_ntree_update_tag_active_output_changed(), BKE_ntree_update_tag_all(), BKE_ntree_update_tag_image_user_changed(), BKE_ntree_update_tag_link_added(), BKE_ntree_update_tag_link_changed(), BKE_ntree_update_tag_link_mute(), BKE_ntree_update_tag_link_removed(), BKE_ntree_update_tag_missing_runtime_data(), BKE_ntree_update_tag_node_removed(), and BKE_ntree_update_tag_socket_removed().
| void BKE_ntree_update_main | ( | Main * | bmain, |
| NodeTreeUpdateExtraParams * | params ) |
Updates #bmain based on changes to node trees.
Definition at line 1812 of file node_tree_update.cc.
References is_updating, and params.
Referenced by BKE_image_signal(), BKE_ntree_update_main_tree(), blender::bke::node_tree_update_all_new(), blender::bke::node_tree_update_all_users(), ntreeCompositTagRender(), render_endjob(), special_aftertrans_update__movieclip(), and special_aftertrans_update__movieclip_for_curves().
| void BKE_ntree_update_main_tree | ( | Main * | bmain, |
| bNodeTree * | ntree, | ||
| NodeTreeUpdateExtraParams * | params ) |
Same as BKE_ntree_update_main, but will first only look at the provided tree and only looks at #bmain when something relevant for other data-blocks changed. This avoids scanning #bmain in many cases.
If #bmain is null, only the provided tree is updated. This should only be used in very rare cases because it may result it incorrectly synced data in DNA.
If tree is null, this is the same as calling BKE_ntree_update_main.
Definition at line 1824 of file node_tree_update.cc.
References BKE_ntree_update_main(), is_updating, and params.
Referenced by blender::bke::add_auto_smooth_node_tree(), BKE_linestyle_default_shader(), blender::ed::space_node::connect_nested_node_to_node(), blender::ed::space_node::connect_node_to_surface_output(), blender::ed::space_node::connect_nodes_to_aovs(), blender::io::usd::dome_light_to_world_material(), ED_node_composit_default(), ED_node_shader_default(), ED_node_texture_default(), ED_node_tree_propagate_change(), blender::io::obj::get_or_create_material(), Freestyle::BlenderStrokeRenderer::GetStrokeShader(), blender::io::usd::USDMaterialReader::import_usd_preview(), ntree_exec_begin(), ntree_shader_groups_expand_inputs(), ntree_shader_groups_flatten(), ntree_shader_implicit_closure_cast(), ntree_shader_pruned_unused(), ntree_shader_shader_to_rgba_branches(), ntree_shader_unlink_hidden_value_sockets(), ntree_shader_weight_tree_invert(), blender::io::usd::USDPointInstancerReader::read_object_data(), blender::io::usd::USDPointInstancerReader::set_collection(), and MaterialNode::update_material_nodetree().
| void BKE_ntree_update_tag_active_output_changed | ( | bNodeTree * | ntree | ) |
Used when the a new output node becomes active and therefore changes the output.
Definition at line 1759 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_ANY.
Referenced by ED_node_set_active().
| void BKE_ntree_update_tag_all | ( | bNodeTree * | ntree | ) |
Tag tree as changed without providing any more information about what has changed exactly. The update process has to assume that everything may have changed.
Using one of the methods below to tag the tree after changes is preferred when possible.
Definition at line 1684 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_ANY.
Referenced by blo_do_versions_250(), flatten_group_do(), foreach_libblock_remap_callback_apply(), blender::ed::space_node::node_group_separate_selected(), blender::bke::node_tree_update_all_new(), blender::bke::ntree_set_typeinfo(), and paste_material_exec().
Used when an id data block changed that might be used by nodes that need to be updated.
Definition at line 1774 of file node_tree_update.cc.
References add_node_tag(), FOREACH_NODETREE_BEGIN, FOREACH_NODETREE_END, NODE_UPDATE_ID, and NTREE_CHANGED_NODE_PROPERTY.
Referenced by BKE_image_signal(), BKE_movieclip_reload(), render_endjob(), render_view_add_exec(), render_view_remove_exec(), special_aftertrans_update__movieclip(), and special_aftertrans_update__movieclip_for_curves().
Used when an image user is updated that is used by any part of the node tree.
Definition at line 1787 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_ANY.
Definition at line 1749 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_LINK.
Referenced by blender::ed::space_node::add_dragged_links_to_tree(), blo_do_versions_250(), blender::bke::node_add_link(), blender::ed::space_node::node_group_make_insert_selected(), blender::ed::space_node::node_group_ungroup(), and version_node_add_link().
| void BKE_ntree_update_tag_link_changed | ( | bNodeTree * | ntree | ) |
Definition at line 1739 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_LINK.
Referenced by blender::ed::space_node::add_reroute_exec(), blender::ed::space_node::displace_links(), blender::ed::space_node::node_insert_on_link_flags(), blender::bke::node_internal_relink(), blender::ed::space_node::node_swap_links(), and blender::ed::space_node::viewer_linking::view_socket().
Definition at line 1754 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_LINK.
Referenced by blender::bke::node_link_set_mute().
| void BKE_ntree_update_tag_link_removed | ( | bNodeTree * | ntree | ) |
Definition at line 1744 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_LINK.
Referenced by blender::ed::space_node::displace_links(), blender::ed::space_node::node_group_make_insert_selected(), blender::ed::space_node::node_link_cancel(), and blender::bke::node_remove_link().
| void BKE_ntree_update_tag_missing_runtime_data | ( | bNodeTree * | ntree | ) |
Used after file loading when run-time data on the tree has not been initialized yet.
Definition at line 1764 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_ALL.
Referenced by blender::bke::node_tree_blend_read_data().
Definition at line 1734 of file node_tree_update.cc.
References add_node_tag(), and NTREE_CHANGED_INTERNAL_LINK.
Referenced by blender::bke::node_remove_socket_ex().
Definition at line 1729 of file node_tree_update.cc.
References add_node_tag(), and NTREE_CHANGED_NODE_PROPERTY.
Referenced by blender::ed::space_node::node_mute_exec().
Definition at line 1694 of file node_tree_update.cc.
References add_node_tag(), and NTREE_CHANGED_NODE_PROPERTY.
Referenced by blender::bke::node_add_node(), blender::bke::node_copy_with_mapping(), blender::ed::space_node::node_group_make_insert_selected(), blender::ed::space_node::node_group_ungroup(), version_add_group_in_out_node(), and version_node_add_empty().
More specialized tag functions that may result in a more efficient update.
Definition at line 1689 of file node_tree_update.cc.
References add_node_tag(), and NTREE_CHANGED_NODE_PROPERTY.
Referenced by blender::ed::space_node::add_node_group_asset(), blender::ed::space_node::attribute_search_exec_fn(), BLO_update_defaults_startup_blend(), blender::ed::space_node::connect_nested_node_to_node(), blender::ed::space_node::node_add_file_exec(), blender::ed::space_node::node_add_group_exec(), blender::ed::space_node::node_deactivate_viewer_exec(), blender::ed::space_node::node_link_init(), blender::ed::space_node::node_link_item_apply(), blender::ed::space_node::node_output_file_move_active_socket_exec(), blender::ed::space_node::node_property_update_default(), blender::ed::space_node::node_socket_add_replace(), blender::ed::space_node::node_socket_disconnect(), blender::ed::space_node::node_socket_remove(), blender::bke::node_tree_update_all_users(), ntreeCompositTagRender(), blender::ed::space_node::pick_link(), blender::ed::space_node::search_link_ops_for_asset_metadata(), and blender::nodes::socket_items::ops::update_after_node_change().
| void BKE_ntree_update_tag_node_removed | ( | bNodeTree * | ntree | ) |
Definition at line 1724 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_REMOVED_NODE.
Referenced by blender::bke::node_free_node(), and blender::ed::space_node::node_group_make_insert_selected().
Used when change parent node.
Definition at line 1769 of file node_tree_update.cc.
References add_node_tag(), and NTREE_CHANGED_PARENT.
Referenced by blender::bke::node_attach_node(), and blender::bke::node_detach_node().
| void BKE_ntree_update_tag_socket_availability | ( | bNodeTree * | ntree, |
| bNodeSocket * | socket ) |
Definition at line 1719 of file node_tree_update.cc.
References add_socket_tag(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by blender::bke::node_set_socket_availability().
| void BKE_ntree_update_tag_socket_new | ( | bNodeTree * | ntree, |
| bNodeSocket * | socket ) |
Definition at line 1704 of file node_tree_update.cc.
References add_socket_tag(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by blender::bke::node_add_socket(), blender::nodes::refresh_node_socket(), version_add_group_in_out_node(), and version_node_add_socket().
| void BKE_ntree_update_tag_socket_property | ( | bNodeTree * | ntree, |
| bNodeSocket * | socket ) |
Definition at line 1699 of file node_tree_update.cc.
References add_socket_tag(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by blender::nodes::node_composite_file_output_cc::update_output_file().
| void BKE_ntree_update_tag_socket_removed | ( | bNodeTree * | ntree | ) |
Definition at line 1709 of file node_tree_update.cc.
References add_tree_tag(), and NTREE_CHANGED_REMOVED_SOCKET.
Referenced by blender::bke::node_remove_socket_ex().
| void BKE_ntree_update_tag_socket_type | ( | bNodeTree * | ntree, |
| bNodeSocket * | socket ) |
Definition at line 1714 of file node_tree_update.cc.
References add_socket_tag(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by blender::bke::node_socket_set_typeinfo(), and version_add_group_in_out_node().
| bool operator== | ( | const bNestedNodePath & | a, |
| const bNestedNodePath & | b ) |
Definition at line 1798 of file node_tree_update.cc.
References b.
|
static |
Protect from recursive calls into the updating function. Some node update functions might trigger this from Python or in other cases.
This could be added to Main, but given that there is generally only one Main, that's not really worth it now.
Definition at line 1810 of file node_tree_update.cc.
Referenced by BKE_ntree_update_main(), and BKE_ntree_update_main_tree().