18 #define DNA_DEPRECATED_ALLOW
68 #include "RNA_prototypes.h"
87 #define NODE_DEFAULT_MAX_WIDTH 700
122 const bool do_id_user);
142 ntree_dst->
runtime = MEM_new<bNodeTreeRuntime>(__func__);
157 ntree_dst, *src_node, flag_subdata,
false, socket_map);
158 node_map.
add(src_node, new_node);
206 if (new_node->parent) {
207 new_node->parent = node_map.
lookup(new_node->parent);
213 if (ntree_src->
runtime->field_inferencing_interface) {
214 ntree_dst->
runtime->field_inferencing_interface = std::make_unique<FieldInferencingInterface>(
215 *ntree_src->
runtime->field_inferencing_interface);
378 function_callback(
id, &key, (
void **)&
node->storage, 0,
user_data);
418 return owner_id_hint;
430 for (
int i = 0; lists[i] !=
nullptr; i++) {
438 BLI_assert_msg(0,
"Embedded node tree with no owner. Critical Main inconsistency.");
671 sock->
cache =
nullptr;
672 sock->
runtime = MEM_new<bNodeSocketRuntime>(__func__);
692 node->runtime = MEM_new<bNodeRuntime>(__func__);
693 node->typeinfo =
nullptr;
718 switch (
node->type) {
738 npd->
pd = blender::dna::shallow_zero_initialize();
756 iuser->
scene =
nullptr;
769 iuser->
scene =
nullptr;
1056 if (ntype->
declare !=
nullptr) {
1064 while (sockdef->
type != -1) {
1071 while (sockdef->
type != -1) {
1096 node->miniwidth = 42.0f;
1098 node->color[0] =
node->color[1] =
node->color[2] = 0.608;
1165 node->typeinfo = typeinfo;
1227 if (socktype &&
STREQ(sock->idname, socktype->
idname)) {
1232 if (socktype &&
STREQ(sock->idname, socktype->
idname)) {
1240 if (socktype &&
STREQ(sock->idname, socktype->
idname)) {
1245 if (socktype &&
STREQ(sock->idname, socktype->
idname)) {
1470 if (!(socket->flag &
SOCK_UNAVAIL) && socket->name == name) {
1494 if (
STREQ(sock->identifier, identifier)) {
1506 const char *identifier,
1511 if (identifier && identifier[0] !=
'\0') {
1513 BLI_strncpy(auto_identifier, identifier,
sizeof(auto_identifier));
1517 BLI_strncpy(auto_identifier, name,
sizeof(auto_identifier));
1523 bNodeSocket *sock = MEM_cnew<bNodeSocket>(
"sock");
1524 sock->
runtime = MEM_new<bNodeSocketRuntime>(__func__);
1590 if (default_value->
value !=
nullptr) {
1598 if (default_value->
value !=
nullptr) {
1607 if (default_value->
value !=
nullptr) {
1615 if (default_value->
value !=
nullptr) {
1623 if (default_value->
value !=
nullptr) {
1683 const char *identifier,
1716 return "NodeSocketFloatUnsigned";
1718 return "NodeSocketFloatPercentage";
1720 return "NodeSocketFloatFactor";
1722 return "NodeSocketFloatAngle";
1724 return "NodeSocketFloatTime";
1726 return "NodeSocketFloatTimeAbsolute";
1728 return "NodeSocketFloatDistance";
1731 return "NodeSocketFloat";
1736 return "NodeSocketIntUnsigned";
1738 return "NodeSocketIntPercentage";
1740 return "NodeSocketIntFactor";
1743 return "NodeSocketInt";
1746 return "NodeSocketBool";
1750 return "NodeSocketVectorTranslation";
1752 return "NodeSocketVectorDirection";
1754 return "NodeSocketVectorVelocity";
1756 return "NodeSocketVectorAcceleration";
1758 return "NodeSocketVectorEuler";
1760 return "NodeSocketVectorXYZ";
1763 return "NodeSocketVector";
1766 return "NodeSocketColor";
1768 return "NodeSocketString";
1770 return "NodeSocketShader";
1772 return "NodeSocketObject";
1774 return "NodeSocketImage";
1776 return "NodeSocketGeometry";
1778 return "NodeSocketCollection";
1780 return "NodeSocketTexture";
1782 return "NodeSocketMaterial";
1793 return "NodeSocketInterfaceFloatUnsigned";
1795 return "NodeSocketInterfaceFloatPercentage";
1797 return "NodeSocketInterfaceFloatFactor";
1799 return "NodeSocketInterfaceFloatAngle";
1801 return "NodeSocketInterfaceFloatTime";
1803 return "NodeSocketInterfaceFloatTimeAbsolute";
1805 return "NodeSocketInterfaceFloatDistance";
1808 return "NodeSocketInterfaceFloat";
1813 return "NodeSocketInterfaceIntUnsigned";
1815 return "NodeSocketInterfaceIntPercentage";
1817 return "NodeSocketInterfaceIntFactor";
1820 return "NodeSocketInterfaceInt";
1823 return "NodeSocketInterfaceBool";
1827 return "NodeSocketInterfaceVectorTranslation";
1829 return "NodeSocketInterfaceVectorDirection";
1831 return "NodeSocketInterfaceVectorVelocity";
1833 return "NodeSocketInterfaceVectorAcceleration";
1835 return "NodeSocketInterfaceVectorEuler";
1837 return "NodeSocketInterfaceVectorXYZ";
1840 return "NodeSocketInterfaceVector";
1843 return "NodeSocketInterfaceColor";
1845 return "NodeSocketInterfaceString";
1847 return "NodeSocketInterfaceShader";
1849 return "NodeSocketInterfaceObject";
1851 return "NodeSocketInterfaceImage";
1853 return "NodeSocketInterfaceGeometry";
1855 return "NodeSocketInterfaceCollection";
1857 return "NodeSocketInterfaceTexture";
1859 return "NodeSocketInterfaceMaterial";
1888 return "Collection";
1902 const char *identifier,
1944 if (link->fromsock == sock || link->tosock == sock) {
1950 if (link->fromsock == sock || link->tosock == sock) {
1970 if (link->fromnode ==
node || link->tonode ==
node) {
2005 if (sock == tsock) {
2006 if (r_node !=
nullptr) {
2009 if (r_sockindex !=
nullptr) {
2010 *r_sockindex = index;
2030 if (parent == child) {
2040 const bNode *node_start,
2043 const bool reversed)
2050 if (link->tonode && link->fromnode) {
2053 if ((reversed && (link->tonode == node_start)) ||
2054 (!reversed && link->fromnode == node_start)) {
2055 if (!
callback(link->fromnode, link->tonode, userdata, reversed)) {
2059 ntree, reversed ? link->fromnode : link->tonode,
callback, userdata, reversed);
2066 const bNode *node_start,
2069 char recursion_mask)
2073 if (link ==
nullptr) {
2094 const bNode *node_start,
2105 char recursion_mask = (1 << recursion_lvl);
2109 node->iter_flag &= ~recursion_mask;
2135 bNode *
node = MEM_cnew<bNode>(
"new node");
2136 node->runtime = MEM_new<bNodeRuntime>(__func__);
2153 const char *idname =
nullptr;
2158 const char *disabled_hint;
2159 if (ntype->type ==
type && (!ntype->poll || ntype->poll(ntype,
ntree, &disabled_hint))) {
2160 idname = ntype->idname;
2174 sock_dst->
runtime = MEM_new<bNodeSocketRuntime>(__func__);
2175 if (sock_src->
prop) {
2193 sock_dst->
cache =
nullptr;
2199 const bNode &node_src,
2205 *node_dst = node_src;
2207 node_dst->
runtime = MEM_new<bNodeRuntime>(__func__);
2222 socket_map.
add_new(src_socket, dst_socket);
2230 socket_map.
add_new(src_socket, dst_socket);
2233 if (node_src.
prop) {
2241 dst_link->
tonode = node_dst;
2243 dst_link->
tosock = socket_map.
lookup(src_link->tosock);
2275 const bNode &src_node,
2289 if (
ELEM(socket, link->fromsock, link->tosock)) {
2306 link = MEM_cnew<bNodeLink>(
"link");
2317 link = MEM_cnew<bNodeLink>(
"link");
2361 if (link->fromsock == sock) {
2368 return tot == muted;
2458 if (link->fromsock == sock || link->tosock == sock) {
2483 if (link->tosock != sock || link->multi_input_socket_index <= deleted_index) {
2486 link->multi_input_socket_index -= 1;
2494 link->tosock->link = link;
2500 if (link->fromnode ==
node) {
2501 if (link->fromsock->link) {
2509 if (link_to_compare->fromsock == fromlink->
fromsock &&
2510 link_to_compare->tosock == link->tosock) {
2512 ntree, link_to_compare->tosock, link_to_compare->multi_input_socket_index);
2517 link->fromnode = fromlink->
fromnode;
2518 link->fromsock = fromlink->
fromsock;
2536 ntree, link->tosock, link->multi_input_socket_index);
2544 ntree, link->tosock, link->multi_input_socket_index);
2553 if (link->tonode ==
node) {
2565 *rx =
x +
node->locx;
2566 *ry =
y +
node->locy;
2578 *rx =
x -
node->locx;
2579 *ry =
y -
node->locy;
2585 for (
const bNode *parent_iter =
node; parent_iter; parent_iter = parent_iter->parent) {
2586 if (parent_iter == parent) {
2602 node->parent = parent;
2617 node->parent =
nullptr;
2642 float offset_y =
U.widget_unit * tot_sock_idx;
2657 offset_y -=
U.widget_unit * tot_sock_idx;
2659 from_node->
locx = to_node->
locx + offset_x;
2660 from_node->
locy = to_node->
locy - offset_y;
2666 if (nsock->link !=
nullptr) {
2679 const bool is_embedded = (bmain ==
nullptr);
2730 preview = MEM_cnew<bNodePreview>(
"node preview");
2739 if (xsize == 0 || ysize == 0) {
2751 if (
preview->rect ==
nullptr) {
2752 preview->rect = (
unsigned char *)
MEM_callocN(4 * xsize + xsize * ysize *
sizeof(
char[4]),
2753 "node preview rect");
2789 node->preview_xsize = xsize;
2790 node->preview_ysize = ysize;
2867 if (remove_old || !to_ntree->
previews) {
2907 if (link->fromnode ==
node) {
2908 lb = &
node->outputs;
2910 else if (link->tonode ==
node) {
2921 ntree, link->tosock, link->multi_input_socket_index);
2924 if (link->fromsock == sock || link->tosock == sock) {
2936 if (
node->parent == parent) {
2963 if (
node->typeinfo->freefunc) {
2986 if (
node->typeinfo->declaration_is_dynamic) {
2987 delete node->runtime->declaration;
2990 MEM_delete(
node->runtime);
3017 bool node_has_id =
false;
3021 if (
node->typeinfo->freefunc_api) {
3025 node->typeinfo->freefunc_api(&
ptr);
3047 BLI_snprintf(prefix,
sizeof(prefix),
"nodes[\"%s\"]", propname_esc);
3050 if (bmain !=
nullptr) {
3058 if (bmain !=
nullptr) {
3072 const bool do_id_user)
3132 if (
ntree ==
nullptr) {
3157 if (tnode->type ==
node->type ||
3170 if (tnode->type ==
node->type) {
3213 return &((
Material *)
id)->nodetree;
3215 return &((
Light *)
id)->nodetree;
3217 return &((
World *)
id)->nodetree;
3219 return &((
Tex *)
id)->nodetree;
3221 return &((
Scene *)
id)->nodetree;
3234 return (nodetree !=
nullptr) ? *nodetree :
nullptr;
3244 node->flag &= ~flag;
3251 if (
ntree ==
nullptr) {
3273 while (node_src !=
nullptr) {
3274 node_local->original = node_src;
3275 node_src = node_src->
next;
3276 node_local = node_local->
next;
3288 if (
ntree && localtree) {
3306 if (stype ==
nullptr) {
3310 bNodeSocket *sock = MEM_cnew<bNodeSocket>(
"socket template");
3311 sock->
runtime = MEM_new<bNodeSocketRuntime>(__func__);
3338 const char *identifier)
3342 if (
STREQ(iosock->identifier, identifier)) {
3431 sprintf(base,
"NodeTreeInterface_%s",
ntree->
id.
name + 2);
3603 if (
ntree ==
nullptr) {
3635 if (
ntree ==
nullptr) {
3654 tnode->flag &= ~flags_to_set;
3656 node->flag |= flags_to_set;
3667 if (is_available != was_available) {
3699 socket->runtime->declaration = &socket_decl;
3712 if (
node->runtime->declaration !=
nullptr) {
3715 if (
node->typeinfo->declare ==
nullptr) {
3718 if (
node->typeinfo->declaration_is_dynamic) {
3721 node->typeinfo->declare(builder);
3726 node->runtime->declaration =
node->typeinfo->fixed_declaration;
3742 #define USE_NODE_CB_VALIDATE
3744 #ifdef USE_NODE_CB_VALIDATE
3763 #ifdef USE_NODE_CB_VALIDATE
3790 #ifdef USE_NODE_CB_VALIDATE
3799 #ifdef USE_NODE_CB_VALIDATE
3815 node->id = node_info->
id;
3827 if (
node->id ==
nullptr) {
3840 #ifdef USE_NODE_CB_VALIDATE
3845 node_info->
id =
node->id;
3907 while ((
c = *
str++)) {
3940 return (value_a != value_b);
4036 "temporary node instance key list");
4038 int num_untagged = 0;
4048 for (
int i = 0; i < num_untagged; i++) {
4066 if (link->tonode ==
node) {
4067 bNode *fromnode = link->fromnode;
4068 if (fromnode->
done == 0) {
4071 if (fromnode->
level <= level) {
4072 level = fromnode->
level - 1;
4079 if (
node->parent->done == 0) {
4082 if (
node->parent->level <= level) {
4083 level =
node->parent->level - 1;
4104 if (*r_deplist_len == 0) {
4105 *r_deplist =
nullptr;
4111 "sorted node array");
4115 if (
node->done == 0) {
4131 if (
node->done == 0) {
4167 const std::string old_idname =
node->idname;
4204 if (
id ==
nullptr) {
4208 bool need_update =
false;
4213 if (
node->id ==
id) {
4231 if (
node->label[0] !=
'\0') {
4234 else if (
node->typeinfo->labelfunc) {
4239 if (
label[0] ==
'\0') {
4242 if (tmp ==
node->typeinfo->ui_name) {
4266 const char **
UNUSED(disabled_hint))
4274 return node->typeinfo->poll(
node->typeinfo,
ntree, disabled_hint);
4286 #define DefNode(Category, ID, DefFunc, EnumName, StructName, UIName, UIDesc) \
4288 BLI_strncpy(ntype->idname, #Category #StructName, sizeof(ntype->idname)); \
4289 ntype->rna_ext.srna = RNA_struct_find(#Category #StructName); \
4290 BLI_assert(ntype->rna_ext.srna != nullptr); \
4291 RNA_struct_blender_type_set(ntype->rna_ext.srna, ntype); \
4331 if (ntemp !=
data->ntemp) {
4332 if (
STREQ(ntemp->identifier, name)) {
4343 const char defname[],
4373 BLI_strncpy(ntemp->identifier, ntemp->name,
sizeof(ntemp->identifier));
4380 ntemp->identifier[0] =
'\0';
4384 BLI_strncpy(ntemp->identifier, ntemp->name,
sizeof(ntemp->identifier));
4400 if (maxwidth <= minwidth) {
4427 const char *storagename,
4429 void (*copyfunc)(
struct bNodeTree *dest_ntree,
4430 struct bNode *dest_node,
4431 const struct bNode *src_node))
4474 const char **
UNUSED(r_disabled_hint))
4496 "NodeSocketUndefined",
4961 if (nt->rna_ext.free) {
4962 nt->rna_ext.free(nt->rna_ext.data);
4973 if (
st->ext_socket.free) {
4974 st->ext_socket.free(
st->ext_socket.data);
4976 if (
st->ext_interface.free) {
4977 st->ext_interface.free(
st->ext_interface.data);
4988 if (nt->rna_ext.free) {
4989 nt->rna_ext.free(nt->rna_ext.data);
5022 else if (ntreeiter->
scene) {
5024 *r_id = (
ID *)ntreeiter->
scene;
5027 else if (ntreeiter->
mat) {
5029 *r_id = (
ID *)ntreeiter->
mat;
5032 else if (ntreeiter->
tex) {
5034 *r_id = (
ID *)ntreeiter->
tex;
5037 else if (ntreeiter->
light) {
5039 *r_id = (
ID *)ntreeiter->
light;
5042 else if (ntreeiter->
world) {
5044 *r_id = (
ID *)ntreeiter->
world;
5072 if (
node->custom1 == layer_index) {
5075 else if (
node->custom1 > layer_index) {
void BKE_animdata_free(struct ID *id, bool do_id_user)
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
bool BKE_animdata_fix_paths_remove(struct ID *id, const char *path)
bool BKE_bpath_foreach_path_fixed_process(struct BPathForeachPathData *bpath_data, char *path)
struct Main * CTX_data_main(const bContext *C)
void BKE_previewimg_free(struct PreviewImage **prv)
void BKE_previewimg_id_copy(struct ID *new_id, const struct ID *old_id)
void BKE_previewimg_blend_read(struct BlendDataReader *reader, struct PreviewImage *prv)
void BKE_previewimg_blend_write(struct BlendWriter *writer, const struct PreviewImage *prv)
void IDP_BlendReadExpand(struct BlendExpander *expander, struct IDProperty *prop)
struct IDProperty * IDP_CopyProperty_ex(const struct IDProperty *prop, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_BlendWrite(struct BlendWriter *writer, const struct IDProperty *prop)
void IDP_foreach_property(struct IDProperty *id_property_root, int type_filter, IDPForeachPropertyCallback callback, void *user_data)
#define IDP_BlendDataRead(reader, prop)
void IDP_FreeProperty_ex(struct IDProperty *prop, bool do_id_user)
void IDP_FreePropertyContent_ex(struct IDProperty *prop, bool do_id_user)
void IDP_BlendReadLib(struct BlendLibReader *reader, struct Library *lib, struct IDProperty *prop)
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
void(* IDTypeForeachCacheFunctionCallback)(struct ID *id, const struct IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data)
@ LIB_ID_CREATE_NO_USER_REFCOUNT
@ LIB_ID_COPY_NO_ANIMDATA
void BKE_libblock_free_data(struct ID *id, bool do_id_user) ATTR_NONNULL()
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int flag)
void id_us_min(struct ID *id)
void BKE_libblock_free_data_py(struct ID *id)
void * BKE_libblock_alloc(struct Main *bmain, short type, const char *name, int flag) ATTR_WARN_UNUSED_RESULT
void BKE_libblock_init_empty(struct ID *id) ATTR_NONNULL(1)
void id_us_plus(struct ID *id)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(_data, _id_super, _cb_flag)
#define BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(_data, _func_call)
void BKE_lib_query_idpropertiesForeachIDLink_callback(struct IDProperty *id_prop, void *user_data)
#define BKE_LIB_FOREACHID_PROCESS_ID(_data, _id, _cb_flag)
struct ListBase * which_libbase(struct Main *bmain, short type)
void *(* NodeInitExecFunction)(struct bNodeExecContext *context, struct bNode *node, bNodeInstanceKey key)
#define NODE_TYPES_BEGIN(ntype)
#define NODE_CLASS_OUTPUT
#define CMP_NODE_SPLITVIEWER
#define NODE_CUSTOM_GROUP
BLI_INLINE bNodeInstanceKey BKE_node_instance_hash_iterator_get_key(bNodeInstanceHashIterator *iter)
#define CMP_NODE_CRYPTOMATTE
#define CMP_NODE_MOVIEDISTORTION
#define GEO_NODE_INPUT_SCENE_TIME
void(* bNodeInstanceValueFP)(void *value)
BLI_INLINE void * BKE_node_instance_hash_iterator_get_value(bNodeInstanceHashIterator *iter)
void(* NodeExecFunction)(void *data, int thread, struct bNode *, struct bNodeExecData *execdata, struct bNodeStack **in, struct bNodeStack **out)
#define SH_NODE_TEX_ENVIRONMENT
void(* NodeFreeExecFunction)(void *nodedata)
#define CMP_NODE_HUECORRECT
bool nodeSupportsActiveFlag(const struct bNode *node, int sub_active)
Does the given node supports the sub active flag.
#define FN_NODE_INPUT_STRING
#define CMP_NODE_CRYPTOMATTE_LEGACY
#define CMP_NODE_OUTPUT_FILE
#define FOREACH_NODETREE_END
#define NODE_TREE_TYPES_BEGIN(ntype)
int(* NodeGPUExecFunction)(struct GPUMaterial *mat, struct bNode *node, struct bNodeExecData *execdata, struct GPUNodeStack *in, struct GPUNodeStack *out)
#define CMP_NODE_CURVE_RGB
#define NODE_SOCKET_TYPES_BEGIN(stype)
#define SH_NODE_TEX_POINTDENSITY
#define SH_NODE_CURVE_RGB
#define NODE_INSTANCE_HASH_ITER(iter_, hash_)
#define FOREACH_NODETREE_BEGIN(bmain, _nodetree, _id)
#define TEX_NODE_CURVE_TIME
#define CMP_CRYPTOMATTE_SRC_RENDER
#define NODE_TREE_TYPES_END
#define CMP_NODE_R_LAYERS
#define NODE_SOCKET_TYPES_END
#define CMP_NODE_CURVE_VEC
#define TEX_NODE_CURVE_RGB
void BKE_ntree_update_tag_interface(struct bNodeTree *ntree)
void BKE_ntree_update_tag_socket_removed(struct bNodeTree *ntree)
void BKE_ntree_update_tag_all(struct bNodeTree *ntree)
void BKE_ntree_update_tag_node_property(struct bNodeTree *ntree, struct bNode *node)
void BKE_ntree_update_tag_socket_availability(struct bNodeTree *ntree, struct bNodeSocket *socket)
void BKE_ntree_update_tag_node_new(struct bNodeTree *ntree, struct bNode *node)
void BKE_ntree_update_tag_link_mute(struct bNodeTree *ntree, struct bNodeLink *link)
void BKE_ntree_update_tag_node_removed(struct bNodeTree *ntree)
void BKE_ntree_update_tag_node_internal_link(struct bNodeTree *ntree, struct bNode *node)
void BKE_ntree_update_tag_link_changed(struct bNodeTree *ntree)
void BKE_ntree_update_tag_socket_new(struct bNodeTree *ntree, struct bNodeSocket *socket)
void BKE_ntree_update_tag_socket_type(struct bNodeTree *ntree, struct bNodeSocket *socket)
void BKE_ntree_update_main(struct Main *bmain, struct NodeTreeUpdateExtraParams *params)
void BKE_ntree_update_tag_link_removed(struct bNodeTree *ntree)
void BKE_ntree_update_tag_link_added(struct bNodeTree *ntree, struct bNodeLink *link)
void BKE_ntree_update_tag_missing_runtime_data(struct bNodeTree *ntree)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
bool BLI_ghash_haskey(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_clear(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
unsigned int BLI_ghashutil_strhash_p(const void *ptr)
GHash * BLI_ghash_str_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void(* GHashValFreeFP)(void *val)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghash_len(const GHash *gh) ATTR_WARN_UNUSED_RESULT
GHashIterator * BLI_ghashIterator_new(GHash *gh) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void * BLI_ghash_popkey(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
size_t size_t char size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL()
bool BLI_uniquename_cb(UniquenameCheckCallback unique_check, void *arg, const char *defname, char delim, char *name, size_t name_len)
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_len)
#define STREQLEN(a, b, n)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define BLO_read_data_address(reader, ptr_p)
void BLO_write_struct_by_name(BlendWriter *writer, const char *struct_name, const void *data_ptr)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
bool BLO_read_lib_is_undo(BlendLibReader *reader)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_read_id_address(reader, lib, id_ptr_p)
#define BLO_expand(expander, id)
bool BLO_write_is_undo(BlendWriter *writer)
#define BLT_I18NCONTEXT_ID_NODETREE
#define CTX_IFACE_(context, msgid)
#define CLOG_ERROR(clg_ref,...)
void DEG_relations_tag_update(struct Main *bmain)
#define ID_IS_LINKED(_id)
Object groups, one object can be in many groups at once.
#define NODE_ACTIVE_TEXTURE
#define NODE_ACTIVE_PAINT_CANVAS
struct bNodeTree bNodeTree
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
Read Guarded memory(de)allocation.
void register_node_type_sh_bevel(void)
void register_node_type_sh_curve_rgb(void)
void register_node_type_sh_map_range(void)
void register_node_type_sh_combrgb(void)
void register_node_type_sh_normal_map(void)
void register_node_type_sh_uvalongstroke(void)
void register_node_type_sh_vector_rotate(void)
void register_node_type_sh_point_info(void)
void register_node_type_sh_tex_coord(void)
void register_node_type_sh_output_world(void)
void register_node_type_sh_mix_shader(void)
void register_node_type_sh_shadertorgb(void)
void register_node_type_sh_bsdf_transparent(void)
void register_node_type_sh_group(void)
void register_node_type_sh_bsdf_refraction(void)
void register_node_type_sh_output_linestyle(void)
void register_node_type_sh_rgb(void)
void register_node_type_sh_clamp(void)
void register_node_type_sh_fresnel(void)
void register_node_type_sh_bsdf_hair(void)
void register_node_type_sh_uvmap(void)
void register_node_type_sh_bsdf_glossy(void)
void register_node_type_sh_blackbody(void)
void register_node_type_sh_background(void)
void register_node_type_sh_gamma(void)
void register_node_type_sh_emission(void)
void register_node_type_sh_script(void)
void register_node_type_sh_tangent(void)
void register_node_type_sh_subsurface_scattering(void)
void register_node_type_sh_object_info(void)
void register_node_type_sh_ambient_occlusion(void)
void register_node_type_sh_value(void)
void register_node_type_sh_tex_environment(void)
void register_node_type_sh_bsdf_glass(void)
void register_node_type_sh_curve_vec(void)
void register_node_type_sh_light_path(void)
void register_node_type_sh_vertex_color(void)
void register_node_type_sh_bsdf_toon(void)
void register_node_type_sh_tex_noise(void)
void register_node_type_sh_tex_musgrave(void)
void register_node_type_sh_sepcolor(void)
void register_node_type_sh_sepxyz(void)
void register_node_type_sh_bump(void)
void register_node_type_sh_normal(void)
void register_node_type_sh_curve_float(void)
void register_node_type_sh_combxyz(void)
void register_node_type_sh_bsdf_hair_principled(void)
void register_node_type_sh_combcolor(void)
void register_node_type_sh_tex_voronoi(void)
void register_node_type_sh_output_material(void)
void register_node_type_sh_vector_displacement(void)
void register_node_type_sh_bsdf_translucent(void)
void register_node_type_sh_hair_info(void)
void register_node_type_sh_bsdf_diffuse(void)
void register_node_type_sh_tex_magic(void)
void register_node_type_sh_geometry(void)
void register_node_type_sh_mix_rgb(void)
void register_node_type_sh_wireframe(void)
void register_node_type_sh_math(void)
void register_node_type_sh_attribute(void)
void register_node_type_sh_tex_image(void)
void register_node_type_sh_tex_pointdensity(void)
void register_node_type_sh_hue_sat(void)
void register_node_type_sh_bsdf_principled(void)
void register_node_type_sh_displacement(void)
void register_node_type_sh_tex_brick(void)
void register_node_type_sh_bsdf_velvet(void)
void register_node_type_sh_combhsv(void)
void register_node_type_sh_light_falloff(void)
void register_node_type_sh_squeeze(void)
void ntreeShaderEndExecTree(struct bNodeTreeExec *exec)
void register_node_type_sh_volume_info(void)
void register_node_type_sh_volume_absorption(void)
void register_node_type_sh_add_shader(void)
void register_node_type_sh_layer_weight(void)
void register_node_type_sh_camera(void)
void register_node_type_sh_particle_info(void)
void register_node_type_sh_tex_checker(void)
void register_node_type_sh_rgbtobw(void)
void register_node_type_sh_holdout(void)
void register_node_type_sh_wavelength(void)
void register_node_type_sh_seprgb(void)
void register_node_type_sh_mapping(void)
void register_node_type_sh_tex_wave(void)
void register_node_type_sh_volume_scatter(void)
void register_node_type_sh_valtorgb(void)
void register_node_tree_type_sh(void)
void register_node_type_sh_eevee_specular(void)
void register_node_type_sh_vect_math(void)
void register_node_type_sh_output_light(void)
void register_node_type_sh_invert(void)
void register_node_type_sh_vect_transform(void)
void register_node_type_sh_tex_white_noise(void)
void register_node_type_sh_tex_ies(void)
void register_node_type_sh_sephsv(void)
void register_node_type_sh_volume_principled(void)
void register_node_type_sh_tex_gradient(void)
void register_node_type_sh_brightcontrast(void)
void register_node_type_sh_bsdf_anisotropic(void)
void register_node_type_sh_tex_sky(void)
void register_node_type_sh_output_aov(void)
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces SH_NODE_SCRIPT
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color SH_NODE_CURVE_VEC
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between and object coordinate space Combine Create a color from its and value channels Color Retrieve a color or the default fallback if none is specified Separate Split a vector into its and Z components Generates normals with round corners and may slow down renders Vector Displace the surface along an arbitrary direction White Return a random value or color based on an input seed SH_NODE_CURVE_FLOAT
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block SH_NODE_TEX_IMAGE
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Map
void register_node_type_tex_bricks(void)
void register_node_type_tex_coord(void)
void register_node_type_tex_compose(void)
void register_node_type_tex_valtonor(void)
void ntreeTexEndExecTree(struct bNodeTreeExec *exec)
void register_node_type_tex_combine_color(void)
void register_node_type_tex_rotate(void)
void register_node_type_tex_viewer(void)
void register_node_type_tex_math(void)
void register_node_type_tex_group(void)
void register_node_type_tex_proc_distnoise(void)
void register_node_type_tex_output(void)
void register_node_type_tex_mix_rgb(void)
void register_node_type_tex_curve_rgb(void)
void register_node_type_tex_translate(void)
void register_node_type_tex_image(void)
void register_node_type_tex_proc_noise(void)
void register_node_type_tex_curve_time(void)
void register_node_type_tex_rgbtobw(void)
void register_node_type_tex_proc_marble(void)
void register_node_type_tex_proc_musgrave(void)
void register_node_type_tex_distance(void)
void register_node_type_tex_at(void)
void register_node_type_tex_valtorgb(void)
void register_node_type_tex_proc_voronoi(void)
void register_node_type_tex_proc_wood(void)
void register_node_type_tex_proc_clouds(void)
void register_node_type_tex_separate_color(void)
void register_node_type_tex_texture(void)
void register_node_type_tex_scale(void)
void register_node_type_tex_invert(void)
void register_node_type_tex_proc_magic(void)
void register_node_tree_type_tex(void)
void register_node_type_tex_proc_blend(void)
void register_node_type_tex_hue_sat(void)
void register_node_type_tex_decompose(void)
void register_node_type_tex_checker(void)
void register_node_type_tex_proc_stucci(void)
void RNA_def_struct_free_pointers(BlenderRNA *brna, StructRNA *srna)
void RNA_def_struct_duplicate_pointers(BlenderRNA *brna, StructRNA *srna)
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
int main(int argc, char *argv[])
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
bool add(const Key &key, const Value &value)
const Value & lookup(const Key &key) const
void add_new(const Key &key, const Value &value)
bool contains(const Key &key) const
std::string id_name(void *id)
DEGForeachIDComponentCallback callback
ccl_global KernelShaderEvalInput ccl_global float * output
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
size_t(* MEM_allocN_len)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
GAttributeReader lookup(const void *owner, const AttributeIDRef &attribute_id)
std::unique_ptr< IDProperty, IDPropertyDeleter > create(StringRefNull prop_name, int32_t value)
Allocate a new IDProperty of type IDP_INT, set its name and value.
bNodeSocket * node_find_enabled_socket(bNode &node, const eNodeSocketInOut in_out, const StringRef name)
bNode * node_copy_with_mapping(bNodeTree *dst_tree, const bNode &node_src, const int flag, const bool unique_name, Map< const bNodeSocket *, bNodeSocket * > &socket_map)
bNodeSocket * node_find_enabled_output_socket(bNode &node, StringRef name)
bNodeSocket * node_find_enabled_input_socket(bNode &node, StringRef name)
bNode * node_copy(bNodeTree *dst_tree, const bNode &src_node, const int flag, const bool unique_name)
SymEdge< T > * prev(const SymEdge< T > *se)
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static const pxr::TfToken preview("preview", pxr::TfToken::Immortal)
void nodeModifySocketType(bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock, const char *idname)
void node_type_gpu(struct bNodeType *ntype, NodeGPUExecFunction gpu_fn)
bNodeInstanceKey BKE_node_instance_key(bNodeInstanceKey parent_key, const bNodeTree *ntree, const bNode *node)
void nodeSocketDeclarationsUpdate(bNode *node)
void BKE_node_clipboard_init(const struct bNodeTree *ntree)
static GHash * nodetreetypes_hash
void node_type_base(bNodeType *ntype, int type, const char *name, short nclass)
static void ntree_interface_type_create(bNodeTree *ntree)
void nodeSetSocketAvailability(bNodeTree *ntree, bNodeSocket *sock, bool is_available)
void ntreeTypeFreeLink(const bNodeTreeType *nt)
bool BKE_node_preview_used(const bNode *node)
static void nodeUnMuteLink(bNodeLink *link)
void nodeRemoveSocketEx(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock, bool do_id_user)
static bNodeInstanceKey node_hash_int_str(bNodeInstanceKey hash, const char *str)
static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket *sock)
void ntreeNodeFlagSet(const bNodeTree *ntree, const int flag, const bool enable)
const char * nodeSocketTypeLabel(const bNodeSocketType *stype)
int nodeSocketLinkLimit(const bNodeSocket *sock)
static void ntree_blend_read_lib(BlendLibReader *reader, ID *id)
static void node_preview_init_tree_recursive(bNodeInstanceHash *previews, bNodeTree *ntree, bNodeInstanceKey parent_key, const int xsize, const int ysize)
StructRNA * ntreeInterfaceTypeGet(bNodeTree *ntree, bool create)
void BKE_node_preview_init_tree(bNodeTree *ntree, int xsize, int ysize)
void nodeSetSelected(bNode *node, bool select)
bNodeSocket * nodeAddSocket(bNodeTree *ntree, bNode *node, eNodeSocketInOut in_out, const char *idname, const char *identifier, const char *name)
static void node_socket_copy(bNodeSocket *sock_dst, const bNodeSocket *sock_src, const int flag)
void ntreeBlendReadExpand(BlendExpander *expander, bNodeTree *ntree)
static void ntree_blend_read_data(BlendDataReader *reader, ID *id)
bNodeSocket * ntreeAddSocketInterface(bNodeTree *ntree, eNodeSocketInOut in_out, const char *idname, const char *name)
bool nodeAttachNodeCheck(const bNode *node, const bNode *parent)
bNode * nodeAddStaticNode(const struct bContext *C, bNodeTree *ntree, int type)
void node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth)
static void update_socket_declarations(ListBase *sockets, Span< blender::nodes::SocketDeclarationPtr > declarations)
static void node_add_sockets_from_type(bNodeTree *ntree, bNode *node, bNodeType *ntype)
bNodeTree * ntreeCopyTree(Main *bmain, const bNodeTree *ntree)
struct bNodeSocket * ntreeAddSocketInterfaceFromSocket(bNodeTree *ntree, bNode *from_node, bNodeSocket *from_sock)
void ntreeFreeEmbeddedTree(bNodeTree *ntree)
static GHash * nodesockettypes_hash
bNodeLink * nodeAddLink(bNodeTree *ntree, bNode *fromnode, bNodeSocket *fromsock, bNode *tonode, bNodeSocket *tosock)
static void node_init(const struct bContext *C, bNodeTree *ntree, bNode *node)
void ntreeSetOutput(bNodeTree *ntree)
bNodeInstanceHash * BKE_node_instance_hash_new(const char *info)
bNodeType * nodeTypeFind(const char *idname)
bNodePreview * BKE_node_preview_verify(bNodeInstanceHash *previews, bNodeInstanceKey key, const int xsize, const int ysize, const bool create)
static void unique_socket_template_identifier(bNodeSocketTemplate *list, bNodeSocketTemplate *ntemp, const char defname[], char delim)
void node_type_socket_templates(struct bNodeType *ntype, struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs)
static void expand_node_sockets(BlendExpander *expander, ListBase *sockets)
const ListBase * BKE_node_clipboard_get_nodes()
const bNodeInstanceKey NODE_INSTANCE_KEY_BASE
bool nodeDeclarationEnsureOnOutdatedNode(bNodeTree *UNUSED(ntree), bNode *node)
static void ntree_blend_write(BlendWriter *writer, ID *id, const void *id_address)
static void node_set_typeinfo(const struct bContext *C, bNodeTree *ntree, bNode *node, bNodeType *typeinfo)
void node_type_update(struct bNodeType *ntype, void(*updatefunc)(struct bNodeTree *ntree, struct bNode *node))
bNodeTree * ntreeFromID(ID *id)
void BKE_nodetree_remove_layer_n(bNodeTree *ntree, Scene *scene, const int layer_index)
static void nodeMuteRerouteInputLinks(bNodeTree *ntree, bNode *node, const bool mute)
void nodePositionPropagate(bNode *node)
void nodeUnregisterType(bNodeType *nt)
static void ntree_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int flag)
void BKE_node_clipboard_add_node(bNode *node)
void nodeSetActive(bNodeTree *ntree, bNode *node)
static void registerShaderNodes()
void ntreeBlendWrite(BlendWriter *writer, bNodeTree *ntree)
void ntreeBlendReadLib(struct BlendLibReader *reader, struct bNodeTree *ntree)
bool nodeIsChildOf(const bNode *parent, const bNode *child)
void BKE_node_instance_hash_insert(bNodeInstanceHash *hash, bNodeInstanceKey key, void *value)
static bNodeSocket * make_socket_interface(bNodeTree *ntree, eNodeSocketInOut in_out, const char *idname, const char *name)
static void ntree_blend_read_expand(BlendExpander *expander, ID *id)
static void ntree_set_typeinfo(bNodeTree *ntree, bNodeTreeType *typeinfo)
void node_type_storage(bNodeType *ntype, const char *storagename, void(*freefunc)(struct bNode *node), void(*copyfunc)(struct bNodeTree *dest_ntree, struct bNode *dest_node, const struct bNode *src_node))
void BKE_node_tree_iter_init(struct NodeTreeIterStore *ntreeiter, struct Main *bmain)
void ntreeUpdateAllUsers(Main *main, ID *id)
bNodeTree * ntreeLocalize(bNodeTree *ntree)
void BKE_node_preview_remove_unused(bNodeTree *ntree)
static blender::Set< int > get_known_node_types_set()
const ListBase * BKE_node_clipboard_get_links()
void nodeChainIter(const bNodeTree *ntree, const bNode *node_start, bool(*callback)(bNode *, bNode *, void *, const bool), void *userdata, const bool reversed)
static bool node_poll_instance_default(bNode *node, bNodeTree *ntree, const char **disabled_hint)
static void expand_node_socket(BlendExpander *expander, bNodeSocket *sock)
GHashIterator * nodeTypeGetIterator()
static bool ntree_interface_unique_identifier_check(void *UNUSED(data), const char *identifier)
static bool node_instance_hash_key_cmp(const void *a, const void *b)
bool ntreeHasTree(const bNodeTree *ntree, const bNodeTree *lookup)
bool nodeFindNode(bNodeTree *ntree, bNodeSocket *sock, bNode **r_node, int *r_sockindex)
int nodeSocketIsHidden(const bNodeSocket *sock)
int nodeCountSocketLinks(const bNodeTree *ntree, const bNodeSocket *sock)
static ID * node_owner_get(Main *bmain, ID *id, ID *owner_id_hint)
void ntreeFreeCache(bNodeTree *ntree)
static bool unique_socket_template_identifier_check(void *arg, const char *name)
bool nodeDeclarationEnsure(bNodeTree *ntree, bNode *node)
void nodeFromView(const bNode *node, float x, float y, float *rx, float *ry)
void nodeMuteLinkToggle(bNodeTree *ntree, bNodeLink *link)
struct bNodeSocket * ntreeInsertSocketInterfaceFromSocket(bNodeTree *ntree, bNodeSocket *next_sock, bNode *from_node, bNodeSocket *from_sock)
void ntreeUpdateNodeLevels(bNodeTree *ntree)
void BKE_node_preview_free(bNodePreview *preview)
const char * nodeStaticSocketLabel(int type, int UNUSED(subtype))
static int node_count_links(const bNodeTree *ntree, const bNodeSocket *socket)
void BKE_node_preview_clear(bNodePreview *preview)
void node_type_init(struct bNodeType *ntype, void(*initfunc)(struct bNodeTree *ntree, struct bNode *node))
int BKE_node_instance_hash_remove(bNodeInstanceHash *hash, bNodeInstanceKey key, bNodeInstanceValueFP valfreefp)
void ntreeUpdateAllNew(Main *main)
static void registerFunctionNodes()
bool nodeSocketIsRegistered(bNodeSocket *sock)
static void node_socket_interface_free(bNodeTree *UNUSED(ntree), bNodeSocket *sock, const bool do_id_user)
static void direct_link_node_socket(BlendDataReader *reader, bNodeSocket *sock)
void nodeModifySocketTypeStatic(bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype)
bNodeType NodeTypeUndefined
bNodeTreeType * ntreeTypeFind(const char *idname)
#define NODE_DEFAULT_MAX_WIDTH
void node_type_size_preset(struct bNodeType *ntype, eNodeSizePreset size)
const char * nodeSocketLabel(const bNodeSocket *sock)
static void node_unlink_attached(bNodeTree *ntree, bNode *parent)
bNode * nodeFindNodebyName(bNodeTree *ntree, const char *name)
void BKE_node_preview_merge_tree(bNodeTree *to_ntree, bNodeTree *from_ntree, bool remove_old)
static void update_typeinfo(Main *bmain, const struct bContext *C, bNodeTreeType *treetype, bNodeType *nodetype, bNodeSocketType *socktype, bool unregister)
bool nodeLinkIsSelected(const bNodeLink *link)
GHashIterator * ntreeTypeGetIterator()
static void node_preview_tag_used_recursive(bNodeInstanceHash *previews, bNodeTree *ntree, bNodeInstanceKey parent_key)
void * BKE_node_instance_hash_pop(bNodeInstanceHash *hash, bNodeInstanceKey key)
int BKE_node_instance_hash_haskey(bNodeInstanceHash *hash, bNodeInstanceKey key)
bool ntreeIsRegistered(bNodeTree *ntree)
bool BKE_node_clipboard_validate()
static bool node_poll_default(bNodeType *UNUSED(ntype), bNodeTree *UNUSED(ntree), const char **UNUSED(disabled_hint))
static bool node_undefined_poll(bNodeType *UNUSED(ntype), bNodeTree *UNUSED(nodetree), const char **UNUSED(r_disabled_hint))
void nodeRegisterType(bNodeType *nt)
bNode * nodeGetActive(bNodeTree *ntree)
static GHash * nodetypes_hash
bNodeTree * ntreeAddTree(Main *bmain, const char *name, const char *idname)
GHashIterator * nodeSocketTypeGetIterator()
static void node_free_node(bNodeTree *ntree, bNode *node)
bNodeSocketType * nodeSocketTypeFind(const char *idname)
void ntreeTypeAdd(bNodeTreeType *nt)
void nodeClearActive(bNodeTree *ntree)
void ntreeFreeTree(bNodeTree *ntree)
static void registerTextureNodes()
static void node_foreach_id(ID *id, LibraryForeachIDData *data)
bool BKE_node_instance_hash_tag_key(bNodeInstanceHash *hash, bNodeInstanceKey key)
bNodeSocket * ntreeInsertSocketInterface(bNodeTree *ntree, eNodeSocketInOut in_out, const char *idname, bNodeSocket *next_sock, const char *name)
void ntreeFreeLocalNode(bNodeTree *ntree, bNode *node)
void BKE_node_instance_hash_clear(bNodeInstanceHash *hash, bNodeInstanceValueFP valfreefp)
static bNodeClipboard node_clipboard
void node_type_group_update(struct bNodeType *ntype, void(*group_update_func)(struct bNodeTree *ntree, struct bNode *node))
static bool unique_identifier_check(void *arg, const char *identifier)
static void ntree_interface_identifier(bNodeTree *ntree, const char *base, char *identifier, int maxlen, char *name, char *description)
const char * nodeStaticSocketType(int type, int subtype)
void BKE_node_preview_clear_tree(bNodeTree *ntree)
static void node_replace_undefined_types(bNode *node)
bNodeSocket * ntreeFindSocketInterface(bNodeTree *ntree, eNodeSocketInOut in_out, const char *identifier)
void BKE_node_clipboard_free()
static unsigned int node_instance_hash_key(const void *key)
bNodeLink * nodeFindLink(bNodeTree *ntree, const bNodeSocket *from, const bNodeSocket *to)
void nodeInternalRelink(bNodeTree *ntree, bNode *node)
bool nodeIsStaticSocketType(const struct bNodeSocketType *stype)
bool BKE_node_tree_iter_step(struct NodeTreeIterStore *ntreeiter, bNodeTree **r_nodetree, struct ID **r_id)
static bNodeSocket * make_socket(bNodeTree *ntree, bNode *UNUSED(node), int in_out, ListBase *lb, const char *idname, const char *identifier, const char *name)
static int node_get_deplist_recurs(bNodeTree *ntree, bNode *node, bNode ***nsort)
void BKE_node_instance_hash_tag(bNodeInstanceHash *UNUSED(hash), void *value)
const char * nodeStaticSocketInterfaceType(int type, int subtype)
static void ntree_interface_identifier_base(bNodeTree *ntree, char *base)
bNodeSocket * nodeAddStaticSocket(bNodeTree *ntree, bNode *node, eNodeSocketInOut in_out, int type, int subtype, const char *identifier, const char *name)
static void free_localized_node_groups(bNodeTree *ntree)
void nodeParentsIter(bNode *node, bool(*callback)(bNode *, void *), void *userdata)
void BKE_node_clipboard_add_link(bNodeLink *link)
static void registerGeometryNodes()
static void socket_id_user_increment(bNodeSocket *sock)
int BKE_node_instance_hash_size(bNodeInstanceHash *hash)
void nodeRemLink(bNodeTree *ntree, bNodeLink *link)
void nodeRemoveSocket(bNodeTree *ntree, bNode *node, bNodeSocket *sock)
void nodeRemSocketLinks(bNodeTree *ntree, bNodeSocket *sock)
bool nodeLinkIsHidden(const bNodeLink *link)
void nodeUniqueName(bNodeTree *ntree, bNode *node)
static bool socket_id_user_decrement(bNodeSocket *sock)
void ntreeSetTypes(const struct bContext *C, bNodeTree *ntree)
void nodePositionRelative(bNode *from_node, bNode *to_node, bNodeSocket *from_sock, bNodeSocket *to_sock)
static void nodeMuteLink(bNodeLink *link)
bool nodeTypeUndefined(const bNode *node)
void BKE_node_instance_hash_remove_untagged(bNodeInstanceHash *hash, bNodeInstanceValueFP valfreefp)
static void node_free_socket_type(void *socktype_v)
void ntreeLocalMerge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
void nodeToView(const bNode *node, float x, float y, float *rx, float *ry)
static void node_foreach_path(ID *id, BPathForeachPathData *bpath_data)
void nodeRemoveNode(Main *bmain, bNodeTree *ntree, bNode *node, bool do_id_user)
static void ntree_free_type(void *treetype_v)
static void register_undefined_types()
static void adjust_multi_input_indices_after_removed_link(bNodeTree *ntree, bNodeSocket *sock, int deleted_index)
static void write_node_socket_default_value(BlendWriter *writer, bNodeSocket *sock)
static bool nodeMuteFromSocketLinks(const bNodeTree *ntree, const bNodeSocket *sock)
static void node_socket_free(bNodeSocket *sock, const bool do_id_user)
bNodeTree ** BKE_ntree_ptr_from_id(ID *id)
void BKE_node_clipboard_clear()
void ntreeRemoveSocketInterface(bNodeTree *ntree, bNodeSocket *sock)
static void node_socket_set_typeinfo(bNodeTree *ntree, bNodeSocket *sock, bNodeSocketType *typeinfo)
static void nodeMuteRerouteOutputLinks(struct bNodeTree *ntree, struct bNode *node, const bool mute)
static bool can_read_node_type(const int type)
bNode * nodeFindRootParent(bNode *node)
static void lib_link_node_socket(BlendLibReader *reader, Library *lib, bNodeSocket *sock)
void nodeChainIterBackwards(const bNodeTree *ntree, const bNode *node_start, bool(*callback)(bNode *, bNode *, void *), void *userdata, int recursion_lvl)
const bNodeInstanceKey NODE_INSTANCE_KEY_NONE
static void node_type_base_defaults(bNodeType *ntype)
int BKE_node_clipboard_get_type()
void nodeUnlinkNode(bNodeTree *ntree, bNode *node)
static void iter_backwards_ex(const bNodeTree *ntree, const bNode *node_start, bool(*callback)(bNode *, bNode *, void *), void *userdata, char recursion_mask)
bNode * ntreeFindType(const bNodeTree *ntree, int type)
void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node)
bNode * nodeAddNode(const struct bContext *C, bNodeTree *ntree, const char *idname)
void BKE_node_instance_hash_clear_tags(bNodeInstanceHash *hash)
static void write_node_socket_interface(BlendWriter *writer, bNodeSocket *sock)
void ntreeBlendReadData(BlendDataReader *reader, bNodeTree *ntree)
void node_type_base_custom(bNodeType *ntype, const char *idname, const char *name, short nclass)
void ntreeInterfaceTypeFree(bNodeTree *ntree)
void node_type_exec(struct bNodeType *ntype, NodeInitExecFunction init_exec_fn, NodeFreeExecFunction free_exec_fn, NodeExecFunction exec_fn)
void nodeUnregisterSocketType(bNodeSocketType *st)
static bNodeTreeType NodeTreeTypeUndefined
void ntreeFreeLocalTree(bNodeTree *ntree)
void nodeDetachNode(struct bNode *node)
void ntreeGetDependencyList(struct bNodeTree *ntree, struct bNode ***r_deplist, int *r_deplist_len)
void nodeLabel(const bNodeTree *ntree, const bNode *node, char *label, int maxlen)
struct bNodeSocket * nodeFindSocket(const bNode *node, eNodeSocketInOut in_out, const char *identifier)
bNodePreview * BKE_node_preview_copy(bNodePreview *preview)
void * BKE_node_instance_hash_lookup(bNodeInstanceHash *hash, bNodeInstanceKey key)
static void node_foreach_cache(ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
bNodeTree * ntreeCopyTree_ex(const bNodeTree *ntree, Main *bmain, const bool do_id_user)
void BKE_node_instance_hash_free(bNodeInstanceHash *hash, bNodeInstanceValueFP valfreefp)
void ntreeInterfaceTypeUpdate(bNodeTree *ntree)
void BKE_node_system_init()
void BKE_node_system_exit()
static void registerCompositNodes()
static void ntree_init_data(ID *id)
void nodeAttachNode(bNode *node, bNode *parent)
static void ntree_free_data(ID *id)
static void lib_link_node_sockets(BlendLibReader *reader, Library *lib, ListBase *sockets)
static void write_node_socket(BlendWriter *writer, bNodeSocket *sock)
void nodeRegisterSocketType(bNodeSocketType *st)
bNodeSocketType NodeSocketTypeUndefined
static void node_free_type(void *nodetype_v)
void register_node_type_group_output()
void register_node_type_group_input()
void register_node_type_frame()
void register_node_type_reroute()
void register_node_type_cmp_alphaover()
void register_node_type_cmp_antialiasing()
void register_node_type_cmp_bilateralblur()
void register_node_type_cmp_blur()
void register_node_type_cmp_bokehblur()
void register_node_type_cmp_bokehimage()
void register_node_type_cmp_boxmask()
void register_node_type_cmp_brightcontrast()
void register_node_type_cmp_channel_matte()
void register_node_type_cmp_chroma_matte()
void register_node_type_cmp_color_matte()
void register_node_type_cmp_color_spill()
void register_node_type_cmp_colorbalance()
void register_node_type_cmp_colorcorrection()
void register_node_type_cmp_group()
void register_node_type_cmp_composite()
void register_node_type_cmp_convert_color_space(void)
void register_node_type_cmp_cornerpin()
void register_node_type_cmp_crop()
void register_node_type_cmp_cryptomatte_legacy()
void register_node_type_cmp_cryptomatte()
void register_node_type_cmp_curve_rgb()
void register_node_type_cmp_curve_time()
void register_node_type_cmp_curve_vec()
void register_node_type_cmp_defocus()
void register_node_type_cmp_denoise()
void register_node_type_cmp_despeckle()
void register_node_type_cmp_diff_matte()
void register_node_type_cmp_dilateerode()
void register_node_type_cmp_dblur()
void register_node_type_cmp_displace()
void register_node_type_cmp_distance_matte()
void register_node_type_cmp_doubleedgemask()
void register_node_type_cmp_ellipsemask()
void register_node_type_cmp_exposure()
void register_node_type_cmp_filter()
void register_node_type_cmp_flip()
void register_node_type_cmp_gamma()
void register_node_type_cmp_glare()
void register_node_type_cmp_hue_sat()
void register_node_type_cmp_huecorrect()
void register_node_type_cmp_idmask()
void register_node_type_cmp_image()
void register_node_type_cmp_rlayers()
void register_node_type_cmp_inpaint()
void register_node_type_cmp_invert()
void register_node_type_cmp_keying()
void register_node_type_cmp_keyingscreen()
void register_node_type_cmp_lensdist()
void register_node_type_cmp_view_levels()
void register_node_type_cmp_luma_matte()
void register_node_type_cmp_map_range()
void register_node_type_cmp_mapuv()
void register_node_type_cmp_map_value()
void register_node_type_cmp_mask()
void register_node_type_cmp_math()
void register_node_type_cmp_mix_rgb()
void register_node_type_cmp_movieclip()
void register_node_type_cmp_moviedistortion()
void register_node_type_cmp_normal()
void register_node_type_cmp_normalize()
void register_node_type_cmp_output_file()
void register_node_type_cmp_pixelate()
void register_node_type_cmp_posterize()
void register_node_type_cmp_premulkey()
void register_node_type_cmp_rgb()
void register_node_type_cmp_rotate()
void register_node_type_cmp_scale()
void register_node_type_cmp_scene_time()
void register_node_type_cmp_combine_color()
void register_node_type_cmp_separate_color()
void register_node_type_cmp_combhsva()
void register_node_type_cmp_sephsva()
void register_node_type_cmp_combrgba()
void register_node_type_cmp_seprgba()
void register_node_type_cmp_separate_xyz()
void register_node_type_cmp_combine_xyz()
void register_node_type_cmp_sepycca()
void register_node_type_cmp_combycca()
void register_node_type_cmp_sepyuva()
void register_node_type_cmp_combyuva()
void register_node_type_cmp_setalpha()
void register_node_type_cmp_splitviewer()
void register_node_type_cmp_stabilize2d()
void register_node_type_cmp_sunbeams()
void register_node_type_cmp_switch()
void register_node_type_cmp_switch_view()
void register_node_type_cmp_texture()
void register_node_type_cmp_tonemap()
void register_node_type_cmp_trackpos()
void register_node_type_cmp_translate()
void register_node_tree_type_cmp()
void register_node_type_cmp_valtorgb()
void register_node_type_cmp_rgbtobw()
void register_node_type_cmp_value()
void register_node_type_cmp_vecblur()
void register_node_type_cmp_viewer()
void register_node_type_cmp_zcombine()
void register_node_type_fn_align_euler_to_vector()
void register_node_type_fn_boolean_math()
void register_node_type_fn_combine_color(void)
void register_node_type_fn_compare()
void register_node_type_fn_float_to_int()
void register_node_type_fn_random_value()
void register_node_type_fn_replace_string()
void register_node_type_fn_rotate_euler()
void register_node_type_fn_separate_color(void)
void register_node_type_fn_slice_string()
void register_node_type_fn_string_length()
void register_node_type_fn_value_to_string()
void register_node_type_geo_accumulate_field()
void register_node_type_geo_attribute_capture()
void register_node_type_geo_attribute_domain_size()
void register_node_type_geo_attribute_statistic()
void register_node_type_geo_boolean()
void register_node_type_geo_bounding_box()
void register_node_type_geo_collection_info()
void register_node_type_geo_group()
void register_node_type_geo_convex_hull()
void register_node_type_geo_curve_endpoint_selection()
void register_node_type_geo_curve_fill()
void register_node_type_geo_curve_fillet()
void register_node_type_geo_curve_handle_type_selection()
void register_node_type_geo_curve_length()
void register_node_type_geo_curve_primitive_arc()
void register_node_type_geo_curve_primitive_bezier_segment()
void register_node_type_geo_curve_primitive_circle()
void register_node_type_geo_curve_primitive_line()
void register_node_type_geo_curve_primitive_quadratic_bezier()
void register_node_type_geo_curve_primitive_quadrilateral()
void register_node_type_geo_curve_primitive_spiral()
void register_node_type_geo_curve_primitive_star()
void register_node_type_geo_curve_resample()
void register_node_type_geo_curve_reverse()
void register_node_type_geo_curve_sample()
void register_node_type_geo_curve_set_handle_type()
void register_node_type_geo_curve_spline_parameter()
void register_node_type_geo_curve_spline_type()
void register_node_type_geo_curve_subdivide()
void register_node_type_geo_curve_to_mesh()
void register_node_type_geo_curve_to_points()
void register_node_type_geo_curve_trim()
void register_node_type_geo_delete_geometry()
void register_node_type_geo_distribute_points_on_faces()
void register_node_type_geo_dual_mesh()
void register_node_type_geo_duplicate_elements()
void register_node_type_geo_edge_paths_to_curves()
void register_node_type_geo_edge_paths_to_selection()
void register_node_type_geo_edge_split()
void register_node_type_geo_extrude_mesh()
void register_node_type_geo_field_at_index()
void register_node_type_geo_flip_faces()
void register_node_type_geo_geometry_to_instance()
void register_node_type_geo_image_texture()
void register_node_type_geo_instance_on_points()
void register_node_type_geo_instances_to_points()
void register_node_type_geo_interpolate_domain()
void register_node_type_geo_is_viewport()
void register_node_type_geo_join_geometry()
void register_node_type_geo_material_replace()
void register_node_type_geo_material_selection()
void register_node_type_geo_merge_by_distance()
void register_node_type_geo_mesh_primitive_circle()
void register_node_type_geo_mesh_primitive_cone()
void register_node_type_geo_mesh_primitive_cube()
void register_node_type_geo_mesh_primitive_cylinder()
void register_node_type_geo_mesh_primitive_grid()
void register_node_type_geo_mesh_primitive_ico_sphere()
void register_node_type_geo_mesh_primitive_line()
void register_node_type_geo_mesh_primitive_uv_sphere()
void register_node_type_geo_mesh_subdivide()
void register_node_type_geo_mesh_to_curve()
void register_node_type_geo_mesh_to_points()
void register_node_type_geo_mesh_to_volume()
void register_node_type_geo_object_info()
void register_node_type_geo_points()
void register_node_type_geo_points_to_vertices()
void register_node_type_geo_points_to_volume()
void register_node_type_geo_proximity()
void register_node_type_geo_raycast()
void register_node_type_geo_realize_instances()
void register_node_type_geo_remove_attribute()
void register_node_type_geo_rotate_instances()
void register_node_type_geo_scale_elements()
void register_node_type_geo_scale_instances()
void register_node_type_geo_separate_components()
void register_node_type_geo_separate_geometry()
void register_node_type_geo_set_curve_handles()
void register_node_type_geo_set_curve_radius()
void register_node_type_geo_set_curve_tilt()
void register_node_type_geo_set_id()
void register_node_type_geo_set_material()
void register_node_type_geo_set_material_index()
void register_node_type_geo_set_point_radius()
void register_node_type_geo_set_position()
void register_node_type_geo_set_shade_smooth()
void register_node_type_geo_set_spline_cyclic()
void register_node_type_geo_set_spline_resolution()
void register_node_type_geo_store_named_attribute()
void register_node_type_geo_string_join()
void register_node_type_geo_string_to_curves()
void register_node_type_geo_subdivision_surface()
void register_node_type_geo_switch()
void register_node_type_geo_transfer_attribute()
void register_node_type_geo_translate_instances()
void register_node_type_geo_triangulate()
void register_node_type_geo_uv_pack_islands()
void register_node_type_geo_uv_unwrap()
void register_node_type_geo_viewer()
void register_node_type_geo_volume_cube()
void register_node_type_geo_volume_to_mesh()
void register_node_tree_type_geo()
void node_socket_init_default_value(bNodeSocket *sock)
struct bNodeSocket * node_add_socket_from_template(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocketTemplate *stemp, eNodeSocketInOut in_out)
void node_verify_sockets(bNodeTree *ntree, bNode *node, bool do_id_user)
void register_standard_node_socket_types()
static bNodeSocketTemplate outputs[]
static bNodeSocketTemplate inputs[]
static void unique_name(bNode *node)
const char * RNA_struct_identifier(const StructRNA *type)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
const char * RNA_struct_ui_name(const StructRNA *type)
StructRNA * RNA_struct_find(const char *identifier)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_identifier_sanitize(char *identifier, int property)
void RNA_def_struct_identifier(BlenderRNA *brna, StructRNA *srna, const char *identifier)
StructRNA * RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
StructRNA RNA_PropertyGroup
struct bNodeTree * nodetree
unsigned int id_session_uuid
struct bNodeTree * nodetree
struct bNodeTree * nodetree
NodeCryptomatte_Runtime runtime
struct Simulation * simulation
struct FreestyleLineStyle * linestyle
struct bNodeTree * nodetree
struct bNodeTree * nodetree
bNodeSocketTemplate * list
bNodeSocketTemplate * ntemp
struct bNodeTree * nodetree
struct bNodeTree * nodetree
ListBase nodes_extra_info
int multi_input_socket_index
Compact definition of a node socket.
void(* interface_from_socket)(struct bNodeTree *ntree, struct bNodeSocket *interface_socket, struct bNode *node, struct bNodeSocket *sock)
bool use_link_limits_of_type
void(* free_self)(struct bNodeSocketType *stype)
void(* interface_register_properties)(struct bNodeTree *ntree, struct bNodeSocket *interface_socket, struct StructRNA *data_srna)
struct Collection * value
bNodeSocketRuntimeHandle * runtime
char * default_attribute_name
struct bNodeSocketType * typeinfo
void(* free_node_cache)(struct bNodeTree *ntree, struct bNode *node)
void(* local_merge)(struct Main *bmain, struct bNodeTree *localtree, struct bNodeTree *ntree)
void(* free_cache)(struct bNodeTree *ntree)
void(* localize)(struct bNodeTree *localtree, struct bNodeTree *ntree)
void(* node_add_init)(struct bNodeTree *ntree, struct bNode *bnode)
void(* progress)(void *, float progress)
bNodeTreeRuntimeHandle * runtime
struct bNodeInstanceHash * previews
struct PreviewImage * preview
struct bNodeTreeType * typeinfo
struct StructRNA * interface_type
struct bNodeTreeExec * execdata
void(* copyfunc)(struct bNodeTree *dest_ntree, struct bNode *dest_node, const struct bNode *src_node)
void(* group_update_func)(struct bNodeTree *ntree, struct bNode *node)
bool(* poll)(struct bNodeType *ntype, struct bNodeTree *nodetree, const char **r_disabled_hint)
NodeInitExecFunction init_exec_fn
void(* updatefunc)(struct bNodeTree *ntree, struct bNode *node)
bNodeSocketTemplate * outputs
void(* initfunc_api)(const struct bContext *C, struct PointerRNA *ptr)
void(* free_self)(struct bNodeType *ntype)
bool declaration_is_dynamic
void(* freefunc)(struct bNode *node)
NodeGPUExecFunction gpu_fn
NodeDeclareFunction declare
bNodeSocketTemplate * inputs
bool(* poll_instance)(struct bNode *node, struct bNodeTree *nodetree, const char **r_disabled_hint)
void(* initfunc)(struct bNodeTree *ntree, struct bNode *node)
void(* copyfunc_api)(struct PointerRNA *ptr, const struct bNode *src_node)
NodeFreeExecFunction free_exec_fn
NodeDeclarationHandle * fixed_declaration
struct bNodeType * typeinfo
bNodeRuntimeHandle * runtime