|
Blender V4.5
|
#include <fmt/format.h>#include "BLI_listbase.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.h"#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_lib_id.hh"#include "BKE_main.hh"#include "BKE_node.hh"#include "BKE_node_enum.hh"#include "BKE_node_legacy_types.hh"#include "BKE_node_runtime.hh"#include "BKE_node_tree_reference_lifetimes.hh"#include "BKE_node_tree_update.hh"#include "MOD_nodes.hh"#include "NOD_geo_closure.hh"#include "NOD_geometry_nodes_dependencies.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 "DEG_depsgraph_build.hh"#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 54 of file node_tree_update.cc.
|
static |
Definition at line 76 of file node_tree_update.cc.
References add_node_tag(), add_tree_tag(), and bNode::runtime.
Referenced by add_node_tag(), 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_node_type(), BKE_ntree_update_tag_parent_change(), and blender::bke::NodeTreeMainUpdater::update_rooted().
|
static |
Definition at line 82 of file node_tree_update.cc.
References add_socket_tag(), add_tree_tag(), and bNodeSocket::runtime.
Referenced by add_socket_tag(), 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 68 of file node_tree_update.cc.
References add_tree_tag(), and bNodeTree::runtime.
Referenced by add_node_tag(), add_socket_tag(), add_tree_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 & | bmain, |
| const std::optional< blender::Span< bNodeTree * > > | modified_trees, | ||
| const NodeTreeUpdateExtraParams & | params ) |
Definition at line 2039 of file node_tree_update.cc.
References BKE_ntree_update(), is_updating, blender::bke::NodeTreeMainUpdater::update(), and blender::bke::NodeTreeMainUpdater::update_rooted().
| void BKE_ntree_update_after_single_tree_change | ( | Main & | bmain, |
| bNodeTree & | modified_tree, | ||
| const NodeTreeUpdateExtraParams & | params = {} ) |
Same as BKE_ntree_update but with a simpler API for the case when only a single tree has been modified.
Definition at line 2058 of file node_tree_update.cc.
References BKE_ntree_update(), and BKE_ntree_update_after_single_tree_change().
Referenced by blender::bke::add_auto_smooth_node_tree(), BKE_linestyle_default_shader(), BKE_ntree_update_after_single_tree_change(), 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(), blender::io::obj::get_or_create_material(), Freestyle::BlenderStrokeRenderer::GetStrokeShader(), blender::io::fbx::import_material(), blender::io::usd::USDMaterialReader::import_usd_preview_nodes(), 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 1986 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_active_output_changed(), and NTREE_CHANGED_ANY.
Referenced by BKE_ntree_update_tag_active_output_changed(), ED_node_set_active(), blender::ed::space_node::viewer_linking::finalize_viewer_link(), and blender::ed::space_node::node_activate_viewer_exec().
| 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 1906 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_all(), and NTREE_CHANGED_ANY.
Referenced by BKE_ntree_update_tag_all(), 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 2001 of file node_tree_update.cc.
References add_node_tag(), BKE_ntree_update_tag_id_changed(), FOREACH_NODETREE_BEGIN, FOREACH_NODETREE_END, bNode::id, NODE_UPDATE_ID, NTREE_CHANGED_NODE_PROPERTY, and bNode::runtime.
Referenced by BKE_image_signal(), BKE_movieclip_reload(), BKE_ntree_update_tag_id_changed(), render_endjob(), render_view_add_exec(), render_view_remove_exec(), blender::ed::transform::special_aftertrans_update__movieclip(), and blender::ed::transform::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 2014 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_image_user_changed(), and NTREE_CHANGED_ANY.
Referenced by BKE_ntree_update_tag_image_user_changed().
Definition at line 1976 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_link_added(), and NTREE_CHANGED_LINK.
Referenced by blender::ed::space_node::add_dragged_links_to_tree(), BKE_ntree_update_tag_link_added(), 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 1966 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_link_changed(), and NTREE_CHANGED_LINK.
Referenced by blender::ed::space_node::add_reroute_exec(), BKE_ntree_update_tag_link_changed(), 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 1981 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_link_mute(), and NTREE_CHANGED_LINK.
Referenced by BKE_ntree_update_tag_link_mute(), and blender::bke::node_link_set_mute().
| void BKE_ntree_update_tag_link_removed | ( | bNodeTree * | ntree | ) |
Definition at line 1971 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_link_removed(), and NTREE_CHANGED_LINK.
Referenced by BKE_ntree_update_tag_link_removed(), 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 1991 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_missing_runtime_data(), and NTREE_CHANGED_ALL.
Referenced by BKE_ntree_update_tag_missing_runtime_data(), and blender::bke::node_tree_blend_read_data().
Definition at line 1961 of file node_tree_update.cc.
References add_node_tag(), BKE_ntree_update_tag_node_internal_link(), and NTREE_CHANGED_INTERNAL_LINK.
Referenced by BKE_ntree_update_tag_node_internal_link(), and blender::bke::node_remove_socket_ex().
Definition at line 1956 of file node_tree_update.cc.
References add_node_tag(), BKE_ntree_update_tag_node_mute(), and NTREE_CHANGED_NODE_PROPERTY.
Referenced by BKE_ntree_update_tag_node_mute(), and blender::ed::space_node::node_mute_exec().
Definition at line 1916 of file node_tree_update.cc.
References add_node_tag(), BKE_ntree_update_tag_node_new(), and NTREE_CHANGED_NODE_PROPERTY.
Referenced by BKE_ntree_update_tag_node_new(), 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 1911 of file node_tree_update.cc.
References add_node_tag(), BKE_ntree_update_tag_node_property(), and NTREE_CHANGED_NODE_PROPERTY.
Referenced by blender::ed::space_node::add_node_group_asset(), blender::ed::space_node::attribute_search_exec_fn(), BKE_ntree_update_tag_node_property(), BLO_update_defaults_startup_blend(), blender::ed::space_node::connect_nested_node_to_node(), blender::ed::space_node::node_add_group_exec(), blender::ed::space_node::node_add_image_exec(), blender::ed::space_node::node_deactivate_viewer_exec(), blender::ed::space_node::node_flag_toggle_exec(), blender::ed::space_node::node_group_make_from_node_declaration(), 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(), blender::nodes::node_geo_closure_cc::output_node::try_initialize_closure_from_evaluator(), and blender::nodes::socket_items::ops::update_after_node_change().
| void BKE_ntree_update_tag_node_removed | ( | bNodeTree * | ntree | ) |
Definition at line 1951 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_node_removed(), and NTREE_CHANGED_REMOVED_NODE.
Referenced by BKE_ntree_update_tag_node_removed(), blender::bke::node_free_node(), and blender::ed::space_node::node_group_make_insert_selected().
Definition at line 1921 of file node_tree_update.cc.
References add_node_tag(), BKE_ntree_update_tag_node_type(), and NTREE_CHANGED_NODE_PROPERTY.
Referenced by BKE_ntree_update_tag_node_type(), and blender::bke::node_set_typeinfo().
Used when change parent node.
Definition at line 1996 of file node_tree_update.cc.
References add_node_tag(), BKE_ntree_update_tag_parent_change(), and NTREE_CHANGED_PARENT.
Referenced by BKE_ntree_update_tag_parent_change(), 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 1946 of file node_tree_update.cc.
References add_socket_tag(), BKE_ntree_update_tag_socket_availability(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by BKE_ntree_update_tag_socket_availability(), and blender::bke::node_set_socket_availability().
| void BKE_ntree_update_tag_socket_new | ( | bNodeTree * | ntree, |
| bNodeSocket * | socket ) |
Definition at line 1931 of file node_tree_update.cc.
References add_socket_tag(), BKE_ntree_update_tag_socket_new(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by BKE_ntree_update_tag_socket_new(), 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 1926 of file node_tree_update.cc.
References add_socket_tag(), BKE_ntree_update_tag_socket_property(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by BKE_ntree_update_tag_socket_property(), blender::ed::space_node::node_add_collection_exec(), blender::ed::space_node::node_add_image_exec(), blender::ed::space_node::node_add_object_exec(), blender::io::usd::USDPointInstancerReader::set_collection(), and blender::nodes::node_composite_file_output_cc::update_output_file().
| void BKE_ntree_update_tag_socket_removed | ( | bNodeTree * | ntree | ) |
Definition at line 1936 of file node_tree_update.cc.
References add_tree_tag(), BKE_ntree_update_tag_socket_removed(), and NTREE_CHANGED_REMOVED_SOCKET.
Referenced by BKE_ntree_update_tag_socket_removed(), and blender::bke::node_remove_socket_ex().
| void BKE_ntree_update_tag_socket_type | ( | bNodeTree * | ntree, |
| bNodeSocket * | socket ) |
Definition at line 1941 of file node_tree_update.cc.
References add_socket_tag(), BKE_ntree_update_tag_socket_type(), and NTREE_CHANGED_SOCKET_PROPERTY.
Referenced by BKE_ntree_update_tag_socket_type(), blender::bke::node_socket_set_typeinfo(), and version_add_group_in_out_node().
| void BKE_ntree_update_without_main | ( | bNodeTree & | tree | ) |
Can be used to update trees locally, without affecting other trees. For example, when building a temporary node tree that is not in bmain.
Definition at line 2065 of file node_tree_update.cc.
References BKE_ntree_update_without_main(), is_updating, and blender::bke::NodeTreeMainUpdater::update_rooted().
Referenced by BKE_ntree_update_without_main().
| bool operator== | ( | const bNestedNodePath & | a, |
| const bNestedNodePath & | b ) |
Definition at line 2025 of file node_tree_update.cc.
References b, bNestedNodePath::id_in_node, bNestedNodePath::node_id, and operator==().
|
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 2037 of file node_tree_update.cc.
Referenced by BKE_ntree_update(), and BKE_ntree_update_without_main().