Blender V4.3
node_edit.cc File Reference
#include <algorithm>
#include "MEM_guardedalloc.h"
#include "DNA_material_types.h"
#include "DNA_node_types.h"
#include "DNA_text_types.h"
#include "DNA_world_types.h"
#include "BKE_callbacks.hh"
#include "BKE_context.hh"
#include "BKE_global.hh"
#include "BKE_image.hh"
#include "BKE_lib_id.hh"
#include "BKE_main.hh"
#include "BKE_material.h"
#include "BKE_node.hh"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.hh"
#include "BKE_report.hh"
#include "BKE_scene.hh"
#include "BKE_scene_runtime.hh"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLT_translation.hh"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_build.hh"
#include "DEG_depsgraph_debug.hh"
#include "DEG_depsgraph_query.hh"
#include "RE_engine.h"
#include "RE_pipeline.h"
#include "ED_image.hh"
#include "ED_node.hh"
#include "ED_render.hh"
#include "ED_screen.hh"
#include "ED_viewer_path.hh"
#include "RNA_access.hh"
#include "RNA_define.hh"
#include "RNA_prototypes.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "UI_view2d.hh"
#include "GPU_capabilities.hh"
#include "GPU_material.hh"
#include "IMB_imbuf_types.hh"
#include "NOD_composite.hh"
#include "NOD_geometry.hh"
#include "NOD_shader.h"
#include "NOD_socket.hh"
#include "NOD_texture.h"
#include "node_intern.hh"
#include "COM_profiler.hh"

Go to the source code of this file.

Classes

struct  blender::ed::space_node::CompoJob
 
struct  blender::ed::space_node::NodeSizeWidget
 

Namespaces

namespace  blender
 
namespace  blender::ed
 
namespace  blender::ed::space_node
 

Macros

#define USE_ESC_COMPO
 

Functions

void blender::ed::space_node::snode_set_context (const bContext &C)
 
Composite Job C API
static bool is_compositing_possible (const bContext *C)
 
void ED_node_composite_job (const bContext *C, bNodeTree *nodetree, Scene *scene_owner)
 
Composite Poll & Utility Functions
bool blender::ed::space_node::composite_node_active (bContext *C)
 
bool blender::ed::space_node::composite_node_editable (bContext *C)
 
static void blender::ed::space_node::send_notifiers_after_tree_change (ID *id, bNodeTree *ntree)
 
Node Editor Public API Functions
void ED_node_tree_propagate_change (const bContext *C, Main *bmain, bNodeTree *root_ntree)
 
void ED_node_set_tree_type (SpaceNode *snode, blender::bke::bNodeTreeType *typeinfo)
 
bool ED_node_is_compositor (const SpaceNode *snode)
 
bool ED_node_is_shader (SpaceNode *snode)
 
bool ED_node_is_texture (SpaceNode *snode)
 
bool ED_node_is_geometry (SpaceNode *snode)
 
bool ED_node_supports_preview (SpaceNode *snode)
 
void ED_node_shader_default (const bContext *C, ID *id)
 
void ED_node_composit_default (const bContext *C, Scene *sce)
 
void ED_node_texture_default (const bContext *C, Tex *tex)
 
void ED_node_set_active (Main *bmain, SpaceNode *snode, bNodeTree *ntree, bNode *node, bool *r_active_texture_changed)
 
void ED_node_post_apply_transform (bContext *, bNodeTree *)
 
Node Generic
static bool blender::ed::space_node::socket_is_occluded (const float2 &location, const bNode &node_the_socket_belongs_to, const Span< bNode * > sorted_nodes)
 
Node Size Widget Operator
static void blender::ed::space_node::node_resize_init (bContext *C, wmOperator *op, const float2 &cursor, const bNode *node, NodeResizeDirection dir)
 
static void blender::ed::space_node::node_resize_exit (bContext *C, wmOperator *op, bool cancel)
 
static int blender::ed::space_node::node_resize_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
static int blender::ed::space_node::node_resize_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static void blender::ed::space_node::node_resize_cancel (bContext *C, wmOperator *op)
 
void blender::ed::space_node::NODE_OT_resize (wmOperatorType *ot)
 
Node Hidden Sockets
bool blender::ed::space_node::node_has_hidden_sockets (bNode *node)
 
void blender::ed::space_node::node_set_hidden_sockets (bNode *node, int set)
 
bool blender::ed::space_node::node_is_previewable (const SpaceNode &snode, const bNodeTree &ntree, const bNode &node)
 
static bool blender::ed::space_node::cursor_isect_multi_input_socket (const float2 &cursor, const bNodeSocket &socket)
 
bNodeSocketblender::ed::space_node::node_find_indicated_socket (SpaceNode &snode, ARegion &region, const float2 &cursor, const eNodeSocketInOut in_out)
 
Node Link Dimming
float blender::ed::space_node::node_link_dim_factor (const View2D &v2d, const bNodeLink &link)
 
bool blender::ed::space_node::node_link_is_hidden_or_dimmed (const View2D &v2d, const bNodeLink &link)
 
Node Duplicate Operator
static void blender::ed::space_node::node_duplicate_reparent_recursive (bNodeTree *ntree, const Map< bNode *, bNode * > &node_map, bNode *node)
 
void blender::ed::space_node::remap_node_pairing (bNodeTree &dst_tree, const Map< const bNode *, bNode * > &node_map)
 
static int blender::ed::space_node::node_duplicate_exec (bContext *C, wmOperator *op)
 
void blender::ed::space_node::NODE_OT_duplicate (wmOperatorType *ot)
 
static int blender::ed::space_node::node_read_viewlayers_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_read_viewlayers (wmOperatorType *ot)
 
int blender::ed::space_node::node_render_changed_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_render_changed (wmOperatorType *ot)
 
Node Hide Operator
static void blender::ed::space_node::node_flag_toggle_exec (SpaceNode *snode, int toggle_flag)
 
static int blender::ed::space_node::node_hide_toggle_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_hide_toggle (wmOperatorType *ot)
 
static int blender::ed::space_node::node_preview_toggle_exec (bContext *C, wmOperator *)
 
static bool blender::ed::space_node::node_previewable (bContext *C)
 
void blender::ed::space_node::NODE_OT_preview_toggle (wmOperatorType *ot)
 
static int blender::ed::space_node::node_deactivate_viewer_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_deactivate_viewer (wmOperatorType *ot)
 
static int blender::ed::space_node::node_options_toggle_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_options_toggle (wmOperatorType *ot)
 
static int blender::ed::space_node::node_socket_toggle_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_hide_socket_toggle (wmOperatorType *ot)
 
Node Mute Operator
static int blender::ed::space_node::node_mute_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_mute_toggle (wmOperatorType *ot)
 
Node Delete Operator
static int blender::ed::space_node::node_delete_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_delete (wmOperatorType *ot)
 
Node Delete with Reconnect Operator
static int blender::ed::space_node::node_delete_reconnect_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_delete_reconnect (wmOperatorType *ot)
 
Node File Output Add Socket Operator
static int blender::ed::space_node::node_output_file_add_socket_exec (bContext *C, wmOperator *op)
 
void blender::ed::space_node::NODE_OT_output_file_add_socket (wmOperatorType *ot)
 
Node Multi File Output Remove Socket Operator
static int blender::ed::space_node::node_output_file_remove_active_socket_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_output_file_remove_active_socket (wmOperatorType *ot)
 
Node Multi File Output Move Socket Node
static int blender::ed::space_node::node_output_file_move_active_socket_exec (bContext *C, wmOperator *op)
 
void blender::ed::space_node::NODE_OT_output_file_move_active_socket (wmOperatorType *ot)
 
Node Copy Node Color Operator
static int blender::ed::space_node::node_copy_color_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_node_copy_color (wmOperatorType *ot)
 
Node Shader Script Update
static bool blender::ed::space_node::node_shader_script_update_poll (bContext *C)
 
static bool blender::ed::space_node::node_shader_script_update_text_recursive (RenderEngine *engine, RenderEngineType *type, bNodeTree *ntree, Text *text, VectorSet< bNodeTree * > &done_trees)
 
static int blender::ed::space_node::node_shader_script_update_exec (bContext *C, wmOperator *op)
 
void blender::ed::space_node::NODE_OT_shader_script_update (wmOperatorType *ot)
 
Node Viewer Border
static void blender::ed::space_node::viewer_border_corner_to_backdrop (SpaceNode *snode, ARegion *region, int x, int y, int backdrop_width, int backdrop_height, float *fx, float *fy)
 
static int blender::ed::space_node::viewer_border_exec (bContext *C, wmOperator *op)
 
void blender::ed::space_node::NODE_OT_viewer_border (wmOperatorType *ot)
 
static int blender::ed::space_node::clear_viewer_border_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_clear_viewer_border (wmOperatorType *ot)
 
Cryptomatte Add Socket
static int blender::ed::space_node::node_cryptomatte_add_socket_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_cryptomatte_layer_add (wmOperatorType *ot)
 
Cryptomatte Remove Socket
static int blender::ed::space_node::node_cryptomatte_remove_socket_exec (bContext *C, wmOperator *)
 
void blender::ed::space_node::NODE_OT_cryptomatte_layer_remove (wmOperatorType *ot)
 

Composite Job Manager

enum  { blender::ed::space_node::COM_RECALC_COMPOSITE = 1 , blender::ed::space_node::COM_RECALC_VIEWER = 2 }
 
float blender::ed::space_node::node_socket_calculate_height (const bNodeSocket &socket)
 
float2 blender::ed::space_node::node_link_calculate_multi_input_position (const float2 &socket_position, const int index, const int total_inputs)
 
static void blender::ed::space_node::compo_tag_output_nodes (bNodeTree *nodetree, int recalc_flags)
 
static int blender::ed::space_node::compo_get_recalc_flags (const bContext *C)
 
static bool blender::ed::space_node::compo_breakjob (void *cjv)
 
static void blender::ed::space_node::compo_statsdrawjob (void *cjv, const char *)
 
static void blender::ed::space_node::compo_redrawjob (void *cjv)
 
static void blender::ed::space_node::compo_freejob (void *cjv)
 
static void blender::ed::space_node::compo_initjob (void *cjv)
 
static void blender::ed::space_node::compo_updatejob (void *)
 
static void blender::ed::space_node::compo_progressjob (void *cjv, float progress)
 
static void blender::ed::space_node::compo_startjob (void *cjv, wmJobWorkerStatus *worker_status)
 
static void blender::ed::space_node::compo_canceljob (void *cjv)
 
static void blender::ed::space_node::compo_completejob (void *cjv)
 

Macro Definition Documentation

◆ USE_ESC_COMPO

#define USE_ESC_COMPO

Definition at line 76 of file node_edit.cc.

Function Documentation

◆ ED_node_composit_default()

◆ ED_node_composite_job()

◆ ED_node_is_compositor()

◆ ED_node_is_geometry()

◆ ED_node_is_shader()

◆ ED_node_is_texture()

◆ ED_node_post_apply_transform()

void ED_node_post_apply_transform ( bContext * C,
bNodeTree * ntree )

◆ ED_node_set_active()

◆ ED_node_set_tree_type()

void ED_node_set_tree_type ( SpaceNode * snode,
blender::bke::bNodeTreeType * typeinfo )

◆ ED_node_shader_default()

◆ ED_node_supports_preview()

bool ED_node_supports_preview ( SpaceNode * snode)

◆ ED_node_texture_default()

void ED_node_texture_default ( const bContext * C,
Tex * tex )

◆ ED_node_tree_propagate_change()

void ED_node_tree_propagate_change ( const bContext * C,
Main * bmain,
bNodeTree * ntree )

Call after one or more node trees have been changed and tagged accordingly.

This function will make sure that other parts of Blender update accordingly. For example, if the node group interface changed, parent node groups have to be updated as well.

Additionally, this will send notifiers and tag the depsgraph based on the changes. Depsgraph relation updates have to be triggered by the caller.

Parameters
CContext if available. This can be null.
bmainMain whose data-blocks should be updated based on the changes.
ntreeUnder some circumstances the caller knows that only one node tree has changed since the last update. In this case the function may be able to skip scanning #bmain for other things that have to be changed. It may still scan #bmain if the interface of the node tree has changed.

Definition at line 492 of file node_edit.cc.

References BKE_ntree_update_main_tree(), CTX_wm_space_node(), DEG_id_tag_update(), SpaceNode::id, ID_RECALC_NTREE_OUTPUT, ID_RECALC_SYNC_TO_EVAL, params, and blender::ed::space_node::send_notifiers_after_tree_change().

Referenced by blender::ed::space_node::add_dragged_links_to_tree(), blender::ed::space_node::add_group_input_node_fn(), blender::ed::space_node::add_node(), blender::ed::space_node::add_node_group_asset(), blender::ed::space_node::add_reroute_exec(), blender::ed::space_node::add_static_node(), blender::ed::space_node::attribute_search_exec_fn(), blender::ed::space_node::clear_viewer_border_exec(), blender::ed::space_node::cut_links_exec(), blender::ed::space_node::detach_links_exec(), ED_node_set_active(), ED_object_assign_active_image(), blender::ed::curves::ensure_surface_deformation_node_exists(), blender::ed::space_node::viewer_linking::finalize_viewer_link(), blender::ed::space_node::link_drag_search_exec_fn(), blender::ed::space_node::mute_links_exec(), blender::ed::space_node::node_active_link_viewer_exec(), blender::ed::space_node::node_add_collection_exec(), blender::ed::space_node::node_add_file_exec(), blender::ed::space_node::node_add_group_exec(), blender::ed::space_node::node_add_mask_exec(), blender::ed::space_node::node_add_material_exec(), blender::ed::space_node::node_add_object_exec(), blender::ed::space_node::node_clipboard_paste_exec(), blender::ed::space_node::node_cryptomatte_add_socket_exec(), blender::ed::space_node::node_cryptomatte_remove_socket_exec(), blender::ed::space_node::node_deactivate_viewer_exec(), blender::ed::space_node::node_delete_exec(), blender::ed::space_node::node_delete_reconnect_exec(), blender::ed::space_node::node_duplicate_exec(), blender::ed::space_node::node_group_make_insert_selected(), blender::ed::space_node::node_group_separate_exec(), blender::ed::space_node::node_group_ungroup_exec(), blender::ed::space_node::node_insert_on_link_flags(), blender::ed::space_node::node_join_exec(), blender::ed::space_node::node_link_cancel(), blender::ed::space_node::node_make_link_exec(), blender::ed::space_node::node_mute_exec(), blender::ed::space_node::node_output_file_add_socket_exec(), blender::ed::space_node::node_output_file_move_active_socket_exec(), blender::ed::space_node::node_output_file_remove_active_socket_exec(), blender::ed::space_node::node_panel_toggle_button_cb(), blender::ed::space_node::node_preview_toggle_exec(), blender::ed::space_node::node_property_update_default(), blender::ed::space_node::node_read_viewlayers_exec(), blender::ed::space_node::node_socket_add_replace(), blender::ed::space_node::node_socket_disconnect(), blender::ed::space_node::node_socket_remove(), blender::ed::space_node::node_socket_toggle_exec(), blender::ed::outliner::outliner_delete_exec(), blender::ed::outliner::outliner_id_operation_exec(), blender::ed::outliner::outliner_lib_operation_exec(), paste_material_exec(), proj_paint_add_slot(), render_view_add_exec(), render_view_remove_exec(), blender::ed::transform::special_aftertrans_update__node(), blender::nodes::socket_items::ops::update_after_node_change(), blender::ed::space_node::viewer_border_exec(), and blender::ed::view3d::geometry_nodes_gizmos::WIDGETGROUP_geometry_nodes_refresh().

◆ is_compositing_possible()

static bool is_compositing_possible ( const bContext * C)
static