22 {0,
nullptr, 0,
nullptr,
nullptr}};
27 {0,
nullptr, 0,
nullptr,
nullptr}};
34 "Automatically detect a good structure type based on how the socket is used"},
39 "Socket expects a single value"},
44 "Socket can work with different kinds of structures"},
47 {0,
nullptr, 0,
nullptr,
nullptr}};
56 "The \"id\" attribute if available, otherwise the index"},
62 "The position from the context"},
67 "Transformation of each instance from the geometry context"},
72 "The left Bezier control point handle from the context"},
77 "The right Bezier control point handle from the context"},
78 {0,
nullptr, 0,
nullptr,
nullptr}};
82# include <fmt/format.h>
106extern FunctionRNA rna_NodeTreeInterfaceSocket_draw_func;
107extern FunctionRNA rna_NodeTreeInterfaceSocket_init_socket_func;
108extern FunctionRNA rna_NodeTreeInterfaceSocket_from_socket_func;
138 return &RNA_NodeTreeInterfaceSocket;
141 return &RNA_NodeTreeInterfacePanel;
143 return &RNA_NodeTreeInterfaceItem;
147static std::optional<std::string> rna_NodeTreeInterfaceItem_path(
const PointerRNA *
ptr)
155 ntree->ensure_interface_cache();
156 for (
const int index : ntree->interface_items().index_range()) {
157 if (ntree->interface_items()[index] == item) {
158 return fmt::format(
"interface.items_tree[{}]", index);
173static int rna_NodeTreeInterfaceItem_position_get(
PointerRNA *
ptr)
180static int rna_NodeTreeInterfaceItem_index_get(
PointerRNA *
ptr)
187static bool rna_NodeTreeInterfaceSocket_unregister(
Main * ,
StructRNA *type)
204static void rna_NodeTreeInterfaceSocket_draw_builtin(
ID *
id,
215static void rna_NodeTreeInterfaceSocket_draw_custom(
ID *
id,
222 if (typeinfo ==
nullptr) {
228 FunctionRNA *func = &rna_NodeTreeInterfaceSocket_draw_func;
239static void rna_NodeTreeInterfaceSocket_init_socket_builtin(
244 const char *data_path)
252static void rna_NodeTreeInterfaceSocket_init_socket_custom(
261 if (typeinfo ==
nullptr) {
268 FunctionRNA *func = &rna_NodeTreeInterfaceSocket_init_socket_func;
280static void rna_NodeTreeInterfaceSocket_from_socket_builtin(
289static void rna_NodeTreeInterfaceSocket_from_socket_custom(
297 if (typeinfo ==
nullptr) {
303 FunctionRNA *func = &rna_NodeTreeInterfaceSocket_from_socket_func;
314static StructRNA *rna_NodeTreeInterfaceSocket_register(
Main * ,
317 const char *identifier,
327 nullptr, &RNA_NodeTreeInterfaceSocket, &dummy_socket);
330 bool have_function[3];
331 if (validate(&dummy_socket_ptr,
data, have_function) != 0) {
343 st = MEM_new<blender::bke::bNodeSocketType>(__func__);
358 &
BLENDER_RNA, identifier, &RNA_NodeTreeInterfaceSocket);
385static void rna_NodeTreeInterfaceSocket_identifier_get(
PointerRNA *
ptr,
char *value)
391static int rna_NodeTreeInterfaceSocket_identifier_length(
PointerRNA *
ptr)
397static int rna_NodeTreeInterfaceSocket_socket_type_get(
PointerRNA *
ptr)
403static void rna_NodeTreeInterfaceSocket_socket_type_set(
PointerRNA *
ptr,
int value)
409 socket->set_socket_type(typeinfo->
idname);
426 if (socket_type != base_socket_type) {
431 if (!
U.experimental.use_bundle_and_closure_nodes) {
444 if (is_socket_type_supported(ntree_type, socket_type)) {
451static bool rna_NodeTreeInterfaceSocket_socket_type_poll(
455 return is_socket_type_supported(ntreetype, socket_type);
458static const EnumPropertyItem *rna_NodeTreeInterfaceSocket_socket_type_itemf(
468 ntree->
typeinfo, rna_NodeTreeInterfaceSocket_socket_type_poll, r_free);
475static void rna_NodeTreeInterfaceSocket_force_non_field_set(
PointerRNA *
ptr,
const bool value)
483static const EnumPropertyItem *rna_NodeTreeInterfaceSocket_structure_type_itemf(
496 const bool supports_fields = is_geometry_nodes &&
498 const bool supports_grids = is_geometry_nodes &&
516 if (
U.experimental.use_socket_structure_type) {
517 if (supports_fields || supports_grids) {
524 if (
U.experimental.use_socket_structure_type) {
525 if (supports_fields) {
532 if (
U.experimental.use_socket_structure_type) {
533 if (supports_grids) {
545static const EnumPropertyItem *rna_NodeTreeInterfaceSocket_default_input_itemf(
580static const EnumPropertyItem *rna_NodeTreeInterfaceSocket_attribute_domain_itemf(
602 ptr->owner_id, &RNA_NodeTreeInterfaceItem,
interface->active_item());
606static void rna_NodeTreeInterfaceItems_active_set(
PointerRNA *
ptr,
621 const char *description,
623 int socket_type_enum,
626 if (parent !=
nullptr && !
interface->find_item(parent->
item)) {
632 if (typeinfo ==
nullptr) {
638 if (!is_socket_type_supported(ntree->
typeinfo, typeinfo)) {
639 typeinfo = find_supported_socket_type(ntree->
typeinfo);
640 if (typeinfo ==
nullptr) {
648 name, description, socket_type,
flag, parent);
650 if (socket ==
nullptr) {
666 const char *description,
673 name ? name :
"", description ? description :
"",
flag,
nullptr);
675 if (panel ==
nullptr) {
695 if (parent !=
nullptr) {
702 if (parent ==
nullptr) {
705 const int index = parent->items().as_span().first_index_try(item);
706 if (!parent->items().index_range().contains(index)) {
712 if (item_copy ==
nullptr) {
732 return rna_NodeTreeInterfaceItems_copy_to_parent(
id,
interface, bmain,
reports, item, parent);
735static void rna_NodeTreeInterfaceItems_remove(
ID *
id,
739 bool move_content_to_parent)
741 interface->remove_item(*item, move_content_to_parent);
757static void rna_NodeTreeInterfaceItems_move(
ID *
id,
763 interface->move_item(*item, to_position);
770static void rna_NodeTreeInterfaceItems_move_to_parent(
ID *
id,
778 interface->move_item_to_parent(*item, parent, to_position);
799 if (subtypes.
contains(item->value)) {
804 if (items_count == 0) {
813static const EnumPropertyItem *rna_NodeTreeInterfaceSocketFloat_subtype_itemf(
829void rna_NodeTreeInterfaceSocketFloat_default_value_range(
838 if (dval->
max < dval->
min) {
844 *softmin = dval->
min;
845 *softmax = dval->
max;
856void rna_NodeTreeInterfaceSocketInt_default_value_range(
865 if (dval->
max < dval->
min) {
871 *softmin = dval->
min;
872 *softmax = dval->
max;
875static const EnumPropertyItem *rna_NodeTreeInterfaceSocketVector_subtype_itemf(
890void rna_NodeTreeInterfaceSocketVector_default_value_range(
896 if (dval->
max < dval->
min) {
902 *softmin = dval->
min;
903 *softmax = dval->
max;
906static const EnumPropertyItem *rna_NodeTreeInterfaceSocketString_subtype_itemf(
914static void rna_NodeTreeInterfaceSocketVector_dimensions_update(
Main *bmain,
929 socket->set_socket_type(socket_idname);
934 rna_NodeTreeInterfaceItem_update(bmain, scene,
ptr);
937static bool rna_NodeTreeInterfaceSocketMaterial_default_value_poll(
PointerRNA * ,
952 ntree->ensure_interface_cache();
957 ntree->interface_items().size(),
962static int rna_NodeTreeInterface_items_length(
PointerRNA *
ptr)
969 ntree->ensure_interface_cache();
970 return ntree->interface_items().size();
980 ntree->ensure_interface_cache();
981 if (!ntree->interface_items().index_range().contains(index)) {
986 *
ptr, &RNA_NodeTreeInterfaceItem, ntree->interface_items()[index], *r_ptr);
990static bool rna_NodeTreeInterface_items_lookup_string(
PointerRNA *
ptr,
999 ntree->ensure_interface_cache();
1034 if (!
data->enum_items) {
1063 prop,
"rna_NodeTreeInterfaceItem_parent_get",
nullptr,
nullptr,
nullptr);
1079 prop,
"Index",
"Global index of the item among all items in the interface");
1089 srna =
RNA_def_struct(brna,
"NodeTreeInterfaceSocket",
"NodeTreeInterfaceItem");
1093 "rna_NodeTreeInterfaceSocket_register",
1094 "rna_NodeTreeInterfaceSocket_unregister",
1105 "rna_NodeTreeInterfaceSocket_identifier_get",
1106 "rna_NodeTreeInterfaceSocket_identifier_length",
1119 "rna_NodeTreeInterfaceSocket_socket_type_get",
1120 "rna_NodeTreeInterfaceSocket_socket_type_set",
1121 "rna_NodeTreeInterfaceSocket_socket_type_itemf");
1124 prop,
"Socket Type",
"Type of the socket generated by this interface item");
1137 prop,
"Hide Value",
"Hide the socket input value even when the socket is not connected");
1145 "Don't show the input value in the geometry nodes modifier interface");
1156 "Only allow single value inputs rather than field.\nDeprecated. Will be remove in 5.0.");
1163 "Is Inspect Output",
1164 "Take link out of node group to connect to root tree output node");
1172 "This socket is meant to be used as the toggle in its panel header");
1179 prop,
"Layer Selection",
"Take Grease Pencil Layer or Layer Group as selection field");
1186 prop,
"Menu Expanded",
"Draw the menu socket as an expanded drop-down menu");
1192 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocket_attribute_domain_itemf");
1196 "Attribute domain used by the geometry nodes modifier to create an attribute output");
1202 "Default Attribute",
1203 "The attribute name used by default when the node group is used by a "
1204 "geometry nodes modifier");
1212 "What kind of higher order types are expected to flow through this socket");
1214 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocket_structure_type_itemf");
1222 "Input to use when the socket is unconnected. Requires \"Hide Value\".");
1224 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocket_default_input_itemf");
1247 parm =
RNA_def_pointer(func,
"node",
"Node",
"Node",
"Node of the socket to initialize");
1249 parm =
RNA_def_pointer(func,
"socket",
"NodeSocket",
"Socket",
"Socket to initialize");
1252 func,
"data_path",
nullptr, 0,
"Data Path",
"Path to specialized socket data");
1258 parm =
RNA_def_pointer(func,
"node",
"Node",
"Node",
"Node of the original socket");
1260 parm =
RNA_def_pointer(func,
"socket",
"NodeSocket",
"Socket",
"Original socket");
1269 srna =
RNA_def_struct(brna,
"NodeTreeInterfacePanel",
"NodeTreeInterfaceItem");
1298 prop,
"Persistent Identifier",
"Unique identifier for this panel within this node tree");
1318 "rna_NodeTreeInterfaceItems_active_get",
1319 "rna_NodeTreeInterfaceItems_active_set",
1325 func =
RNA_def_function(srna,
"new_socket",
"rna_NodeTreeInterfaceItems_new_socket");
1328 parm =
RNA_def_string(func,
"name",
nullptr, 0,
"Name",
"Name of the socket");
1330 RNA_def_string(func,
"description",
nullptr, 0,
"Description",
"Description of the socket");
1335 "Input/Output Type",
1336 "Create an input or output socket");
1342 "Type of socket generated on nodes");
1345 parm,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocket_socket_type_itemf");
1347 func,
"parent",
"NodeTreeInterfacePanel",
"Parent",
"Panel to add the socket in");
1349 parm =
RNA_def_pointer(func,
"item",
"NodeTreeInterfaceSocket",
"Socket",
"New socket");
1352 func =
RNA_def_function(srna,
"new_panel",
"rna_NodeTreeInterfaceItems_new_panel");
1355 parm =
RNA_def_string(func,
"name",
nullptr, 0,
"Name",
"Name of the new panel");
1356 RNA_def_string(func,
"description",
nullptr, 0,
"Description",
"Description of the panel");
1358 func,
"default_closed",
false,
"Default Closed",
"Panel is closed by default on new nodes");
1361 parm =
RNA_def_pointer(func,
"item",
"NodeTreeInterfacePanel",
"Panel",
"New panel");
1367 parm =
RNA_def_pointer(func,
"item",
"NodeTreeInterfaceItem",
"Item",
"Item to copy");
1371 func,
"item_copy",
"NodeTreeInterfaceItem",
"Item Copy",
"Copy of the item");
1374 func =
RNA_def_function(srna,
"remove",
"rna_NodeTreeInterfaceItems_remove");
1377 parm =
RNA_def_pointer(func,
"item",
"NodeTreeInterfaceItem",
"Item",
"The item to remove");
1381 "move_content_to_parent",
1384 "If the item is a panel, move the contents to the parent instead of deleting it");
1386 func =
RNA_def_function(srna,
"clear",
"rna_NodeTreeInterfaceItems_clear");
1393 parm =
RNA_def_pointer(func,
"item",
"NodeTreeInterfaceItem",
"Item",
"The item to move");
1401 "Target position for the item in its current panel",
1406 func =
RNA_def_function(srna,
"move_to_parent",
"rna_NodeTreeInterfaceItems_move_to_parent");
1409 parm =
RNA_def_pointer(func,
"item",
"NodeTreeInterfaceItem",
"Item",
"The item to move");
1412 func,
"parent",
"NodeTreeInterfacePanel",
"Parent",
"New parent of the item");
1420 "Target position for the item in the new parent panel",
1433 srna,
"Node Tree Interface",
"Declaration of sockets and ui panels of a node group");
1438 "rna_NodeTreeInterface_items_begin",
1439 "rna_iterator_array_next",
1440 "rna_iterator_array_end",
1441 "rna_iterator_array_dereference_get",
1442 "rna_NodeTreeInterface_items_length",
1443 "rna_NodeTreeInterface_items_lookup_int",
1444 "rna_NodeTreeInterface_items_lookup_string",
void BKE_main_ensure_invariants(Main &bmain, std::optional< blender::Span< ID * > > modified_ids=std::nullopt)
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BLI_kdtree_nd_ free(KDTree *tree)
#define SET_FLAG_FROM_TEST(value, test, flag)
NodeTreeInterfaceItemType
NodeTreeInterfacePanelFlag
@ NODE_INTERFACE_PANEL_DEFAULT_CLOSED
NodeTreeInterfaceSocketFlag
@ NODE_INTERFACE_SOCKET_SINGLE_VALUE_ONLY_LEGACY
@ NODE_INTERFACE_SOCKET_OUTPUT
@ NODE_INTERFACE_SOCKET_HIDE_IN_MODIFIER
@ NODE_INTERFACE_SOCKET_PANEL_TOGGLE
@ NODE_INTERFACE_SOCKET_INPUT
@ NODE_INTERFACE_SOCKET_INSPECT
@ NODE_INTERFACE_SOCKET_LAYER_SELECTION
@ NODE_INTERFACE_SOCKET_MENU_EXPANDED
@ NODE_INTERFACE_SOCKET_HIDE_VALUE
@ NODE_DEFAULT_INPUT_POSITION_FIELD
@ NODE_DEFAULT_INPUT_HANDLE_RIGHT_FIELD
@ NODE_DEFAULT_INPUT_HANDLE_LEFT_FIELD
@ NODE_DEFAULT_INPUT_ID_INDEX_FIELD
@ NODE_DEFAULT_INPUT_INSTANCE_TRANSFORM_FIELD
@ NODE_DEFAULT_INPUT_VALUE
@ NODE_DEFAULT_INPUT_INDEX_FIELD
@ NODE_DEFAULT_INPUT_NORMAL_FIELD
NodeSocketInterfaceStructureType
@ NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_GRID
@ NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_SINGLE
@ NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_FIELD
@ NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_DYNAMIC
@ NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_AUTO
@ RPT_ERROR_INVALID_INPUT
const EnumPropertyItem * RNA_node_enum_definition_itemf(const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
int rna_node_socket_idname_to_enum(const char *idname)
blender::bke::bNodeSocketType * rna_node_socket_type_from_enum(int value)
const EnumPropertyItem * rna_node_socket_type_itemf(void *data, bool(*poll)(void *data, blender::bke::bNodeSocketType *), bool *r_free)
int(*)(PointerRNA *ptr, void *data, bool *have_function) StructValidateFunc
void(*)(void *data) StructFreeFunc
int(*)(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *list) StructCallbackFunc
@ PROPOVERRIDE_NO_COMPARISON
BMesh const char void * data
bool contains(const Key &key) const
T & get_item_as(bNodeTreeInterfaceItem &item)
Span< bNodeSocketType * > node_socket_types_get()
void node_register_socket_type(bNodeSocketType &stype)
bNodeSocketType * node_socket_type_find(StringRef idname)
bNodeSocketType * node_socket_type_find_static(int type, int subtype=0)
std::optional< StringRefNull > node_static_socket_type(int type, int subtype, std::optional< int > dimensions=std::nullopt)
bool socket_type_supports_default_input_type(const bke::bNodeSocketType &socket_type, const NodeDefaultInputType input_type)
bool socket_type_supports_fields(const eNodeSocketDatatype socket_type)
bool socket_type_supports_grids(const eNodeSocketDatatype socket_type)
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
void * RNA_struct_blender_type_get(StructRNA *srna)
void RNA_parameter_list_free(ParameterList *parms)
void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, const void *value)
void rna_pointer_create_with_ancestors(const PointerRNA &parent, StructRNA *type, void *data, PointerRNA &r_ptr)
ParameterList * RNA_parameter_list_create(ParameterList *parms, PointerRNA *, FunctionRNA *func)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
const EnumPropertyItem rna_enum_attribute_domain_items[]
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg, const char *instance)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
StructRNA * RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *rna_ext)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void rna_def_node_socket_interface_subtypes(BlenderRNA *brna)
static void rna_def_node_tree_interface_items_api(StructRNA *srna)
static const EnumPropertyItem node_tree_interface_socket_in_out_items[]
static const EnumPropertyItem node_default_input_items[]
const EnumPropertyItem rna_enum_node_tree_interface_item_type_items[]
static void rna_def_node_interface_item(BlenderRNA *brna)
void RNA_def_node_tree_interface(BlenderRNA *brna)
static const EnumPropertyItem node_tree_interface_socket_structure_type_items[]
static void rna_def_node_interface_socket(BlenderRNA *brna)
static void rna_def_node_interface_panel(BlenderRNA *brna)
static void rna_def_node_tree_interface(BlenderRNA *brna)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
const EnumPropertyItem rna_enum_property_subtype_items[]
const EnumPropertyItem rna_enum_dummy_DEFAULT_items[]
struct MaterialGPencilStyle * gp_style
bNodeTreeInterfaceItem item
struct IDProperty * properties
bNodeTreeInterfaceItem item
bNodeTreeRuntimeHandle * runtime
bNodeTreeTypeHandle * typeinfo
bNodeTreeInterface tree_interface
ExtensionRNA ext_interface
void(* interface_init_socket)(ID *id, const bNodeTreeInterfaceSocket *interface_socket, bNode *node, bNodeSocket *socket, StringRefNull data_path)
void(* free_self)(bNodeSocketType *stype)
void(* interface_draw)(ID *id, bNodeTreeInterfaceSocket *socket, bContext *C, uiLayout *layout)
void(* interface_from_socket)(ID *id, bNodeTreeInterfaceSocket *interface_socket, const bNode *node, const bNodeSocket *socket)
bool(* valid_socket_type)(bNodeTreeType *ntreetype, bNodeSocketType *socket_type)
void WM_main_add_notifier(uint type, void *reference)