Blender V5.0
BKE_node.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
11#include <optional>
12
13#include "BLI_compiler_compat.h"
14#include "BLI_span.hh"
15
17#include "BKE_volume_enums.hh"
18
19/* for FOREACH_NODETREE_BEGIN */
20#include "DNA_node_types.h"
21
22#include "RNA_types.hh"
23
24#include "BLI_map.hh"
25#include "BLI_string_ref.hh"
26
27/* not very important, but the stack solver likes to know a maximum */
28#define MAX_SOCKET 512
29
30struct BlendDataReader;
31struct BlendWriter;
33struct GPUMaterial;
34struct GPUNodeStack;
35struct ID;
36struct ImBuf;
38struct Light;
39struct Main;
40struct Material;
41struct PointerRNA;
42struct Scene;
43struct SpaceNode;
44struct Tex;
45struct World;
46struct bContext;
47struct bNode;
48struct bNodeExecContext;
49struct bNodeTreeExec;
50struct bNodeExecData;
51struct bNodeLink;
52struct bNodeSocket;
53struct bNodeStack;
54struct bNodeTree;
55struct bNodeTreeExec;
56struct uiLayout;
57
58namespace blender {
59class CPPType;
60namespace nodes {
61class DNode;
62class NodeMultiFunctionBuilder;
63class GeoNodeExecParams;
64class NodeDeclaration;
65class NodeDeclarationBuilder;
66class GatherAddNodeSearchParams;
67class GatherLinkSearchOpParams;
68struct NodeExtraInfoParams;
69namespace value_elem {
71class ElemEvalParams;
72} // namespace value_elem
73namespace inverse_eval {
75} // namespace inverse_eval
76} // namespace nodes
77namespace compositor {
78class Context;
79class NodeOperation;
80} // namespace compositor
81} // namespace blender
82
83namespace blender::bke {
84
85/* -------------------------------------------------------------------- */
88
100 int type;
101 char name[/*MAX_NAME*/ 64];
103 float val1, val2, val3, val4;
104 float min, max;
107 int flag;
108
109 /* After this line is used internal only. */
110
114 char identifier[/*MAX_NAME*/ 64];
115};
116
117/* Use `void *` for callbacks that require C++. This is rather ugly, but works well for now. This
118 * would not be necessary if we would use bNodeSocketType and bNodeType only in C++ code.
119 * However, achieving this requires quite a few changes currently. */
124 const bNode &node,
126using SocketGetCPPValueFunction = void (*)(const void *socket_value, void *r_value);
127using SocketGetGeometryNodesCPPValueFunction = SocketValueVariant (*)(const void *socket_value);
128
129/* Adds socket link operations that are specific to this node type. */
132
133/* Adds node add menu operations that are specific to this node type. */
135 void (*)(blender::nodes::GatherAddNodeSearchParams &params);
136
146 const bNode &node,
147 const bNodeSocket &output_socket);
148using NodeBlendWriteFunction = void (*)(const bNodeTree &tree,
149 const bNode &node,
150 BlendWriter &writer);
152
160 std::string idname;
162 std::string label;
164 std::string subtype_label;
165
166 void (*draw)(bContext *C,
167 uiLayout *layout,
169 PointerRNA *node_ptr,
170 StringRef text) = nullptr;
171 void (*draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color) = nullptr;
172 void (*draw_color_simple)(const bNodeSocketType *socket_type, float *r_color) = nullptr;
173
176 bContext *C,
177 uiLayout *layout) = nullptr;
179 const bNodeTreeInterfaceSocket *interface_socket,
180 bNode *node,
181 bNodeSocket *socket,
182 StringRefNull data_path) = nullptr;
184 bNodeTreeInterfaceSocket *interface_socket,
185 const bNode *node,
186 const bNodeSocket *socket) = nullptr;
187
188 /* RNA integration */
191
192 /* for standard socket types in C */
194 int subtype = 0;
195
196 /* When set, bNodeSocket->limit does not have any effect anymore. */
200
201 /* Callback to free the socket type. */
202 void (*free_self)(bNodeSocketType *stype) = nullptr;
203
204 /* Return the CPPType of this socket. */
206 /* Get the value of this socket in a generic way. */
208 /* Get geometry nodes cpp value. */
210 /* Default value for this socket type. */
212};
213
214using NodeInitExecFunction = void *(*)(bNodeExecContext * context,
215 bNode *node,
216 bNodeInstanceKey key);
217using NodeFreeExecFunction = void (*)(void *nodedata);
218using NodeExecFunction = void (*)(
219 void *data, int thread, bNode *, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out);
220using NodeGPUExecFunction = int (*)(
221 GPUMaterial *mat, bNode *node, bNodeExecData *execdata, GPUNodeStack *in, GPUNodeStack *out);
222using NodeMaterialXFunction = void (*)(void *data, bNode *node, bNodeSocket *out);
223
231
238struct bNodeType {
239 std::string idname;
242
243 std::string ui_name;
244 std::string ui_description;
247 const char *enum_name_legacy = nullptr;
248
249 float width = 0.0f, minwidth = 0.0f, maxwidth = 0.0f;
250 float height = 0.0f, minheight = 0.0f, maxheight = 0.0f;
251 short nclass = 0, flag = 0;
252
253 /* templates for static sockets */
254 bNodeSocketTemplate *inputs = nullptr, *outputs = nullptr;
255
256 std::string storagename; /* struct name for DNA */
257
258 /* Draw the option buttons on the node */
259 void (*draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr) = nullptr;
260 /* Additional parameters in the side panel */
262
263 /* Additional drawing on backdrop */
264 void (*draw_backdrop)(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y) = nullptr;
265
270 void (*labelfunc)(const bNodeTree *ntree,
271 const bNode *node,
272 char *label,
273 int label_maxncpy) = nullptr;
274
276 int (*ui_class)(const bNode *node) = nullptr;
278 std::string (*ui_description_fn)(const bNode &node) = nullptr;
279
281 void (*updatefunc)(bNodeTree *ntree, bNode *node) = nullptr;
282
289 void (*initfunc)(bNodeTree *ntree, bNode *node) = nullptr;
297 void (*freefunc)(bNode *node) = nullptr;
299 void (*copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node) = nullptr;
300
301 /* Registerable API callback versions, called in addition to C callbacks */
302 void (*initfunc_api)(const bContext *C, PointerRNA *ptr) = nullptr;
303 void (*freefunc_api)(PointerRNA *ptr) = nullptr;
304 void (*copyfunc_api)(PointerRNA *ptr, const bNode *src_node) = nullptr;
305
310 bool (*add_ui_poll)(const bContext *C) = nullptr;
311
321 bool (*poll)(const bNodeType *ntype,
322 const bNodeTree *nodetree,
323 const char **r_disabled_hint) = nullptr;
328 bool (*poll_instance)(const bNode *node,
329 const bNodeTree *nodetree,
330 const char **r_disabled_hint) = nullptr;
331
332 /* Optional handling of link insertion. Returns false if the link shouldn't be created. */
334
335 void (*free_self)(bNodeType *ntype) = nullptr;
336
337 /* **** execution callbacks **** */
341 /* gpu */
343 /* MaterialX */
345
346 /* Get an instance of this node's compositor operation. Freeing the instance is the
347 * responsibility of the caller. */
349
350 /* Build a multi-function for this node. */
352
353 /* Execute a geometry node. */
355
363
372
379
382
385
392
398
404
411
417 void (*register_operators)() = nullptr;
418
420 bool no_muting = false;
424 const char *deprecation_notice = nullptr;
425
431 bool (*can_sync_sockets)(const bContext &C, const bNodeTree &tree, const bNode &node) = nullptr;
432
433 /* RNA integration */
435
443 bool is_type(StringRef query_idname) const;
444};
445
447#define NODE_CLASS_INPUT 0
448#define NODE_CLASS_OUTPUT 1
449#define NODE_CLASS_OP_COLOR 3
450#define NODE_CLASS_OP_VECTOR 4
451#define NODE_CLASS_OP_FILTER 5
452#define NODE_CLASS_GROUP 6
453#define NODE_CLASS_CONVERTER 8
454#define NODE_CLASS_MATTE 9
455#define NODE_CLASS_DISTORT 10
456#define NODE_CLASS_PATTERN 12
457#define NODE_CLASS_TEXTURE 13
458#define NODE_CLASS_SCRIPT 32
459#define NODE_CLASS_INTERFACE 33
460#define NODE_CLASS_SHADER 40
461#define NODE_CLASS_GEOMETRY 41
462#define NODE_CLASS_ATTRIBUTE 42
463#define NODE_CLASS_LAYOUT 100
464
491
492using bNodeClassCallback = void (*)(void *calldata, int nclass, StringRefNull name);
493
495 int type = 0; /* type identifier */
496 std::string idname; /* identifier name */
497
498 /* The ID name of group nodes for this type. */
499 std::string group_idname;
500
501 std::string ui_name;
502 std::string ui_description;
503 int ui_icon = 0;
504
505 /* callbacks */
506 /* Iteration over all node classes. */
507 void (*foreach_nodeclass)(void *calldata, bNodeClassCallback func) = nullptr;
508 /* Check visibility in the node editor */
509 bool (*poll)(const bContext *C, bNodeTreeType *ntreetype) = nullptr;
510 /* Select a node tree from the context */
512 bNodeTreeType *ntreetype,
513 bNodeTree **r_ntree,
514 ID **r_id,
515 ID **r_from) = nullptr;
516
517 /* calls allowing threaded composite */
518 void (*localize)(bNodeTree *localtree, bNodeTree *ntree) = nullptr;
519 void (*local_merge)(Main *bmain, bNodeTree *localtree, bNodeTree *ntree) = nullptr;
520
521 /* Tree update. Overrides `nodetype->updatetreefunc`. */
522 void (*update)(bNodeTree *ntree) = nullptr;
523
525
526 void (*node_add_init)(bNodeTree *ntree, bNode *bnode) = nullptr;
527
528 /* Check if the socket type is valid for this tree type. */
529 bool (*valid_socket_type)(bNodeTreeType *ntreetype, bNodeSocketType *socket_type) = nullptr;
530
538
539 /* RNA integration */
541};
542
544
545/* -------------------------------------------------------------------- */
548
549bNodeTreeType *node_tree_type_find(StringRef idname);
550void node_tree_type_add(bNodeTreeType &nt);
551void node_tree_type_free_link(const bNodeTreeType &nt);
552bool node_tree_is_registered(const bNodeTree &ntree);
553
555
564void node_tree_set_type(bNodeTree &ntree);
565
567
573 Library *owner_library,
575 StringRefNull idname);
576
581
589
594
598bool node_tree_contains_tree(const bNodeTree &tree_to_search_in,
599 const bNodeTree &tree_to_search_for);
600
602
609
616bNodeTree *node_tree_localize(bNodeTree *ntree, std::optional<ID *> new_owner_id);
617
621void node_tree_blend_write(BlendWriter *writer, bNodeTree *ntree);
622
624
625/* -------------------------------------------------------------------- */
628
629bNodeType *node_type_find(StringRef idname);
631void node_register_type(bNodeType &ntype);
632void node_unregister_type(bNodeType &ntype);
633void node_register_alias(bNodeType &nt, StringRef alias);
634
636
637bNodeSocketType *node_socket_type_find(StringRef idname);
638bNodeSocketType *node_socket_type_find_static(int type, int subtype = 0);
639void node_register_socket_type(bNodeSocketType &stype);
640void node_unregister_socket_type(bNodeSocketType &stype);
641bool node_socket_is_registered(const bNodeSocket &sock);
642StringRefNull node_socket_type_label(const bNodeSocketType &stype);
643
644/* The optional dimensions argument can be provided for types that support multiple possible
645 * dimensions like Vector. It is expected to be in the range [2, 4] and if not provided, 3 will be
646 * assumed. */
647std::optional<StringRefNull> node_static_socket_type(int type,
648 int subtype,
649 std::optional<int> dimensions = std::nullopt);
650std::optional<StringRefNull> node_static_socket_interface_type_new(
651 int type, int subtype, std::optional<int> dimensions = std::nullopt);
652
653std::optional<StringRefNull> node_static_socket_label(int type, int subtype);
654
656
658const bNodeSocket *node_find_socket(const bNode &node,
659 eNodeSocketInOut in_out,
660 StringRef identifier);
662 bNode &node,
663 eNodeSocketInOut in_out,
664 StringRefNull idname,
665 StringRefNull identifier,
668 bNode &node,
669 eNodeSocketInOut in_out,
670 int type,
671 int subtype,
672 StringRefNull identifier,
674void node_remove_socket(bNodeTree &ntree, bNode &node, bNodeSocket &sock);
675
677 bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype);
678
680 bNodeTree &ntree,
681 StringRef idname,
682 std::optional<int> unique_identifier = std::nullopt);
683bNode *node_add_static_node(const bContext *C, bNodeTree &ntree, int type);
684
688void node_unique_name(bNodeTree &ntree, bNode &node);
693void node_unique_id(bNodeTree &ntree, bNode &node);
694
699 Main *bmain, bNodeTree &ntree, bNode &node, bool do_id_user, bool remove_animation = true);
700
701float2 node_dimensions_get(const bNode &node);
702void node_tag_update_id(bNode &node);
703void node_internal_links(bNode &node, bNodeLink **r_links, int *r_len);
704
709 bNodeTree &ntree, bNode &fromnode, bNodeSocket &fromsock, bNode &tonode, bNodeSocket &tosock);
710void node_remove_link(bNodeTree *ntree, bNodeLink &link);
712
713bool node_link_is_hidden(const bNodeLink &link);
714
715void node_attach_node(bNodeTree &ntree, bNode &node, bNode &parent);
716void node_detach_node(bNodeTree &ntree, bNode &node);
717
723
729bNode &node_find_node(bNodeTree &ntree, bNodeSocket &socket);
730const bNode &node_find_node(const bNodeTree &ntree, const bNodeSocket &socket);
731
736
739 StringRef identifier);
740
741bool node_is_parent_and_child(const bNode &parent, const bNode &child);
742
743int node_count_socket_links(const bNodeTree &ntree, const bNodeSocket &sock);
744
749bool node_set_selected(bNode &node, bool select);
753void node_set_active(bNodeTree &ntree, bNode &node);
755void node_clear_active(bNodeTree &ntree);
760
761int node_socket_link_limit(const bNodeSocket &sock);
762
768
770 const bNodeTree *ntree,
771 const bNode *node);
772
774
775/* -------------------------------------------------------------------- */
778
779bool node_group_poll(const bNodeTree *nodetree,
780 const bNodeTree *grouptree,
781 const char **r_disabled_hint);
782
783void node_type_base_custom(bNodeType &ntype,
784 StringRefNull idname,
786 StringRefNull enum_name,
787 short nclass);
788
794void node_type_storage(bNodeType &ntype,
795 std::optional<StringRefNull> storagename,
796 void (*freefunc)(bNode *node),
797 void (*copyfunc)(bNodeTree *dest_ntree,
798 bNode *dest_node,
799 const bNode *src_node));
800
802
803/* -------------------------------------------------------------------- */
808
809#define NODE_UNDEFINED -2 /* node type is not registered */
810#define NODE_CUSTOM -1 /* for dynamically registered custom types */
811#define NODE_GROUP 2
812#define NODE_FRAME 5
813#define NODE_REROUTE 6
814#define NODE_GROUP_INPUT 7
815#define NODE_GROUP_OUTPUT 8
816#define NODE_CUSTOM_GROUP 9
817
818#define NODE_LEGACY_TYPE_GENERATION_START 5000
819
821
822/* -------------------------------------------------------------------- */
857
858/* should be an opaque type, only for internal use by BKE_node_tree_iter_*** */
867};
868
869void node_tree_iterator_init(NodeTreeIterStore *ntreeiter, Main *bmain);
870bool node_tree_iterator_step(NodeTreeIterStore *ntreeiter, bNodeTree **r_nodetree, ID **r_id);
872#define FOREACH_NODETREE_BEGIN(bmain, _nodetree, _id) \
873 { \
874 blender::bke::NodeTreeIterStore _nstore; \
875 bNodeTree *_nodetree; \
876 ID *_id; \
877 /* avoid compiler warning about unused variables */ \
878 blender::bke::node_tree_iterator_init(&_nstore, bmain); \
879 while (blender::bke::node_tree_iterator_step(&_nstore, &_nodetree, &_id) == true) { \
880 if (_nodetree) {
882#define FOREACH_NODETREE_END \
883 } \
884 } \
885 } \
886 ((void)0)
887
889
890/* -------------------------------------------------------------------- */
893
894void node_tree_remove_layer_n(bNodeTree *ntree, Scene *scene, int layer_index);
895
896void node_system_init();
897void node_system_exit();
898
900 ID *owner_id,
902 StringRefNull idname);
903
904/* Copy/free functions, need to manage ID users. */
905
910void node_tree_free_tree(bNodeTree &ntree);
911
912bNodeTree *node_tree_copy_tree_ex(const bNodeTree &ntree, Main *bmain, bool do_id_user);
913bNodeTree *node_tree_copy_tree(Main *bmain, const bNodeTree &ntree);
914
915void node_tree_free_local_node(bNodeTree &ntree, bNode &node);
916
918
921
922void node_tree_node_flag_set(bNodeTree &ntree, int flag, bool enable);
923
929void node_tree_local_merge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree);
930
934void node_tree_blend_read_data(BlendDataReader *reader, ID *owner_id, bNodeTree *ntree);
935
936bool node_is_static_socket_type(const bNodeSocketType &stype);
937
939
940void node_remove_socket_ex(bNodeTree &ntree, bNode &node, bNodeSocket &sock, bool do_id_user);
941
943 bNode &node,
944 bNodeSocket &sock,
945 StringRefNull idname);
946
950void node_unlink_node(bNodeTree &ntree, bNode &node);
951
952void node_unlink_attached(bNodeTree *ntree, const bNode *parent);
953
959void node_rebuild_id_vector(bNodeTree &node_tree);
960
969 const bNode &node_src,
970 int flag,
971 std::optional<StringRefNull> dst_unique_name,
972 std::optional<int> dst_unique_identifier,
974 bool allow_duplicate_names = false);
975
985 bNodeSocket &src,
986 bNodeSocket &dst);
987
993void node_free_node(bNodeTree *tree, bNode &node);
994
1002
1006void node_link_set_mute(bNodeTree &ntree, bNodeLink &link, const bool muted);
1007
1008bool node_link_is_selected(const bNodeLink &link);
1009
1010void node_internal_relink(bNodeTree &ntree, bNode &node);
1011
1012void node_position_relative(bNode &from_node,
1013 const bNode &to_node,
1014 const bNodeSocket *from_sock,
1015 const bNodeSocket &to_sock);
1016
1017void node_position_propagate(bNode &node);
1018
1023
1031void node_chain_iterator(const bNodeTree *ntree,
1032 const bNode *node_start,
1033 bool (*callback)(bNode *, bNode *, void *, const bool),
1034 void *userdata,
1035 bool reversed);
1036
1052 bNode *node_start,
1053 bool (*callback)(bNode *, bNode *, void *),
1054 void *userdata,
1055 int recursion_lvl);
1056
1063void node_parents_iterator(bNode *node, bool (*callback)(bNode *, void *), void *userdata);
1064
1069bool node_is_dangling_reroute(const bNodeTree &ntree, const bNode &node);
1070
1072
1078bool node_supports_active_flag(const bNode &node, int sub_activity);
1079
1080void node_set_socket_availability(bNodeTree &ntree, bNodeSocket &sock, bool is_available);
1081
1086bool node_declaration_ensure(bNodeTree &ntree, bNode &node);
1087
1093
1099
1100/* Node Previews */
1101bool node_preview_used(const bNode &node);
1104 ImBuf *ibuf = nullptr;
1106 bNodePreview() = default;
1107 bNodePreview(const bNodePreview &other);
1108 bNodePreview(bNodePreview &&other);
1109 ~bNodePreview();
1110};
1111
1113 bNodeInstanceKey key,
1114 int xsize,
1115 int ysize,
1116 bool create);
1117
1118void node_preview_init_tree(bNodeTree *ntree, int xsize, int ysize);
1119
1121
1122void node_preview_merge_tree(bNodeTree *to_ntree, bNodeTree *from_ntree, bool remove_old);
1123
1124/* -------------------------------------------------------------------- */
1127
1128std::string node_label(const bNodeTree &ntree, const bNode &node);
1129
1134
1139std::optional<StringRefNull> node_socket_short_label(const bNodeSocket &sock);
1140
1144const char *node_socket_translation_context(const bNodeSocket &sock);
1145
1146NodeColorTag node_color_tag(const bNode &node);
1147
1151void node_type_base(bNodeType &ntype,
1152 std::string idname,
1153 std::optional<int16_t> legacy_type = std::nullopt);
1154
1158
1159void node_type_size(bNodeType &ntype, int width, int minwidth, int maxwidth);
1166};
1167
1168void node_type_size_preset(bNodeType &ntype, eNodeSizePreset size);
1169
1170/* -------------------------------------------------------------------- */
1173
1174bool node_is_connected_to_output(const bNodeTree &ntree, const bNode &node);
1175
1177
1179
1181
1182extern bNodeTreeType NodeTreeTypeUndefined;
1183extern bNodeType NodeTypeUndefined;
1184extern bNodeSocketType NodeSocketTypeUndefined;
1185
1186std::optional<eCustomDataType> socket_type_to_custom_data_type(eNodeSocketDatatype type);
1187std::optional<eNodeSocketDatatype> custom_data_type_to_socket_type(eCustomDataType type);
1189std::optional<eNodeSocketDatatype> geo_nodes_base_cpp_type_to_socket_type(const CPPType &type);
1190std::optional<VolumeGridType> socket_type_to_grid_type(eNodeSocketDatatype type);
1191std::optional<eNodeSocketDatatype> grid_type_to_socket_type(VolumeGridType type);
1192
1198class bNodeZoneType {
1199 public:
1200 std::string input_idname;
1201 std::string output_idname;
1204 int theme_id;
1206 virtual ~bNodeZoneType() = default;
1208 virtual const int &get_corresponding_output_id(const bNode &input_bnode) const = 0;
1210 int &get_corresponding_output_id(bNode &input_bnode) const
1211 {
1212 return const_cast<int &>(
1213 this->get_corresponding_output_id(const_cast<const bNode &>(input_bnode)));
1214 }
1215
1216 const bNode *get_corresponding_input(const bNodeTree &tree, const bNode &output_bnode) const;
1217 bNode *get_corresponding_input(bNodeTree &tree, const bNode &output_bnode) const;
1218
1219 const bNode *get_corresponding_output(const bNodeTree &tree, const bNode &input_bnode) const;
1220 bNode *get_corresponding_output(bNodeTree &tree, const bNode &input_bnode) const;
1221};
1222
1223void register_node_zone_type(const bNodeZoneType &zone_type);
1224
1229const bNodeZoneType *zone_type_by_node_type(const int node_type);
1231inline bool bNodeType::is_type(const StringRef query_idname) const
1232{
1233 /* Ensure that the given idname exists to check for typos. */
1234 BLI_assert(node_type_find(query_idname) != nullptr);
1235 return this->idname == query_idname;
1236}
1237
1238} // namespace blender::bke
1239
1240#define NODE_STORAGE_FUNCS(StorageT) \
1241 [[maybe_unused]] static StorageT &node_storage(bNode &node) \
1242 { \
1243 return *static_cast<StorageT *>(node.storage); \
1244 } \
1245 [[maybe_unused]] static const StorageT &node_storage(const bNode &node) \
1246 { \
1247 return *static_cast<const StorageT *>(node.storage); \
1248 }
1249
1250constexpr int NODE_DEFAULT_MAX_WIDTH = 700;
1251constexpr int GROUP_NODE_DEFAULT_WIDTH = 140;
1253constexpr int GROUP_NODE_MIN_WIDTH = 60;
constexpr int GROUP_NODE_MIN_WIDTH
Definition BKE_node.hh:1253
constexpr int GROUP_NODE_DEFAULT_WIDTH
Definition BKE_node.hh:1251
constexpr int GROUP_NODE_MAX_WIDTH
Definition BKE_node.hh:1252
constexpr int NODE_DEFAULT_MAX_WIDTH
Definition BKE_node.hh:1250
VolumeGridType
#define BLI_assert(a)
Definition BLI_assert.h:46
eNodeSocketInOut
eNodeSocketDatatype
#define C
Definition RandGen.cpp:29
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
const bNode * get_corresponding_input(const bNodeTree &tree, const bNode &output_bnode) const
virtual const int & get_corresponding_output_id(const bNode &input_bnode) const =0
virtual ~bNodeZoneType()=default
const bNode * get_corresponding_output(const bNodeTree &tree, const bNode &input_bnode) const
KDTree_3d * tree
#define in
#define out
#define main()
#define select(A, B, C)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void node_unregister_socket_type(bNodeSocketType &stype)
Definition node.cc:2503
bNode * node_find_node_by_name(bNodeTree &ntree, StringRefNull name)
Definition node.cc:3275
bNodeSocket * node_find_enabled_input_socket(bNode &node, StringRef name)
Definition node.cc:2566
void node_position_propagate(bNode &node)
Definition node.cc:4037
void node_chain_iterator_backwards(const bNodeTree *ntree, bNode *node_start, bool(*callback)(bNode *, bNode *, void *), void *userdata, int recursion_lvl)
Definition node.cc:3421
NodeColorTag node_color_tag(const bNode &node)
Definition node.cc:5019
void node_socket_declarations_update(bNode *node)
Definition node.cc:4786
void node_tree_free_local_node(bNodeTree &ntree, bNode &node)
Definition node.cc:4372
void node_tree_set_output(bNodeTree &ntree)
Definition node.cc:4469
void(*)(blender::nodes::value_elem::InverseElemEvalParams &params) NodeInverseElemEvalFunction
Definition BKE_node.hh:141
const bNodeZoneType * zone_type_by_node_type(const int node_type)
void node_modify_socket_type_static(bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype)
Definition node.cc:2791
StringRefNull node_type_find_alias(StringRefNull alias)
Definition node.cc:2388
bNodeSocketType NodeSocketTypeUndefined
Definition node.cc:127
std::string node_label(const bNodeTree &ntree, const bNode &node)
Definition node.cc:4970
std::optional< eNodeSocketDatatype > geo_nodes_base_cpp_type_to_socket_type(const CPPType &type)
Definition node.cc:5241
void(*)(const void *socket_value, void *r_value) SocketGetCPPValueFunction
Definition BKE_node.hh:126
void(*)(blender::nodes::GatherAddNodeSearchParams &params) NodeGatherAddOperationsFunction
Definition BKE_node.hh:134
void node_tree_remove_layer_n(bNodeTree *ntree, Scene *scene, int layer_index)
Definition node.cc:5527
bool node_is_parent_and_child(const bNode &parent, const bNode &child)
Definition node.cc:3330
void node_attach_node(bNodeTree &ntree, bNode &node, bNode &parent)
Definition node.cc:3978
void node_tree_blend_read_data(BlendDataReader *reader, ID *owner_id, bNodeTree *ntree)
Definition node.cc:1810
const bNodeTreeInterfaceSocket * node_find_interface_input_by_identifier(const bNodeTree &ntree, StringRef identifier)
Definition node.cc:3306
void node_register_alias(bNodeType &nt, StringRef alias)
Definition node.cc:2452
bool node_tree_is_registered(const bNodeTree &ntree)
Definition node.cc:2369
bNodeTreeType * node_tree_type_find(StringRef idname)
Definition node.cc:2303
void node_unlink_node(bNodeTree &ntree, bNode &node)
Definition node.cc:4255
void node_tree_free_tree(bNodeTree &ntree)
Definition node.cc:4455
Span< bNodeSocketType * > node_socket_types_get()
Definition node.cc:2457
void node_tag_update_id(bNode &node)
Definition node.cc:4833
bNodeTree * node_tree_add_tree_embedded(Main *bmain, ID *owner_id, StringRefNull name, StringRefNull idname)
Definition node.cc:4098
std::optional< VolumeGridType > socket_type_to_grid_type(eNodeSocketDatatype type)
Definition node.cc:5298
bool node_is_connected_to_output(const bNodeTree &ntree, const bNode &node)
bNodeTree * node_tree_copy_tree(Main *bmain, const bNodeTree &ntree)
Definition node.cc:4114
bNodeSocket * node_find_socket(bNode &node, eNodeSocketInOut in_out, StringRef identifier)
Definition node.cc:2532
void node_remove_node(Main *bmain, bNodeTree &ntree, bNode &node, bool do_id_user, bool remove_animation=true)
Definition node.cc:4386
bool node_socket_is_registered(const bNodeSocket &sock)
Definition node.cc:2509
bool node_tree_iterator_step(NodeTreeIterStore *ntreeiter, bNodeTree **r_nodetree, ID **r_id)
Definition node.cc:5476
void node_internal_links(bNode &node, bNodeLink **r_links, int *r_len)
Definition node.cc:4838
bNode * node_add_node(const bContext *C, bNodeTree &ntree, StringRef idname, std::optional< int > unique_identifier=std::nullopt)
Definition node.cc:3477
bNode * node_get_active(bNodeTree &ntree)
Definition node.cc:4685
void node_tree_blend_write(BlendWriter *writer, bNodeTree *ntree)
Definition node.cc:1140
bool node_link_is_selected(const bNodeLink &link)
Definition node.cc:3887
void node_remove_socket(bNodeTree &ntree, bNode &node, bNodeSocket &sock)
Definition node.cc:3243
void node_update_asset_metadata(bNodeTree &node_tree)
Definition node.cc:1956
void(*)(blender::nodes::GeoNodeExecParams params) NodeGeometryExecFunction
Definition BKE_node.hh:121
bool node_group_poll(const bNodeTree *nodetree, const bNodeTree *grouptree, const char **r_disabled_hint)
void node_unique_id(bNodeTree &ntree, bNode &node)
Definition node.cc:3459
void node_type_size(bNodeType &ntype, int width, int minwidth, int maxwidth)
Definition node.cc:5384
Span< int > all_zone_output_node_types()
void(*)(blender::nodes::NodeExtraInfoParams &params) NodeExtraInfoFunction
Definition BKE_node.hh:140
void node_register_type(bNodeType &ntype)
Definition node.cc:2416
void *(*)(bNodeExecContext *context, bNode *node, bNodeInstanceKey key) NodeInitExecFunction
Definition BKE_node.hh:214
int(*)( GPUMaterial *mat, bNode *node, bNodeExecData *execdata, GPUNodeStack *in, GPUNodeStack *out) NodeGPUExecFunction
Definition BKE_node.hh:220
std::optional< StringRefNull > node_socket_short_label(const bNodeSocket &sock)
Definition node.cc:4985
void node_set_socket_availability(bNodeTree &ntree, bNodeSocket &sock, bool is_available)
Definition node.cc:4739
const char * node_socket_translation_context(const bNodeSocket &sock)
Definition node.cc:5001
void node_remove_link(bNodeTree *ntree, bNodeLink &link)
Definition node.cc:3847
SocketValueVariant(*)(const void *socket_value) SocketGetGeometryNodesCPPValueFunction
Definition BKE_node.hh:127
void node_chain_iterator(const bNodeTree *ntree, const bNode *node_start, bool(*callback)(bNode *, bNode *, void *, const bool), void *userdata, bool reversed)
Definition node.cc:3340
const bNodeSocket *(*)(const bNodeTree &tree, const bNode &node, const bNodeSocket &output_socket) NodeInternallyLinkedInputFunction
Definition BKE_node.hh:145
Span< bNodeType * > node_types_get()
Definition node.cc:2447
bool node_is_dangling_reroute(const bNodeTree &ntree, const bNode &node)
std::optional< StringRefNull > node_static_socket_interface_type_new(int type, int subtype, std::optional< int > dimensions=std::nullopt)
Definition node.cc:2995
bNode * node_get_active_texture(bNodeTree &ntree)
void node_tree_local_merge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
Definition node.cc:4629
void node_tree_set_type(bNodeTree &ntree)
Definition node.cc:2254
bool node_declaration_ensure_on_outdated_node(bNodeTree &ntree, bNode &node)
Definition node.cc:4798
void node_tree_type_add(bNodeTreeType &nt)
Definition node.cc:2340
void node_tree_update_all_new(Main &main)
Definition node.cc:4918
void(*)(blender::nodes::NodeDeclarationBuilder &builder) NodeDeclareFunction
Definition BKE_node.hh:122
void node_type_base(bNodeType &ntype, std::string idname, std::optional< int16_t > legacy_type=std::nullopt)
Definition node.cc:5099
bNodePreview * node_preview_verify(Map< bNodeInstanceKey, bNodePreview > &previews, bNodeInstanceKey key, int xsize, int ysize, bool create)
Definition node.cc:4132
void node_tree_iterator_init(NodeTreeIterStore *ntreeiter, Main *bmain)
Definition node.cc:5466
std::optional< eNodeSocketDatatype > grid_type_to_socket_type(VolumeGridType type)
Definition node.cc:5314
void node_node_foreach_id(bNode *node, LibraryForeachIDData *data)
Definition node.cc:357
bNodeTreeType NodeTreeTypeUndefined
Definition node.cc:125
bNodeTree ** node_tree_ptr_from_id(ID *id)
Definition node.cc:4543
bNodeTree * node_tree_localize(bNodeTree *ntree, std::optional< ID * > new_owner_id)
Definition node.cc:4586
void node_parents_iterator(bNode *node, bool(*callback)(bNode *, void *), void *userdata)
Definition node.cc:3443
void node_unlink_attached(bNodeTree *ntree, const bNode *parent)
Definition node.cc:4282
int node_count_socket_links(const bNodeTree &ntree, const bNodeSocket &sock)
Definition node.cc:4674
void node_internal_relink(bNodeTree &ntree, bNode &node)
Definition node.cc:3908
bNode * node_find_node_try(bNodeTree &ntree, bNodeSocket &socket)
Definition node.cc:3293
void(*)(void *data, bNode *node, bNodeSocket *out) NodeMaterialXFunction
Definition BKE_node.hh:222
const bNodeInstanceKey NODE_INSTANCE_KEY_BASE
Definition node.cc:4846
std::optional< eNodeSocketDatatype > custom_data_type_to_socket_type(eCustomDataType type)
Definition node.cc:5168
void node_system_exit()
Definition node.cc:5431
void node_free_node(bNodeTree *tree, bNode &node)
Definition node.cc:4302
void(*)(bNodeTree &tree, bNode &node, BlendDataReader &reader) NodeBlendDataReadFunction
Definition BKE_node.hh:151
void node_preview_remove_unused(bNodeTree *ntree)
Definition node.cc:4231
bool node_preview_used(const bNode &node)
Definition node.cc:4126
void(*)(void *calldata, int nclass, StringRefNull name) bNodeClassCallback
Definition BKE_node.hh:492
bNodeType NodeTypeUndefined
Definition node.cc:126
void node_tree_type_free_link(const bNodeTreeType &nt)
Definition node.cc:2363
void node_type_socket_templates(bNodeType *ntype, bNodeSocketTemplate *inputs, bNodeSocketTemplate *outputs)
Definition node.cc:5352
bNodeInstanceKey node_instance_key(bNodeInstanceKey parent_key, const bNodeTree *ntree, const bNode *node)
Definition node.cc:4867
void(*)(const bNodeTree &tree, const bNode &node, blender::nodes::NodeDeclarationBuilder &builder) NodeDeclareDynamicFunction
Definition BKE_node.hh:123
void node_register_socket_type(bNodeSocketType &stype)
Definition node.cc:2494
void node_preview_merge_tree(bNodeTree *to_ntree, bNodeTree *from_ntree, bool remove_old)
Definition node.cc:4240
void(*)(blender::nodes::GatherLinkSearchOpParams &params) NodeGatherSocketLinkOperationsFunction
Definition BKE_node.hh:130
bNodeSocket * node_find_enabled_output_socket(bNode &node, StringRef name)
Definition node.cc:2571
const CPPType * socket_type_to_geo_nodes_base_cpp_type(eNodeSocketDatatype type)
Definition node.cc:5202
bNode * node_get_active_paint_canvas(bNodeTree &ntree)
void node_position_relative(bNode &from_node, const bNode &to_node, const bNodeSocket *from_sock, const bNodeSocket &to_sock)
Definition node.cc:3995
Span< const bNodeZoneType * > all_zone_types()
bool node_set_selected(bNode &node, bool select)
Definition node.cc:4695
bNodeSocket * node_add_socket(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out, StringRefNull idname, StringRefNull identifier, StringRefNull name)
Definition node.cc:2804
bNode & node_find_node(bNodeTree &ntree, bNodeSocket &socket)
Definition node.cc:3281
bool node_tree_contains_tree(const bNodeTree &tree_to_search_in, const bNodeTree &tree_to_search_for)
Definition node.cc:4663
void node_detach_node(bNodeTree &ntree, bNode &node)
Definition node.cc:3986
void node_preview_init_tree(bNodeTree *ntree, int xsize, int ysize)
Definition node.cc:4205
void node_rebuild_id_vector(bNodeTree &node_tree)
Definition node.cc:4291
bNodeSocketType * node_socket_type_find(StringRef idname)
Definition node.cc:2462
bNode * node_add_static_node(const bContext *C, bNodeTree &ntree, int type)
Definition node.cc:3500
Span< int > all_zone_node_types()
bNodeTree * node_tree_copy_tree_ex(const bNodeTree &ntree, Main *bmain, bool do_id_user)
Definition node.cc:4106
bool node_supports_active_flag(const bNode &node, int sub_activity)
Does the given node supports the sub active flag.
bNodeLink & node_add_link(bNodeTree &ntree, bNode &fromnode, bNodeSocket &fromsock, bNode &tonode, bNodeSocket &tosock)
Definition node.cc:3810
void register_node_zone_type(const bNodeZoneType &zone_type)
bNodeSocket * node_find_enabled_socket(bNode &node, eNodeSocketInOut in_out, StringRef name)
Definition node.cc:2553
Span< int > all_zone_input_node_types()
bNodeTree * node_tree_add_tree(Main *bmain, StringRef name, StringRef idname)
Definition node.cc:4085
void(*)(blender::nodes::value_elem::ElemEvalParams &params) NodeElemEvalFunction
Definition BKE_node.hh:143
bNodeSocketType * node_socket_type_find_static(int type, int subtype=0)
Definition node.cc:2471
void node_link_set_mute(bNodeTree &ntree, bNodeLink &link, const bool muted)
Definition node.cc:3864
void(*)(blender::nodes::inverse_eval::InverseEvalParams &params) NodeInverseEvalFunction
Definition BKE_node.hh:144
StringRefNull node_socket_type_label(const bNodeSocketType &stype)
Definition node.cc:2514
Span< bNodeTreeType * > node_tree_types_get()
Definition node.cc:2374
bNodeSocket * node_add_static_socket(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out, int type, int subtype, StringRefNull identifier, StringRefNull name)
Definition node.cc:3197
void(*)(const bNodeTree &tree, const bNode &node, BlendWriter &writer) NodeBlendWriteFunction
Definition BKE_node.hh:148
void(*)(blender::nodes::NodeMultiFunctionBuilder &builder) NodeMultiFunctionBuildFunction
Definition BKE_node.hh:120
void node_remove_socket_ex(bNodeTree &ntree, bNode &node, bNodeSocket &sock, bool do_id_user)
Definition node.cc:3248
void node_unregister_type(bNodeType &ntype)
Definition node.cc:2441
void node_modify_socket_type(bNodeTree &ntree, bNode &node, bNodeSocket &sock, StringRefNull idname)
Definition node.cc:2727
bNode * node_copy_with_mapping(bNodeTree *dst_tree, const bNode &node_src, int flag, std::optional< StringRefNull > dst_unique_name, std::optional< int > dst_unique_identifier, Map< const bNodeSocket *, bNodeSocket * > &new_socket_map, bool allow_duplicate_names=false)
Definition node.cc:3553
std::optional< StringRefNull > node_static_socket_label(int type, int subtype)
Definition node.cc:3152
void(*)(void *nodedata) NodeFreeExecFunction
Definition BKE_node.hh:217
std::optional< StringRefNull > node_static_socket_type(int type, int subtype, std::optional< int > dimensions=std::nullopt)
Definition node.cc:2835
void node_system_init()
Definition node.cc:5426
void node_remove_socket_links(bNodeTree &ntree, bNodeSocket &sock)
Definition node.cc:3873
const bNodeInstanceKey NODE_INSTANCE_KEY_NONE
Definition node.cc:4847
bool node_declaration_ensure(bNodeTree &ntree, bNode &node)
Definition node.cc:4818
void node_set_active(bNodeTree &ntree, bNode &node)
Definition node.cc:4724
float2 node_dimensions_get(const bNode &node)
Definition node.cc:4827
bNodeTree * node_tree_add_in_lib(Main *bmain, Library *owner_library, StringRefNull name, StringRefNull idname)
Definition node.cc:4090
bNodeType * node_type_find(StringRef idname)
Definition node.cc:2379
blender::compositor::NodeOperation *(*)(blender::compositor::Context &context, blender::nodes::DNode node) NodeGetCompositorOperationFunction
Definition BKE_node.hh:137
void node_socket_move_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, bNodeSocket &dst)
Definition node.cc:3724
bNodeTree * node_tree_from_id(ID *id)
Definition node.cc:4568
void node_tree_update_all_users(Main *main, ID *id)
Definition node.cc:4945
int node_socket_link_limit(const bNodeSocket &sock)
Definition node.cc:4753
void node_clear_active(bNodeTree &ntree)
Definition node.cc:4717
StringRefNull node_socket_sub_type_label(int subtype)
Definition node.cc:2523
bNode * node_find_root_parent(bNode &node)
Definition node.cc:3318
StringRefNull node_socket_label(const bNodeSocket &sock)
Definition node.cc:4996
void(*)( void *data, int thread, bNode *, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) NodeExecFunction
Definition BKE_node.hh:218
void node_tree_free_embedded_tree(bNodeTree *ntree)
Definition node.cc:4462
void node_type_storage(bNodeType &ntype, std::optional< StringRefNull > storagename, void(*freefunc)(bNode *node), void(*copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node))
Definition node.cc:5414
std::optional< eCustomDataType > socket_type_to_custom_data_type(eNodeSocketDatatype type)
Definition node.cc:5144
void node_type_size_preset(bNodeType &ntype, eNodeSizePreset size)
Definition node.cc:5396
void node_unique_name(bNodeTree &ntree, bNode &node)
Definition node.cc:3453
bool node_is_static_socket_type(const bNodeSocketType &stype)
Definition node.cc:2826
bool node_link_is_hidden(const bNodeLink &link)
Definition node.cc:3882
void node_type_base_custom(bNodeType &ntype, StringRefNull idname, StringRefNull name, StringRefNull enum_name, short nclass)
Definition node.cc:5129
void node_tree_node_flag_set(bNodeTree &ntree, int flag, bool enable)
Definition node.cc:4574
VecBase< float, 2 > float2
static blender::bke::bNodeSocketTemplate outputs[]
static blender::bke::bNodeSocketTemplate inputs[]
const char * name
Definition DNA_ID.h:414
FreestyleLineStyle * linestyle
Definition BKE_node.hh:865
Compact definition of a node socket.
Definition BKE_node.hh:99
Defines a socket type.
Definition BKE_node.hh:158
SocketGetCPPValueFunction get_base_cpp_value
Definition BKE_node.hh:207
void(* draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color)
Definition BKE_node.hh:171
void(* interface_init_socket)(ID *id, const bNodeTreeInterfaceSocket *interface_socket, bNode *node, bNodeSocket *socket, StringRefNull data_path)
Definition BKE_node.hh:178
void(* free_self)(bNodeSocketType *stype)
Definition BKE_node.hh:202
void(* draw_color_simple)(const bNodeSocketType *socket_type, float *r_color)
Definition BKE_node.hh:172
void(* interface_draw)(ID *id, bNodeTreeInterfaceSocket *socket, bContext *C, uiLayout *layout)
Definition BKE_node.hh:174
void(* draw)(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, StringRef text)
Definition BKE_node.hh:166
eNodeSocketDatatype type
Definition BKE_node.hh:193
SocketGetGeometryNodesCPPValueFunction get_geometry_nodes_cpp_value
Definition BKE_node.hh:209
const SocketValueVariant * geometry_nodes_default_value
Definition BKE_node.hh:211
const blender::CPPType * base_cpp_type
Definition BKE_node.hh:205
void(* interface_from_socket)(ID *id, bNodeTreeInterfaceSocket *interface_socket, const bNode *node, const bNodeSocket *socket)
Definition BKE_node.hh:183
void(* update)(bNodeTree *ntree)
Definition BKE_node.hh:522
void(* foreach_nodeclass)(void *calldata, bNodeClassCallback func)
Definition BKE_node.hh:507
void(* node_add_init)(bNodeTree *ntree, bNode *bnode)
Definition BKE_node.hh:526
bool(* poll)(const bContext *C, bNodeTreeType *ntreetype)
Definition BKE_node.hh:509
void(* get_from_context)(const bContext *C, bNodeTreeType *ntreetype, bNodeTree **r_ntree, ID **r_id, ID **r_from)
Definition BKE_node.hh:511
void(* localize)(bNodeTree *localtree, bNodeTree *ntree)
Definition BKE_node.hh:518
void(* local_merge)(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
Definition BKE_node.hh:519
bool(* validate_link)(eNodeSocketDatatype from, eNodeSocketDatatype to)
Definition BKE_node.hh:524
bool(* valid_socket_type)(bNodeTreeType *ntreetype, bNodeSocketType *socket_type)
Definition BKE_node.hh:529
Defines a node type.
Definition BKE_node.hh:238
NodeInverseElemEvalFunction eval_inverse_elem
Definition BKE_node.hh:403
blender::nodes::NodeDeclaration * static_declaration
Definition BKE_node.hh:371
void(* freefunc_api)(PointerRNA *ptr)
Definition BKE_node.hh:303
void(* copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node)
Definition BKE_node.hh:299
NodeMaterialXFunction materialx_fn
Definition BKE_node.hh:344
NodeFreeExecFunction free_exec_fn
Definition BKE_node.hh:339
NodeInternallyLinkedInputFunction internally_linked_input
Definition BKE_node.hh:384
NodeInverseEvalFunction eval_inverse
Definition BKE_node.hh:410
NodeExecFunction exec_fn
Definition BKE_node.hh:340
NodeBlendWriteFunction blend_write_storage_content
Definition BKE_node.hh:390
std::string ui_description
Definition BKE_node.hh:244
bool is_type(StringRef query_idname) const
Definition BKE_node.hh:1230
NodeBlendDataReadFunction blend_data_read_storage_content
Definition BKE_node.hh:391
NodeGetCompositorOperationFunction get_compositor_operation
Definition BKE_node.hh:348
int(* ui_class)(const bNode *node)
Definition BKE_node.hh:276
std::string storagename
Definition BKE_node.hh:256
bool(* add_ui_poll)(const bContext *C)
Definition BKE_node.hh:310
void(* freefunc)(bNode *node)
Definition BKE_node.hh:297
void(* initfunc)(bNodeTree *ntree, bNode *node)
Definition BKE_node.hh:289
bool(* poll_instance)(const bNode *node, const bNodeTree *nodetree, const char **r_disabled_hint)
Definition BKE_node.hh:328
bNodeSocketTemplate * inputs
Definition BKE_node.hh:254
void(* labelfunc)(const bNodeTree *ntree, const bNode *node, char *label, int label_maxncpy)
Definition BKE_node.hh:270
NodeGPUExecFunction gpu_fn
Definition BKE_node.hh:342
NodeElemEvalFunction eval_elem
Definition BKE_node.hh:397
void(* draw_backdrop)(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y)
Definition BKE_node.hh:264
void(* draw_buttons_ex)(uiLayout *, bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:261
std::string(* ui_description_fn)(const bNode &node)
Definition BKE_node.hh:278
NodeMultiFunctionBuildFunction build_multi_function
Definition BKE_node.hh:351
NodeExtraInfoFunction get_extra_info
Definition BKE_node.hh:381
NodeGeometryExecFunction geometry_node_execute
Definition BKE_node.hh:354
const char * deprecation_notice
Definition BKE_node.hh:424
bNodeSocketTemplate * outputs
Definition BKE_node.hh:254
const char * enum_name_legacy
Definition BKE_node.hh:247
bool(* can_sync_sockets)(const bContext &C, const bNodeTree &tree, const bNode &node)
Definition BKE_node.hh:431
void(* draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:259
bool(* insert_link)(NodeInsertLinkParams &params)
Definition BKE_node.hh:333
bool(* poll)(const bNodeType *ntype, const bNodeTree *nodetree, const char **r_disabled_hint)
Definition BKE_node.hh:321
NodeGatherSocketLinkOperationsFunction gather_link_search_ops
Definition BKE_node.hh:378
void(* copyfunc_api)(PointerRNA *ptr, const bNode *src_node)
Definition BKE_node.hh:304
NodeDeclareFunction declare
Definition BKE_node.hh:362
void(* register_operators)()
Definition BKE_node.hh:417
void(* free_self)(bNodeType *ntype)
Definition BKE_node.hh:335
NodeInitExecFunction init_exec_fn
Definition BKE_node.hh:338
void(* updatefunc)(bNodeTree *ntree, bNode *node)
Definition BKE_node.hh:281
bool ignore_inferred_input_socket_visibility
Definition BKE_node.hh:422
void(* initfunc_api)(const bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:302
PointerRNA * ptr
Definition wm_files.cc:4238
uint8_t flag
Definition wm_window.cc:145