Blender V4.5
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
16#include "BKE_volume_enums.hh"
17
18/* for FOREACH_NODETREE_BEGIN */
19#include "DNA_node_types.h"
20
21#include "RNA_types.hh"
22
23#include "BLI_map.hh"
24#include "BLI_string_ref.hh"
25
26/* not very important, but the stack solver likes to know a maximum */
27#define MAX_SOCKET 512
28
29struct BlendDataReader;
30struct BlendWriter;
32struct GPUMaterial;
33struct GPUNodeStack;
34struct ID;
35struct ImBuf;
37struct Light;
38struct Main;
39struct Material;
40struct PointerRNA;
41struct Scene;
42struct SpaceNode;
43struct Tex;
44struct World;
45struct bContext;
46struct bNode;
47struct bNodeExecContext;
48struct bNodeTreeExec;
49struct bNodeExecData;
50struct bNodeLink;
51struct bNodeSocket;
52struct bNodeStack;
53struct bNodeTree;
54struct bNodeTreeExec;
55struct uiLayout;
56
57namespace blender {
58class CPPType;
59namespace nodes {
60class DNode;
61class NodeMultiFunctionBuilder;
62class GeoNodeExecParams;
63class NodeDeclaration;
64class NodeDeclarationBuilder;
65class GatherAddNodeSearchParams;
66class GatherLinkSearchOpParams;
67struct NodeExtraInfoParams;
68namespace value_elem {
70class ElemEvalParams;
71} // namespace value_elem
72namespace inverse_eval {
74} // namespace inverse_eval
75} // namespace nodes
76namespace compositor {
77class Context;
78class NodeOperation;
79} // namespace compositor
80} // namespace blender
81
82namespace blender::bke {
83
84/* -------------------------------------------------------------------- */
87
99 int type;
100 char name[64]; /* MAX_NAME */
101 float val1, val2, val3, val4; /* default alloc value for inputs */
102 float min, max;
103 int subtype; /* would use PropertySubType but this is a bad level include to use RNA */
104 int flag;
105
106 /* after this line is used internal only */
107 bNodeSocket *sock; /* used to hold verified socket */
108 char identifier[64]; /* generated from name */
109};
110
111/* Use `void *` for callbacks that require C++. This is rather ugly, but works well for now. This
112 * would not be necessary if we would use bNodeSocketType and bNodeType only in C++ code.
113 * However, achieving this requires quite a few changes currently. */
118 const bNode &node,
120using SocketGetCPPValueFunction = void (*)(const void *socket_value, void *r_value);
121using SocketGetGeometryNodesCPPValueFunction = void (*)(const void *socket_value, void *r_value);
122
123/* Adds socket link operations that are specific to this node type. */
126
127/* Adds node add menu operations that are specific to this node type. */
129 void (*)(blender::nodes::GatherAddNodeSearchParams &params);
130
140 const bNode &node,
141 const bNodeSocket &output_socket);
142using NodeBlendWriteFunction = void (*)(const bNodeTree &tree,
143 const bNode &node,
144 BlendWriter &writer);
146
154 std::string idname;
156 std::string label;
158 std::string subtype_label;
159
160 void (*draw)(bContext *C,
161 uiLayout *layout,
163 PointerRNA *node_ptr,
164 StringRefNull text) = nullptr;
165 void (*draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color) = nullptr;
166 void (*draw_color_simple)(const bNodeSocketType *socket_type, float *r_color) = nullptr;
167
170 bContext *C,
171 uiLayout *layout) = nullptr;
173 const bNodeTreeInterfaceSocket *interface_socket,
174 bNode *node,
175 bNodeSocket *socket,
176 StringRefNull data_path) = nullptr;
178 bNodeTreeInterfaceSocket *interface_socket,
179 const bNode *node,
180 const bNodeSocket *socket) = nullptr;
181
182 /* RNA integration */
185
186 /* for standard socket types in C */
188 int subtype = 0;
189
190 /* When set, bNodeSocket->limit does not have any effect anymore. */
194
195 /* Callback to free the socket type. */
196 void (*free_self)(bNodeSocketType *stype) = nullptr;
197
198 /* Return the CPPType of this socket. */
200 /* Get the value of this socket in a generic way. */
202 /* Get geometry nodes cpp type. */
204 /* Get geometry nodes cpp value. */
206 /* Default value for this socket type. */
207 const void *geometry_nodes_default_cpp_value = nullptr;
208};
209
210using NodeInitExecFunction = void *(*)(bNodeExecContext *context,
211 bNode *node,
212 bNodeInstanceKey key);
213using NodeFreeExecFunction = void (*)(void *nodedata);
214using NodeExecFunction = void (*)(
215 void *data, int thread, bNode *, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out);
216using NodeGPUExecFunction = int (*)(
217 GPUMaterial *mat, bNode *node, bNodeExecData *execdata, GPUNodeStack *in, GPUNodeStack *out);
218using NodeMaterialXFunction = void (*)(void *data, bNode *node, bNodeSocket *out);
219
226struct bNodeType {
227 std::string idname;
230
231 std::string ui_name;
232 std::string ui_description;
235 const char *enum_name_legacy = nullptr;
236
237 float width = 0.0f, minwidth = 0.0f, maxwidth = 0.0f;
238 float height = 0.0f, minheight = 0.0f, maxheight = 0.0f;
239 short nclass = 0, flag = 0;
240
241 /* templates for static sockets */
242 bNodeSocketTemplate *inputs = nullptr, *outputs = nullptr;
243
244 std::string storagename; /* struct name for DNA */
245
246 /* Draw the option buttons on the node */
247 void (*draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr) = nullptr;
248 /* Additional parameters in the side panel */
250
251 /* Additional drawing on backdrop */
252 void (*draw_backdrop)(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y) = nullptr;
253
258 void (*labelfunc)(const bNodeTree *ntree,
259 const bNode *node,
260 char *label,
261 int label_maxncpy) = nullptr;
262
264 int (*ui_class)(const bNode *node) = nullptr;
266 std::string (*ui_description_fn)(const bNode &node) = nullptr;
267
269 void (*updatefunc)(bNodeTree *ntree, bNode *node) = nullptr;
270
277 void (*initfunc)(bNodeTree *ntree, bNode *node) = nullptr;
285 void (*freefunc)(bNode *node) = nullptr;
287 void (*copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node) = nullptr;
288
289 /* Registerable API callback versions, called in addition to C callbacks */
290 void (*initfunc_api)(const bContext *C, PointerRNA *ptr) = nullptr;
291 void (*freefunc_api)(PointerRNA *ptr) = nullptr;
292 void (*copyfunc_api)(PointerRNA *ptr, const bNode *src_node) = nullptr;
293
298 bool (*add_ui_poll)(const bContext *C) = nullptr;
299
309 bool (*poll)(const bNodeType *ntype,
310 const bNodeTree *nodetree,
311 const char **r_disabled_hint) = nullptr;
316 bool (*poll_instance)(const bNode *node,
317 const bNodeTree *nodetree,
318 const char **r_disabled_hint) = nullptr;
319
320 /* Optional handling of link insertion. Returns false if the link shouldn't be created. */
321 bool (*insert_link)(bNodeTree *ntree, bNode *node, bNodeLink *link) = nullptr;
322
323 void (*free_self)(bNodeType *ntype) = nullptr;
324
325 /* **** execution callbacks **** */
329 /* gpu */
331 /* MaterialX */
333
334 /* Get an instance of this node's compositor operation. Freeing the instance is the
335 * responsibility of the caller. */
337
338 /* A message to display in the node header for unsupported compositor nodes. The message
339 * is assumed to be static and thus require no memory handling. This field is to be removed when
340 * all nodes are supported. */
341 const char *compositor_unsupported_message = nullptr;
342
343 /* Build a multi-function for this node. */
345
346 /* Execute a geometry node. */
348
356
365
372
375
378
385
391
397
404
410 void (*register_operators)() = nullptr;
411
413 bool no_muting = false;
417 const char *deprecation_notice = nullptr;
418
419 /* RNA integration */
421
429 bool is_type(StringRef query_idname) const;
430};
431
433#define NODE_CLASS_INPUT 0
434#define NODE_CLASS_OUTPUT 1
435#define NODE_CLASS_OP_COLOR 3
436#define NODE_CLASS_OP_VECTOR 4
437#define NODE_CLASS_OP_FILTER 5
438#define NODE_CLASS_GROUP 6
439#define NODE_CLASS_CONVERTER 8
440#define NODE_CLASS_MATTE 9
441#define NODE_CLASS_DISTORT 10
442#define NODE_CLASS_PATTERN 12
443#define NODE_CLASS_TEXTURE 13
444#define NODE_CLASS_SCRIPT 32
445#define NODE_CLASS_INTERFACE 33
446#define NODE_CLASS_SHADER 40
447#define NODE_CLASS_GEOMETRY 41
448#define NODE_CLASS_ATTRIBUTE 42
449#define NODE_CLASS_LAYOUT 100
450
477
478using bNodeClassCallback = void (*)(void *calldata, int nclass, StringRefNull name);
479
481 int type = 0; /* type identifier */
482 std::string idname; /* identifier name */
483
484 /* The ID name of group nodes for this type. */
485 std::string group_idname;
486
487 std::string ui_name;
488 std::string ui_description;
489 int ui_icon = 0;
490
491 /* callbacks */
492 /* Iteration over all node classes. */
493 void (*foreach_nodeclass)(void *calldata, bNodeClassCallback func) = nullptr;
494 /* Check visibility in the node editor */
495 bool (*poll)(const bContext *C, bNodeTreeType *ntreetype) = nullptr;
496 /* Select a node tree from the context */
498 bNodeTreeType *ntreetype,
499 bNodeTree **r_ntree,
500 ID **r_id,
501 ID **r_from) = nullptr;
502
503 /* calls allowing threaded composite */
504 void (*localize)(bNodeTree *localtree, bNodeTree *ntree) = nullptr;
505 void (*local_merge)(Main *bmain, bNodeTree *localtree, bNodeTree *ntree) = nullptr;
506
507 /* Tree update. Overrides `nodetype->updatetreefunc`. */
508 void (*update)(bNodeTree *ntree) = nullptr;
509
511
512 void (*node_add_init)(bNodeTree *ntree, bNode *bnode) = nullptr;
513
514 /* Check if the socket type is valid for this tree type. */
515 bool (*valid_socket_type)(bNodeTreeType *ntreetype, bNodeSocketType *socket_type) = nullptr;
516
524
525 /* RNA integration */
527};
528
530
531/* -------------------------------------------------------------------- */
534
535bNodeTreeType *node_tree_type_find(StringRef idname);
536void node_tree_type_add(bNodeTreeType &nt);
537void node_tree_type_free_link(const bNodeTreeType &nt);
538bool node_tree_is_registered(const bNodeTree &ntree);
539
541
550void node_tree_set_type(bNodeTree &ntree);
551
553
559 Library *owner_library,
560 StringRefNull name,
561 StringRefNull idname);
562
567
575
580
582
586bool node_tree_contains_tree(const bNodeTree &tree_to_search_in,
587 const bNodeTree &tree_to_search_for);
588
590
597
604bNodeTree *node_tree_localize(bNodeTree *ntree, std::optional<ID *> new_owner_id);
605
609void node_tree_blend_write(BlendWriter *writer, bNodeTree *ntree);
610
612
613/* -------------------------------------------------------------------- */
616
617bNodeType *node_type_find(StringRef idname);
619void node_register_type(bNodeType &ntype);
620void node_unregister_type(bNodeType &ntype);
621void node_register_alias(bNodeType &nt, StringRef alias);
622
624
625bNodeSocketType *node_socket_type_find(StringRef idname);
626bNodeSocketType *node_socket_type_find_static(int type, int subtype = 0);
627void node_register_socket_type(bNodeSocketType &stype);
628void node_unregister_socket_type(bNodeSocketType &stype);
629bool node_socket_is_registered(const bNodeSocket &sock);
630StringRefNull node_socket_type_label(const bNodeSocketType &stype);
631
632/* The optional dimensions argument can be provided for types that support multiple possible
633 * dimensions like Vector. It is expected to be in the range [2, 4] and if not provided, 3 will be
634 * assumed. */
635std::optional<StringRefNull> node_static_socket_type(int type,
636 int subtype,
637 std::optional<int> dimensions = std::nullopt);
638std::optional<StringRefNull> node_static_socket_interface_type_new(
639 int type, int subtype, std::optional<int> dimensions = std::nullopt);
640
641std::optional<StringRefNull> node_static_socket_label(int type, int subtype);
642
644
646const bNodeSocket *node_find_socket(const bNode &node,
647 eNodeSocketInOut in_out,
648 StringRef identifier);
650 bNode &node,
651 eNodeSocketInOut in_out,
652 StringRefNull idname,
653 StringRefNull identifier,
654 StringRefNull name);
656 bNode &node,
657 eNodeSocketInOut in_out,
658 int type,
659 int subtype,
660 StringRefNull identifier,
661 StringRefNull name);
662void node_remove_socket(bNodeTree &ntree, bNode &node, bNodeSocket &sock);
663
665 bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype);
666
667bNode *node_add_node(const bContext *C, bNodeTree &ntree, StringRef idname);
668bNode *node_add_static_node(const bContext *C, bNodeTree &ntree, int type);
669
673void node_unique_name(bNodeTree &ntree, bNode &node);
678void node_unique_id(bNodeTree &ntree, bNode &node);
679
684 Main *bmain, bNodeTree &ntree, bNode &node, bool do_id_user, bool remove_animation = true);
685
686float2 node_dimensions_get(const bNode &node);
687void node_tag_update_id(bNode &node);
688void node_internal_links(bNode &node, bNodeLink **r_links, int *r_len);
689
694 bNodeTree &ntree, bNode &fromnode, bNodeSocket &fromsock, bNode &tonode, bNodeSocket &tosock);
695void node_remove_link(bNodeTree *ntree, bNodeLink &link);
697
698bool node_link_is_hidden(const bNodeLink &link);
699
700void node_attach_node(bNodeTree &ntree, bNode &node, bNode &parent);
701void node_detach_node(bNodeTree &ntree, bNode &node);
702
708
714bNode &node_find_node(bNodeTree &ntree, bNodeSocket &socket);
715const bNode &node_find_node(const bNodeTree &ntree, const bNodeSocket &socket);
716
721
724 StringRef identifier);
725
726bool node_is_parent_and_child(const bNode &parent, const bNode &child);
727
728int node_count_socket_links(const bNodeTree &ntree, const bNodeSocket &sock);
729
734bool node_set_selected(bNode &node, bool select);
738void node_set_active(bNodeTree &ntree, bNode &node);
740void node_clear_active(bNodeTree &ntree);
745
746int node_socket_link_limit(const bNodeSocket &sock);
747
753
755 const bNodeTree *ntree,
756 const bNode *node);
757
759
760/* -------------------------------------------------------------------- */
763
764bool node_group_poll(const bNodeTree *nodetree,
765 const bNodeTree *grouptree,
766 const char **r_disabled_hint);
767
768void node_type_base_custom(bNodeType &ntype,
769 StringRefNull idname,
770 StringRefNull name,
771 StringRefNull enum_name,
772 short nclass);
773
779void node_type_storage(bNodeType &ntype,
780 std::optional<StringRefNull> storagename,
781 void (*freefunc)(bNode *node),
782 void (*copyfunc)(bNodeTree *dest_ntree,
783 bNode *dest_node,
784 const bNode *src_node));
785
787
788/* -------------------------------------------------------------------- */
793
794#define NODE_UNDEFINED -2 /* node type is not registered */
795#define NODE_CUSTOM -1 /* for dynamically registered custom types */
796#define NODE_GROUP 2
797#define NODE_FRAME 5
798#define NODE_REROUTE 6
799#define NODE_GROUP_INPUT 7
800#define NODE_GROUP_OUTPUT 8
801#define NODE_CUSTOM_GROUP 9
802
803#define NODE_LEGACY_TYPE_GENERATION_START 5000
804
806
807/* -------------------------------------------------------------------- */
842
843/* should be an opaque type, only for internal use by BKE_node_tree_iter_*** */
852};
853
854void node_tree_iterator_init(NodeTreeIterStore *ntreeiter, Main *bmain);
855bool node_tree_iterator_step(NodeTreeIterStore *ntreeiter, bNodeTree **r_nodetree, ID **r_id);
857#define FOREACH_NODETREE_BEGIN(bmain, _nodetree, _id) \
858 { \
859 blender::bke::NodeTreeIterStore _nstore; \
860 bNodeTree *_nodetree; \
861 ID *_id; \
862 /* avoid compiler warning about unused variables */ \
863 blender::bke::node_tree_iterator_init(&_nstore, bmain); \
864 while (blender::bke::node_tree_iterator_step(&_nstore, &_nodetree, &_id) == true) { \
865 if (_nodetree) {
867#define FOREACH_NODETREE_END \
868 } \
869 } \
870 } \
871 ((void)0)
872
874
875/* -------------------------------------------------------------------- */
878
879void node_tree_remove_layer_n(bNodeTree *ntree, Scene *scene, int layer_index);
880
881void node_system_init();
882void node_system_exit();
883
885 ID *owner_id,
886 StringRefNull name,
887 StringRefNull idname);
888
889/* Copy/free functions, need to manage ID users. */
890
895void node_tree_free_tree(bNodeTree &ntree);
896
897bNodeTree *node_tree_copy_tree_ex(const bNodeTree &ntree, Main *bmain, bool do_id_user);
898bNodeTree *node_tree_copy_tree(Main *bmain, const bNodeTree &ntree);
899
900void node_tree_free_local_node(bNodeTree &ntree, bNode &node);
901
903
906
907void node_tree_node_flag_set(bNodeTree &ntree, int flag, bool enable);
908
914void node_tree_local_merge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree);
915
919void node_tree_blend_read_data(BlendDataReader *reader, ID *owner_id, bNodeTree *ntree);
920
921bool node_is_static_socket_type(const bNodeSocketType &stype);
922
924
925void node_remove_socket_ex(bNodeTree &ntree, bNode &node, bNodeSocket &sock, bool do_id_user);
926
928 bNode &node,
929 bNodeSocket &sock,
930 StringRefNull idname);
931
935void node_unlink_node(bNodeTree &ntree, bNode &node);
936
942void node_rebuild_id_vector(bNodeTree &node_tree);
943
951 const bNode &node_src,
952 int flag,
953 bool use_unique,
955
956bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, int flag, bool use_unique);
957
967 bNodeSocket &src,
968 bNodeSocket &dst);
969
975void node_free_node(bNodeTree *tree, bNode &node);
976
984
988void node_link_set_mute(bNodeTree &ntree, bNodeLink &link, const bool muted);
989
990bool node_link_is_selected(const bNodeLink &link);
991
992void node_internal_relink(bNodeTree &ntree, bNode &node);
993
994void node_position_relative(bNode &from_node,
995 const bNode &to_node,
996 const bNodeSocket *from_sock,
997 const bNodeSocket &to_sock);
998
1000
1005
1013void node_chain_iterator(const bNodeTree *ntree,
1014 const bNode *node_start,
1015 bool (*callback)(bNode *, bNode *, void *, const bool),
1016 void *userdata,
1017 bool reversed);
1018
1034 const bNode *node_start,
1035 bool (*callback)(bNode *, bNode *, void *),
1036 void *userdata,
1037 int recursion_lvl);
1038
1045void node_parents_iterator(bNode *node, bool (*callback)(bNode *, void *), void *userdata);
1046
1051bool node_is_dangling_reroute(const bNodeTree &ntree, const bNode &node);
1052
1054
1060bool node_supports_active_flag(const bNode &node, int sub_activity);
1061
1062void node_set_socket_availability(bNodeTree &ntree, bNodeSocket &sock, bool is_available);
1063
1068bool node_declaration_ensure(bNodeTree &ntree, bNode &node);
1069
1075
1081
1082/* Node Previews */
1083bool node_preview_used(const bNode &node);
1086 ImBuf *ibuf = nullptr;
1088 bNodePreview() = default;
1089 bNodePreview(const bNodePreview &other);
1090 bNodePreview(bNodePreview &&other);
1091 ~bNodePreview();
1092};
1093
1095 bNodeInstanceKey key,
1096 int xsize,
1097 int ysize,
1098 bool create);
1099
1100void node_preview_init_tree(bNodeTree *ntree, int xsize, int ysize);
1101
1103
1104void node_preview_merge_tree(bNodeTree *to_ntree, bNodeTree *from_ntree, bool remove_old);
1105
1106/* -------------------------------------------------------------------- */
1109
1110std::string node_label(const bNodeTree &ntree, const bNode &node);
1111
1116
1121std::optional<StringRefNull> node_socket_short_label(const bNodeSocket &sock);
1122
1126void node_type_base(bNodeType &ntype,
1127 std::string idname,
1128 std::optional<int16_t> legacy_type = std::nullopt);
1129
1133
1134void node_type_size(bNodeType &ntype, int width, int minwidth, int maxwidth);
1141};
1142
1143void node_type_size_preset(bNodeType &ntype, eNodeSizePreset size);
1144
1145/* -------------------------------------------------------------------- */
1148
1149bool node_is_connected_to_output(const bNodeTree &ntree, const bNode &node);
1150
1152
1154
1156
1157extern bNodeTreeType NodeTreeTypeUndefined;
1158extern bNodeType NodeTypeUndefined;
1159extern bNodeSocketType NodeSocketTypeUndefined;
1160
1161std::optional<eCustomDataType> socket_type_to_custom_data_type(eNodeSocketDatatype type);
1162std::optional<eNodeSocketDatatype> custom_data_type_to_socket_type(eCustomDataType type);
1164std::optional<eNodeSocketDatatype> geo_nodes_base_cpp_type_to_socket_type(const CPPType &type);
1165std::optional<VolumeGridType> socket_type_to_grid_type(eNodeSocketDatatype type);
1166std::optional<eNodeSocketDatatype> grid_type_to_socket_type(VolumeGridType type);
1167
1173class bNodeZoneType {
1174 public:
1175 std::string input_idname;
1176 std::string output_idname;
1179 int theme_id;
1181 virtual ~bNodeZoneType() = default;
1183 virtual const int &get_corresponding_output_id(const bNode &input_bnode) const = 0;
1185 int &get_corresponding_output_id(bNode &input_bnode) const
1186 {
1187 return const_cast<int &>(
1188 this->get_corresponding_output_id(const_cast<const bNode &>(input_bnode)));
1189 }
1190
1191 const bNode *get_corresponding_input(const bNodeTree &tree, const bNode &output_bnode) const;
1192 bNode *get_corresponding_input(bNodeTree &tree, const bNode &output_bnode) const;
1193
1194 const bNode *get_corresponding_output(const bNodeTree &tree, const bNode &input_bnode) const;
1195 bNode *get_corresponding_output(bNodeTree &tree, const bNode &input_bnode) const;
1196};
1197
1198void register_node_zone_type(const bNodeZoneType &zone_type);
1199
1204const bNodeZoneType *zone_type_by_node_type(const int node_type);
1206inline bool bNodeType::is_type(const StringRef query_idname) const
1207{
1208 /* Ensure that the given idname exists to check for typos. */
1209 BLI_assert(node_type_find(query_idname) != nullptr);
1210 return this->idname == query_idname;
1211}
1212
1213} // namespace blender::bke
1214
1215#define NODE_STORAGE_FUNCS(StorageT) \
1216 [[maybe_unused]] static StorageT &node_storage(bNode &node) \
1217 { \
1218 return *static_cast<StorageT *>(node.storage); \
1219 } \
1220 [[maybe_unused]] static const StorageT &node_storage(const bNode &node) \
1221 { \
1222 return *static_cast<const StorageT *>(node.storage); \
1223 }
1224
1225constexpr int NODE_DEFAULT_MAX_WIDTH = 700;
1226constexpr int GROUP_NODE_DEFAULT_WIDTH = 140;
1228constexpr int GROUP_NODE_MIN_WIDTH = 60;
constexpr int GROUP_NODE_MIN_WIDTH
Definition BKE_node.hh:1228
constexpr int GROUP_NODE_DEFAULT_WIDTH
Definition BKE_node.hh:1226
constexpr int GROUP_NODE_MAX_WIDTH
Definition BKE_node.hh:1227
constexpr int NODE_DEFAULT_MAX_WIDTH
Definition BKE_node.hh:1225
VolumeGridType
#define BLI_assert(a)
Definition BLI_assert.h:46
float[4] Color
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 select(A, B, C)
#define out
#define main()
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void node_unregister_socket_type(bNodeSocketType &stype)
Definition node.cc:2835
void(*)(const void *socket_value, void *r_value) SocketGetGeometryNodesCPPValueFunction
Definition BKE_node.hh:121
bNode * node_find_node_by_name(bNodeTree &ntree, StringRefNull name)
Definition node.cc:3607
bNodeSocket * node_find_enabled_input_socket(bNode &node, StringRef name)
Definition node.cc:2898
void node_position_propagate(bNode &node)
Definition node.cc:4314
void node_socket_declarations_update(bNode *node)
Definition node.cc:5058
void node_tree_free_local_node(bNodeTree &ntree, bNode &node)
Definition node.cc:4635
void node_tree_set_output(bNodeTree &ntree)
Definition node.cc:4742
void(*)(blender::nodes::value_elem::InverseElemEvalParams &params) NodeInverseElemEvalFunction
Definition BKE_node.hh:135
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:3123
StringRefNull node_type_find_alias(StringRefNull alias)
Definition node.cc:2720
bNodeSocketType NodeSocketTypeUndefined
Definition node.cc:123
std::string node_label(const bNodeTree &ntree, const bNode &node)
Definition node.cc:5242
std::optional< eNodeSocketDatatype > geo_nodes_base_cpp_type_to_socket_type(const CPPType &type)
Definition node.cc:5452
void(*)(const void *socket_value, void *r_value) SocketGetCPPValueFunction
Definition BKE_node.hh:120
void(*)(blender::nodes::GatherAddNodeSearchParams &params) NodeGatherAddOperationsFunction
Definition BKE_node.hh:128
void node_tree_remove_layer_n(bNodeTree *ntree, Scene *scene, int layer_index)
Definition node.cc:5714
bool node_is_parent_and_child(const bNode &parent, const bNode &child)
Definition node.cc:3662
void node_attach_node(bNodeTree &ntree, bNode &node, bNode &parent)
Definition node.cc:4255
void node_tree_blend_read_data(BlendDataReader *reader, ID *owner_id, bNodeTree *ntree)
Definition node.cc:2146
const bNodeTreeInterfaceSocket * node_find_interface_input_by_identifier(const bNodeTree &ntree, StringRef identifier)
Definition node.cc:3638
void node_register_alias(bNodeType &nt, StringRef alias)
Definition node.cc:2784
void node_tree_free_local_tree(bNodeTree *ntree)
Definition node.cc:4731
bool node_tree_is_registered(const bNodeTree &ntree)
Definition node.cc:2701
bNodeTreeType * node_tree_type_find(StringRef idname)
Definition node.cc:2635
void node_unlink_node(bNodeTree &ntree, bNode &node)
Definition node.cc:4532
void node_tree_free_tree(bNodeTree &ntree)
Definition node.cc:4718
Span< bNodeSocketType * > node_socket_types_get()
Definition node.cc:2789
void node_tag_update_id(bNode &node)
Definition node.cc:5105
bNodeTree * node_tree_add_tree_embedded(Main *bmain, ID *owner_id, StringRefNull name, StringRefNull idname)
Definition node.cc:4375
std::optional< VolumeGridType > socket_type_to_grid_type(eNodeSocketDatatype type)
Definition node.cc:5487
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:4391
bNodeSocket * node_find_socket(bNode &node, eNodeSocketInOut in_out, StringRef identifier)
Definition node.cc:2864
void node_remove_node(Main *bmain, bNodeTree &ntree, bNode &node, bool do_id_user, bool remove_animation=true)
Definition node.cc:4649
bNode * node_add_node(const bContext *C, bNodeTree &ntree, StringRef idname)
Definition node.cc:3788
bool node_socket_is_registered(const bNodeSocket &sock)
Definition node.cc:2841
bool node_tree_iterator_step(NodeTreeIterStore *ntreeiter, bNodeTree **r_nodetree, ID **r_id)
Definition node.cc:5665
void node_internal_links(bNode &node, bNodeLink **r_links, int *r_len)
Definition node.cc:5110
bNode * node_get_active(bNodeTree &ntree)
Definition node.cc:4957
void node_tree_blend_write(BlendWriter *writer, bNodeTree *ntree)
Definition node.cc:1464
bool node_link_is_selected(const bNodeLink &link)
Definition node.cc:4164
void node_remove_socket(bNodeTree &ntree, bNode &node, bNodeSocket &sock)
Definition node.cc:3575
void node_update_asset_metadata(bNodeTree &node_tree)
Definition node.cc:2289
void(*)(blender::nodes::GeoNodeExecParams params) NodeGeometryExecFunction
Definition BKE_node.hh:115
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:3770
void node_type_size(bNodeType &ntype, int width, int minwidth, int maxwidth)
Definition node.cc:5573
bNode * node_copy_with_mapping(bNodeTree *dst_tree, const bNode &node_src, int flag, bool use_unique, Map< const bNodeSocket *, bNodeSocket * > &new_socket_map)
Definition node.cc:3857
Span< int > all_zone_output_node_types()
void(*)(blender::nodes::NodeExtraInfoParams &params) NodeExtraInfoFunction
Definition BKE_node.hh:134
bNode * node_copy(bNodeTree *dst_tree, const bNode &src_node, int flag, bool use_unique)
Definition node.cc:4070
void node_register_type(bNodeType &ntype)
Definition node.cc:2748
int(*)( GPUMaterial *mat, bNode *node, bNodeExecData *execdata, GPUNodeStack *in, GPUNodeStack *out) NodeGPUExecFunction
Definition BKE_node.hh:216
std::optional< StringRefNull > node_socket_short_label(const bNodeSocket &sock)
Definition node.cc:5257
void node_set_socket_availability(bNodeTree &ntree, bNodeSocket &sock, bool is_available)
Definition node.cc:5011
void node_remove_link(bNodeTree *ntree, bNodeLink &link)
Definition node.cc:4124
void node_chain_iterator_backwards(const bNodeTree *ntree, const bNode *node_start, bool(*callback)(bNode *, bNode *, void *), void *userdata, int recursion_lvl)
Definition node.cc:3732
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:3672
const bNodeSocket *(*)(const bNodeTree &tree, const bNode &node, const bNodeSocket &output_socket) NodeInternallyLinkedInputFunction
Definition BKE_node.hh:139
Span< bNodeType * > node_types_get()
Definition node.cc:2779
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:3327
bNode * node_get_active_texture(bNodeTree &ntree)
void node_tree_local_merge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
Definition node.cc:4901
void node_tree_set_type(bNodeTree &ntree)
Definition node.cc:2586
bool node_declaration_ensure_on_outdated_node(bNodeTree &ntree, bNode &node)
Definition node.cc:5070
void node_tree_type_add(bNodeTreeType &nt)
Definition node.cc:2672
void node_tree_update_all_new(Main &main)
Definition node.cc:5190
void(*)(blender::nodes::NodeDeclarationBuilder &builder) NodeDeclareFunction
Definition BKE_node.hh:116
void node_type_base(bNodeType &ntype, std::string idname, std::optional< int16_t > legacy_type=std::nullopt)
Definition node.cc:5310
bNodePreview * node_preview_verify(Map< bNodeInstanceKey, bNodePreview > &previews, bNodeInstanceKey key, int xsize, int ysize, bool create)
Definition node.cc:4409
void node_tree_iterator_init(NodeTreeIterStore *ntreeiter, Main *bmain)
Definition node.cc:5655
std::optional< eNodeSocketDatatype > grid_type_to_socket_type(VolumeGridType type)
Definition node.cc:5503
void node_node_foreach_id(bNode *node, LibraryForeachIDData *data)
Definition node.cc:352
bNodeTreeType NodeTreeTypeUndefined
Definition node.cc:121
bNodeTree ** node_tree_ptr_from_id(ID *id)
Definition node.cc:4816
bNodeTree * node_tree_localize(bNodeTree *ntree, std::optional< ID * > new_owner_id)
Definition node.cc:4858
void node_parents_iterator(bNode *node, bool(*callback)(bNode *, void *), void *userdata)
Definition node.cc:3754
int node_count_socket_links(const bNodeTree &ntree, const bNodeSocket &sock)
Definition node.cc:4946
void node_internal_relink(bNodeTree &ntree, bNode &node)
Definition node.cc:4185
bNode * node_find_node_try(bNodeTree &ntree, bNodeSocket &socket)
Definition node.cc:3625
void(*)(void *data, bNode *node, bNodeSocket *out) NodeMaterialXFunction
Definition BKE_node.hh:218
const bNodeInstanceKey NODE_INSTANCE_KEY_BASE
Definition node.cc:5118
std::optional< eNodeSocketDatatype > custom_data_type_to_socket_type(eCustomDataType type)
Definition node.cc:5379
void *(*)(bNodeExecContext *context, bNode *node, bNodeInstanceKey key) NodeInitExecFunction
Definition BKE_node.hh:210
void node_system_exit()
Definition node.cc:5620
void node_free_node(bNodeTree *tree, bNode &node)
Definition node.cc:4579
void(*)(bNodeTree &tree, bNode &node, BlendDataReader &reader) NodeBlendDataReadFunction
Definition BKE_node.hh:145
void node_preview_remove_unused(bNodeTree *ntree)
Definition node.cc:4508
bool node_preview_used(const bNode &node)
Definition node.cc:4403
void(*)(void *calldata, int nclass, StringRefNull name) bNodeClassCallback
Definition BKE_node.hh:478
bNodeType NodeTypeUndefined
Definition node.cc:122
void node_tree_type_free_link(const bNodeTreeType &nt)
Definition node.cc:2695
void node_type_socket_templates(bNodeType *ntype, bNodeSocketTemplate *inputs, bNodeSocketTemplate *outputs)
Definition node.cc:5541
bNodeInstanceKey node_instance_key(bNodeInstanceKey parent_key, const bNodeTree *ntree, const bNode *node)
Definition node.cc:5139
void(*)(const bNodeTree &tree, const bNode &node, blender::nodes::NodeDeclarationBuilder &builder) NodeDeclareDynamicFunction
Definition BKE_node.hh:117
void node_register_socket_type(bNodeSocketType &stype)
Definition node.cc:2826
void node_preview_merge_tree(bNodeTree *to_ntree, bNodeTree *from_ntree, bool remove_old)
Definition node.cc:4517
void(*)(blender::nodes::GatherLinkSearchOpParams &params) NodeGatherSocketLinkOperationsFunction
Definition BKE_node.hh:124
blender::compositor::NodeOperation *(*)(blender::compositor::Context &context, blender::nodes::DNode node) NodeGetCompositorOperationFunction
Definition BKE_node.hh:131
bNodeSocket * node_find_enabled_output_socket(bNode &node, StringRef name)
Definition node.cc:2903
const CPPType * socket_type_to_geo_nodes_base_cpp_type(eNodeSocketDatatype type)
Definition node.cc:5413
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:4272
Span< const bNodeZoneType * > all_zone_types()
bool node_set_selected(bNode &node, bool select)
Definition node.cc:4967
bNodeSocket * node_add_socket(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out, StringRefNull idname, StringRefNull identifier, StringRefNull name)
Definition node.cc:3136
bNode & node_find_node(bNodeTree &ntree, bNodeSocket &socket)
Definition node.cc:3613
bool node_tree_contains_tree(const bNodeTree &tree_to_search_in, const bNodeTree &tree_to_search_for)
Definition node.cc:4935
void node_detach_node(bNodeTree &ntree, bNode &node)
Definition node.cc:4263
void node_preview_init_tree(bNodeTree *ntree, int xsize, int ysize)
Definition node.cc:4482
void node_rebuild_id_vector(bNodeTree &node_tree)
Definition node.cc:4568
bNodeSocketType * node_socket_type_find(StringRef idname)
Definition node.cc:2794
bNode * node_add_static_node(const bContext *C, bNodeTree &ntree, int type)
Definition node.cc:3804
Span< int > all_zone_node_types()
bNodeTree * node_tree_copy_tree_ex(const bNodeTree &ntree, Main *bmain, bool do_id_user)
Definition node.cc:4383
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:4087
void register_node_zone_type(const bNodeZoneType &zone_type)
bNodeSocket * node_find_enabled_socket(bNode &node, eNodeSocketInOut in_out, StringRef name)
Definition node.cc:2885
Span< int > all_zone_input_node_types()
bNodeTree * node_tree_add_tree(Main *bmain, StringRef name, StringRef idname)
Definition node.cc:4362
void(*)(blender::nodes::value_elem::ElemEvalParams &params) NodeElemEvalFunction
Definition BKE_node.hh:137
bNodeSocketType * node_socket_type_find_static(int type, int subtype=0)
Definition node.cc:2803
void node_link_set_mute(bNodeTree &ntree, bNodeLink &link, const bool muted)
Definition node.cc:4141
void(*)(blender::nodes::inverse_eval::InverseEvalParams &params) NodeInverseEvalFunction
Definition BKE_node.hh:138
StringRefNull node_socket_type_label(const bNodeSocketType &stype)
Definition node.cc:2846
Span< bNodeTreeType * > node_tree_types_get()
Definition node.cc:2706
bNodeSocket * node_add_static_socket(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out, int type, int subtype, StringRefNull identifier, StringRefNull name)
Definition node.cc:3529
void(*)(const bNodeTree &tree, const bNode &node, BlendWriter &writer) NodeBlendWriteFunction
Definition BKE_node.hh:142
void(*)(blender::nodes::NodeMultiFunctionBuilder &builder) NodeMultiFunctionBuildFunction
Definition BKE_node.hh:114
void node_remove_socket_ex(bNodeTree &ntree, bNode &node, bNodeSocket &sock, bool do_id_user)
Definition node.cc:3580
void node_unregister_type(bNodeType &ntype)
Definition node.cc:2773
void node_modify_socket_type(bNodeTree &ntree, bNode &node, bNodeSocket &sock, StringRefNull idname)
Definition node.cc:3059
std::optional< StringRefNull > node_static_socket_label(int type, int subtype)
Definition node.cc:3484
void(*)(void *nodedata) NodeFreeExecFunction
Definition BKE_node.hh:213
std::optional< StringRefNull > node_static_socket_type(int type, int subtype, std::optional< int > dimensions=std::nullopt)
Definition node.cc:3167
void node_system_init()
Definition node.cc:5615
void node_remove_socket_links(bNodeTree &ntree, bNodeSocket &sock)
Definition node.cc:4150
const bNodeInstanceKey NODE_INSTANCE_KEY_NONE
Definition node.cc:5119
bool node_declaration_ensure(bNodeTree &ntree, bNode &node)
Definition node.cc:5090
void node_set_active(bNodeTree &ntree, bNode &node)
Definition node.cc:4996
float2 node_dimensions_get(const bNode &node)
Definition node.cc:5099
bNodeTree * node_tree_add_in_lib(Main *bmain, Library *owner_library, StringRefNull name, StringRefNull idname)
Definition node.cc:4367
bNodeType * node_type_find(StringRef idname)
Definition node.cc:2711
void node_socket_move_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, bNodeSocket &dst)
Definition node.cc:4010
bNodeTree * node_tree_from_id(ID *id)
Definition node.cc:4840
void node_tree_update_all_users(Main *main, ID *id)
Definition node.cc:5217
int node_socket_link_limit(const bNodeSocket &sock)
Definition node.cc:5025
void node_clear_active(bNodeTree &ntree)
Definition node.cc:4989
StringRefNull node_socket_sub_type_label(int subtype)
Definition node.cc:2855
bNode * node_find_root_parent(bNode &node)
Definition node.cc:3650
StringRefNull node_socket_label(const bNodeSocket &sock)
Definition node.cc:5268
void(*)( void *data, int thread, bNode *, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) NodeExecFunction
Definition BKE_node.hh:214
void node_tree_free_embedded_tree(bNodeTree *ntree)
Definition node.cc:4724
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:5603
std::optional< eCustomDataType > socket_type_to_custom_data_type(eNodeSocketDatatype type)
Definition node.cc:5355
void node_type_size_preset(bNodeType &ntype, eNodeSizePreset size)
Definition node.cc:5585
void node_unique_name(bNodeTree &ntree, bNode &node)
Definition node.cc:3764
bool node_is_static_socket_type(const bNodeSocketType &stype)
Definition node.cc:3158
bool node_link_is_hidden(const bNodeLink &link)
Definition node.cc:4159
void node_type_base_custom(bNodeType &ntype, StringRefNull idname, StringRefNull name, StringRefNull enum_name, short nclass)
Definition node.cc:5340
void node_tree_node_flag_set(bNodeTree &ntree, int flag, bool enable)
Definition node.cc:4846
VecBase< float, 2 > float2
static blender::bke::bNodeSocketTemplate outputs[]
static blender::bke::bNodeSocketTemplate inputs[]
Definition DNA_ID.h:404
FreestyleLineStyle * linestyle
Definition BKE_node.hh:850
Compact definition of a node socket.
Definition BKE_node.hh:98
Defines a socket type.
Definition BKE_node.hh:152
const blender::CPPType * geometry_nodes_cpp_type
Definition BKE_node.hh:203
SocketGetCPPValueFunction get_base_cpp_value
Definition BKE_node.hh:201
void(* draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color)
Definition BKE_node.hh:165
void(* interface_init_socket)(ID *id, const bNodeTreeInterfaceSocket *interface_socket, bNode *node, bNodeSocket *socket, StringRefNull data_path)
Definition BKE_node.hh:172
void(* free_self)(bNodeSocketType *stype)
Definition BKE_node.hh:196
void(* draw_color_simple)(const bNodeSocketType *socket_type, float *r_color)
Definition BKE_node.hh:166
void(* interface_draw)(ID *id, bNodeTreeInterfaceSocket *socket, bContext *C, uiLayout *layout)
Definition BKE_node.hh:168
const void * geometry_nodes_default_cpp_value
Definition BKE_node.hh:207
eNodeSocketDatatype type
Definition BKE_node.hh:187
SocketGetGeometryNodesCPPValueFunction get_geometry_nodes_cpp_value
Definition BKE_node.hh:205
void(* draw)(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, StringRefNull text)
Definition BKE_node.hh:160
const blender::CPPType * base_cpp_type
Definition BKE_node.hh:199
void(* interface_from_socket)(ID *id, bNodeTreeInterfaceSocket *interface_socket, const bNode *node, const bNodeSocket *socket)
Definition BKE_node.hh:177
void(* update)(bNodeTree *ntree)
Definition BKE_node.hh:508
void(* foreach_nodeclass)(void *calldata, bNodeClassCallback func)
Definition BKE_node.hh:493
void(* node_add_init)(bNodeTree *ntree, bNode *bnode)
Definition BKE_node.hh:512
bool(* poll)(const bContext *C, bNodeTreeType *ntreetype)
Definition BKE_node.hh:495
void(* get_from_context)(const bContext *C, bNodeTreeType *ntreetype, bNodeTree **r_ntree, ID **r_id, ID **r_from)
Definition BKE_node.hh:497
void(* localize)(bNodeTree *localtree, bNodeTree *ntree)
Definition BKE_node.hh:504
void(* local_merge)(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
Definition BKE_node.hh:505
bool(* validate_link)(eNodeSocketDatatype from, eNodeSocketDatatype to)
Definition BKE_node.hh:510
bool(* valid_socket_type)(bNodeTreeType *ntreetype, bNodeSocketType *socket_type)
Definition BKE_node.hh:515
Defines a node type.
Definition BKE_node.hh:226
NodeInverseElemEvalFunction eval_inverse_elem
Definition BKE_node.hh:396
blender::nodes::NodeDeclaration * static_declaration
Definition BKE_node.hh:364
void(* freefunc_api)(PointerRNA *ptr)
Definition BKE_node.hh:291
void(* copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node)
Definition BKE_node.hh:287
NodeMaterialXFunction materialx_fn
Definition BKE_node.hh:332
NodeFreeExecFunction free_exec_fn
Definition BKE_node.hh:327
NodeInternallyLinkedInputFunction internally_linked_input
Definition BKE_node.hh:377
NodeInverseEvalFunction eval_inverse
Definition BKE_node.hh:403
NodeExecFunction exec_fn
Definition BKE_node.hh:328
NodeBlendWriteFunction blend_write_storage_content
Definition BKE_node.hh:383
std::string ui_description
Definition BKE_node.hh:232
bool is_type(StringRef query_idname) const
Definition BKE_node.hh:1205
NodeBlendDataReadFunction blend_data_read_storage_content
Definition BKE_node.hh:384
NodeGetCompositorOperationFunction get_compositor_operation
Definition BKE_node.hh:336
int(* ui_class)(const bNode *node)
Definition BKE_node.hh:264
std::string storagename
Definition BKE_node.hh:244
bool(* add_ui_poll)(const bContext *C)
Definition BKE_node.hh:298
void(* freefunc)(bNode *node)
Definition BKE_node.hh:285
void(* initfunc)(bNodeTree *ntree, bNode *node)
Definition BKE_node.hh:277
bool(* poll_instance)(const bNode *node, const bNodeTree *nodetree, const char **r_disabled_hint)
Definition BKE_node.hh:316
bNodeSocketTemplate * inputs
Definition BKE_node.hh:242
void(* labelfunc)(const bNodeTree *ntree, const bNode *node, char *label, int label_maxncpy)
Definition BKE_node.hh:258
NodeGPUExecFunction gpu_fn
Definition BKE_node.hh:330
NodeElemEvalFunction eval_elem
Definition BKE_node.hh:390
void(* draw_backdrop)(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y)
Definition BKE_node.hh:252
void(* draw_buttons_ex)(uiLayout *, bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:249
const char * compositor_unsupported_message
Definition BKE_node.hh:341
std::string(* ui_description_fn)(const bNode &node)
Definition BKE_node.hh:266
NodeMultiFunctionBuildFunction build_multi_function
Definition BKE_node.hh:344
NodeExtraInfoFunction get_extra_info
Definition BKE_node.hh:374
NodeGeometryExecFunction geometry_node_execute
Definition BKE_node.hh:347
const char * deprecation_notice
Definition BKE_node.hh:417
bNodeSocketTemplate * outputs
Definition BKE_node.hh:242
const char * enum_name_legacy
Definition BKE_node.hh:235
void(* draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:247
bool(* poll)(const bNodeType *ntype, const bNodeTree *nodetree, const char **r_disabled_hint)
Definition BKE_node.hh:309
NodeGatherSocketLinkOperationsFunction gather_link_search_ops
Definition BKE_node.hh:371
bool(* insert_link)(bNodeTree *ntree, bNode *node, bNodeLink *link)
Definition BKE_node.hh:321
void(* copyfunc_api)(PointerRNA *ptr, const bNode *src_node)
Definition BKE_node.hh:292
NodeDeclareFunction declare
Definition BKE_node.hh:355
void(* register_operators)()
Definition BKE_node.hh:410
void(* free_self)(bNodeType *ntype)
Definition BKE_node.hh:323
NodeInitExecFunction init_exec_fn
Definition BKE_node.hh:326
void(* updatefunc)(bNodeTree *ntree, bNode *node)
Definition BKE_node.hh:269
bool ignore_inferred_input_socket_visibility
Definition BKE_node.hh:415
void(* initfunc_api)(const bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:290
PointerRNA * ptr
Definition wm_files.cc:4227
uint8_t flag
Definition wm_window.cc:139