diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_node.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 92 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_ops.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_buttons/buttons_texture.c | 6 | ||||
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 49 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_buttons.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_draw.c | 10 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_templates.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/space_node.c | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_nodetree.c | 66 | ||||
-rw-r--r-- | source/blender/nodes/intern/node_exec.c | 2 |
11 files changed, 159 insertions, 81 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index d9a311b7e13..25b81ab3028 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -83,6 +83,7 @@ struct ColorManagedViewSettings; struct ColorManagedDisplaySettings; struct bNodeInstanceHash; + /* ************** NODE TYPE DEFINITIONS ***** */ /** Compact definition of a node socket. @@ -331,6 +332,7 @@ typedef struct bNodeTreeType { struct bNodeTreeType *ntreeTypeFind(const char *idname); void ntreeTypeAdd(struct bNodeTreeType *nt); void ntreeTypeFreeLink(struct bNodeTreeType *nt); +bool ntreeIsRegistered(struct bNodeTree *ntree); struct GHashIterator *ntreeTypeGetIterator(void); /* helper macros for iterating over tree types */ @@ -346,7 +348,6 @@ struct GHashIterator *ntreeTypeGetIterator(void); } void ntreeSetTypes(const struct bContext *C, struct bNodeTree *ntree); -int ntreeIsValid(struct bNodeTree *ntree); struct bNodeTree *ntreeAddTree(struct Main *bmain, const char *name, const char *idname); @@ -407,6 +408,7 @@ void ntreeInterfaceTypeUpdate(struct bNodeTree *ntree); struct bNodeType *nodeTypeFind(const char *idname); void nodeRegisterType(struct bNodeType *ntype); void nodeUnregisterType(struct bNodeType *ntype); +bool nodeIsRegistered(struct bNode *node); struct GHashIterator *nodeTypeGetIterator(void); /* helper macros for iterating over node types */ @@ -424,6 +426,7 @@ struct GHashIterator *nodeTypeGetIterator(void); struct bNodeSocketType *nodeSocketTypeFind(const char *idname); void nodeRegisterSocketType(struct bNodeSocketType *stype); void nodeUnregisterSocketType(struct bNodeSocketType *stype); +bool nodeSocketIsRegistered(struct bNodeSocket *sock); struct GHashIterator *nodeSocketTypeGetIterator(void); const char * nodeStaticSocketType(int type, int subtype); const char * nodeStaticSocketInterfaceType(int type, int subtype); diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 757571b9cf6..7583b17eaf1 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -74,6 +74,11 @@ #include "NOD_shader.h" #include "NOD_texture.h" +/* Fallback types for undefined tree, nodes, sockets */ +bNodeTreeType NodeTreeTypeUndefined; +bNodeType NodeTypeUndefined; +bNodeSocketType NodeSocketTypeUndefined; + static void node_add_sockets_from_type(bNodeTree *ntree, bNode *node, bNodeType *ntype) { @@ -101,12 +106,11 @@ static void node_add_sockets_from_type(bNodeTree *ntree, bNode *node, bNodeType /* Note: This function is called to initialize node data based on the type. * The bNodeType may not be registered at creation time of the node, * so this can be delayed until the node type gets registered. - * The node->typeinfo must not be used in that case until it is defined! */ static void node_init(const struct bContext *C, bNodeTree *ntree, bNode *node) { bNodeType *ntype = node->typeinfo; - if (!ntype) + if (ntype == &NodeTypeUndefined) return; /* only do this once */ @@ -151,22 +155,24 @@ static void node_init(const struct bContext *C, bNodeTree *ntree, bNode *node) static void ntree_set_typeinfo(bNodeTree *ntree, bNodeTreeType *typeinfo) { - ntree->typeinfo = typeinfo; - if (typeinfo) { + ntree->typeinfo = typeinfo; + /* deprecated integer type */ ntree->type = typeinfo->type; } else { + ntree->typeinfo = &NodeTreeTypeUndefined; + ntree->init &= ~NTREE_TYPE_INIT; } } static void node_set_typeinfo(const struct bContext *C, bNodeTree *ntree, bNode *node, bNodeType *typeinfo) { - node->typeinfo = typeinfo; - if (typeinfo) { + node->typeinfo = typeinfo; + /* deprecated integer type */ node->type = typeinfo->type; @@ -174,21 +180,25 @@ static void node_set_typeinfo(const struct bContext *C, bNodeTree *ntree, bNode node_init(C, ntree, node); } else { + node->typeinfo = &NodeTypeUndefined; + ntree->init &= ~NTREE_TYPE_INIT; } } static void node_socket_set_typeinfo(bNodeTree *ntree, bNodeSocket *sock, bNodeSocketType *typeinfo) { - sock->typeinfo = typeinfo; - if (typeinfo) { + sock->typeinfo = typeinfo; + if (sock->default_value == NULL) { /* initialize the default_value pointer used by standard socket types */ node_socket_init_default_value(sock); } } else { + sock->typeinfo = &NodeSocketTypeUndefined; + ntree->init &= ~NTREE_TYPE_INIT; } } @@ -301,14 +311,14 @@ void ntreeTypeFreeLink(bNodeTreeType *nt) BLI_ghash_remove(nodetreetypes_hash, nt->idname, NULL, ntree_free_type); } -GHashIterator *ntreeTypeGetIterator(void) +bool ntreeIsRegistered(bNodeTree *ntree) { - return BLI_ghashIterator_new(nodetreetypes_hash); + return (ntree->typeinfo != &NodeTreeTypeUndefined); } -int ntreeIsValid(bNodeTree *ntree) +GHashIterator *ntreeTypeGetIterator(void) { - return (ntree && (ntree->init & NTREE_TYPE_INIT)); + return BLI_ghashIterator_new(nodetreetypes_hash); } bNodeType *nodeTypeFind(const char *idname) @@ -370,6 +380,11 @@ void nodeUnregisterType(bNodeType *nt) BLI_ghash_remove(nodetypes_hash, nt->idname, NULL, node_free_type); } +bool nodeIsRegistered(bNode *node) +{ + return (node->typeinfo != &NodeTypeUndefined); +} + GHashIterator *nodeTypeGetIterator(void) { return BLI_ghashIterator_new(nodetypes_hash); @@ -410,6 +425,11 @@ void nodeUnregisterSocketType(bNodeSocketType *st) BLI_ghash_remove(nodesockettypes_hash, st->idname, NULL, node_free_socket_type); } +bool nodeSocketIsRegistered(bNodeSocket *sock) +{ + return (sock->typeinfo != &NodeSocketTypeUndefined); +} + GHashIterator *nodeSocketTypeGetIterator(void) { return BLI_ghashIterator_new(nodesockettypes_hash); @@ -1887,7 +1907,7 @@ int ntreeOutputExists(bNode *node, bNodeSocket *testsock) /* returns localized tree for execution in threads */ bNodeTree *ntreeLocalize(bNodeTree *ntree) { - if (ntreeIsValid(ntree)) { + if (ntree) { bNodeTree *ltree; bNode *node; @@ -1944,7 +1964,7 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree) /* is called by jobs manager, outside threads, so it doesnt happen during draw */ void ntreeLocalSync(bNodeTree *localtree, bNodeTree *ntree) { - if (localtree && ntreeIsValid(ntree)) { + if (localtree && ntree) { /* XXX syncing was disabled for compositor nodes. * It has to be ensured that there is no concurrent read/write access! * Possibly needs a mutex lock or a flag to disable for certain tree types ... @@ -1960,7 +1980,7 @@ void ntreeLocalSync(bNodeTree *localtree, bNodeTree *ntree) /* we have to assume the editor already changed completely */ void ntreeLocalMerge(bNodeTree *localtree, bNodeTree *ntree) { - if (localtree && ntreeIsValid(ntree)) { + if (localtree && ntree) { BKE_node_preview_merge_tree(ntree, localtree); if (ntree->typeinfo->local_merge) @@ -2831,11 +2851,8 @@ void ntreeVerifyNodes(struct Main *main, struct ID *id) FOREACH_NODETREE(main, ntree, owner_id) { bNode *node; - if (!ntreeIsValid(ntree)) - return; - for (node = ntree->nodes.first; node; node = node->next) - if (node->typeinfo && node->typeinfo->verifyfunc) + if (node->typeinfo->verifyfunc) node->typeinfo->verifyfunc(ntree, node, id); } FOREACH_NODETREE_END } @@ -2844,15 +2861,14 @@ void ntreeUpdateTree(bNodeTree *ntree) { bNode *node; + if (!ntree) + return; + /* avoid reentrant updates, can be caused by RNA update callbacks */ if (ntree->is_updating) return; ntree->is_updating = TRUE; - /* only if types are initialized */ - if (!ntreeIsValid(ntree)) - return; - if (ntree->update & (NTREE_UPDATE_LINKS | NTREE_UPDATE_NODES)) { /* set the bNodeSocket->link pointers */ ntree_update_link_pointers(ntree); @@ -3239,6 +3255,34 @@ void node_type_compatibility(struct bNodeType *ntype, short compatibility) ntype->compatibility = compatibility; } +/* callbacks for undefined types */ + +static int node_undefined_poll(bNodeType *UNUSED(ntype), bNodeTree *UNUSED(nodetree)) +{ + /* this type can not be added deliberately, it's just a placeholder */ + return false; +} + +/* register fallback types used for undefined tree, nodes, sockets */ +static void register_undefined_types(void) +{ + /* Note: these types are not registered in the type hashes, + * they are just used as placeholders in case the actual types are not registered. + */ + + strcpy(NodeTreeTypeUndefined.idname, "NodeTreeUndefined"); + strcpy(NodeTreeTypeUndefined.ui_name, "Undefined"); + strcpy(NodeTreeTypeUndefined.ui_description, "Undefined Node Tree Type"); + + node_type_base_custom(&NodeTypeUndefined, "NodeUndefined", "Undefined", 0, 0); + NodeTypeUndefined.poll = node_undefined_poll; + + BLI_strncpy(NodeSocketTypeUndefined.idname, "NodeSocketUndefined", sizeof(NodeSocketTypeUndefined.idname)); + /* extra type info for standard socket types */ + NodeSocketTypeUndefined.type = SOCK_CUSTOM; + NodeSocketTypeUndefined.subtype = PROP_NONE; +} + static void registerCompositNodes(void) { register_node_type_cmp_group(); @@ -3464,6 +3508,8 @@ void init_nodesystem(void) nodetypes_hash = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "nodetypes_hash gh"); nodesockettypes_hash = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "nodesockettypes_hash gh"); + register_undefined_types(); + register_standard_node_socket_types(); register_node_tree_type_cmp(); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 8b69e6e831d..d5d5add215c 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -254,7 +254,7 @@ int ED_operator_node_active(bContext *C) { SpaceNode *snode = CTX_wm_space_node(C); - if (snode && ntreeIsValid(snode->edittree)) + if (snode && snode->edittree) return 1; return 0; diff --git a/source/blender/editors/space_buttons/buttons_texture.c b/source/blender/editors/space_buttons/buttons_texture.c index bb1310d486a..b108f9fa4b5 100644 --- a/source/blender/editors/space_buttons/buttons_texture.c +++ b/source/blender/editors/space_buttons/buttons_texture.c @@ -113,15 +113,15 @@ static void buttons_texture_users_find_nodetree(ListBase *users, ID *id, { bNode *node; - if (ntreeIsValid(ntree)) { + if (ntree) { for (node = ntree->nodes.first; node; node = node->next) { if (node->typeinfo->nclass == NODE_CLASS_TEXTURE) { PointerRNA ptr; /* PropertyRNA *prop; */ /* UNUSED */ - + RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr); /* prop = RNA_struct_find_property(&ptr, "texture"); */ /* UNUSED */ - + buttons_texture_user_node_add(users, id, ntree, node, category, RNA_struct_ui_icon(ptr.type), node->name); } diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index fa4b0595061..06528727e72 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -2708,8 +2708,57 @@ static void node_template_properties_update(bNodeType *ntype) } } +static void node_socket_undefined_draw(bContext *UNUSED(C), uiLayout *layout, PointerRNA *UNUSED(ptr), PointerRNA *UNUSED(node_ptr)) +{ + uiItemL(layout, "Undefined Socket Type", ICON_ERROR); +} + +static void node_socket_undefined_draw_color(bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PointerRNA *UNUSED(node_ptr), float *r_color) +{ + r_color[0] = 1.0f; + r_color[1] = 0.0f; + r_color[2] = 0.0f; + r_color[3] = 1.0f; +} + +static void node_socket_undefined_interface_draw(bContext *UNUSED(C), uiLayout *layout, PointerRNA *UNUSED(ptr)) +{ + uiItemL(layout, "Undefined Socket Type", ICON_ERROR); +} + +static void node_socket_undefined_interface_draw_color(bContext *UNUSED(C), PointerRNA *UNUSED(ptr), float *r_color) +{ + r_color[0] = 1.0f; + r_color[1] = 0.0f; + r_color[2] = 0.0f; + r_color[3] = 1.0f; +} + void ED_node_init_butfuncs(void) { + /* Fallback types for undefined tree, nodes, sockets + * Defined in blenkernel, but not registered in type hashes. + */ + /*extern bNodeTreeType NodeTreeTypeUndefined;*/ + extern bNodeType NodeTypeUndefined; + extern bNodeSocketType NodeSocketTypeUndefined; + + /* default ui functions */ + NodeTypeUndefined.drawfunc = node_draw_default; + NodeTypeUndefined.drawupdatefunc = node_update_default; + NodeTypeUndefined.select_area_func = node_select_area_default; + NodeTypeUndefined.tweak_area_func = node_tweak_area_default; + NodeTypeUndefined.uifunc = NULL; + NodeTypeUndefined.uifuncbut = NULL; + NodeTypeUndefined.drawinputfunc = node_draw_input_default; + NodeTypeUndefined.drawoutputfunc = node_draw_output_default; + NodeTypeUndefined.resize_area_func = node_resize_area_default; + + NodeSocketTypeUndefined.draw = node_socket_undefined_draw; + NodeSocketTypeUndefined.draw_color = node_socket_undefined_draw_color; + NodeSocketTypeUndefined.interface_draw = node_socket_undefined_interface_draw; + NodeSocketTypeUndefined.interface_draw_color = node_socket_undefined_interface_draw_color; + /* node type ui functions */ NODE_TYPES_BEGIN(ntype) /* default ui functions */ diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c index 688377c7f3b..efdb7c0d85d 100644 --- a/source/blender/editors/space_node/node_buttons.c +++ b/source/blender/editors/space_node/node_buttons.c @@ -62,7 +62,7 @@ static int active_nodetree_poll(const bContext *C, PanelType *UNUSED(pt)) { SpaceNode *snode = CTX_wm_space_node(C); - return (snode && ntreeIsValid(snode->nodetree)); + return (snode && snode->nodetree); } /* poll callback for active node */ @@ -70,7 +70,7 @@ static int active_node_poll(const bContext *C, PanelType *UNUSED(pt)) { SpaceNode *snode = CTX_wm_space_node(C); - return (snode && ntreeIsValid(snode->edittree) && nodeGetActive(snode->edittree)); + return (snode && snode->edittree && nodeGetActive(snode->edittree)); } /* active node */ diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 0636dee9bc5..6c53b6e8c56 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -148,7 +148,7 @@ static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup) void ED_node_tag_update_nodetree(Main *bmain, bNodeTree *ntree) { - if (!ntreeIsValid(ntree)) + if (!ntree) return; /* look through all datablocks, to support groups */ @@ -861,7 +861,9 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN NULL, 0, 0, 0, 0, ""); /* body */ - if (node->flag & NODE_CUSTOM_COLOR) + if (!nodeIsRegistered(node)) + UI_ThemeColor4(TH_REDALERT); /* use warning color to indicate undefined types */ + else if (node->flag & NODE_CUSTOM_COLOR) glColor3fv(node->color); else UI_ThemeColor4(TH_NODE); @@ -1057,7 +1059,7 @@ void node_set_cursor(wmWindow *win, SpaceNode *snode) bNodeSocket *sock; int cursor = CURSOR_STD; - if (ntreeIsValid(ntree)) { + if (ntree) { if (node_find_indicated_socket(snode, &node, &sock, SOCK_IN | SOCK_OUT)) { /* pass */ } @@ -1271,7 +1273,7 @@ void drawnodespace(const bContext *C, ARegion *ar) for (curdepth = depth; curdepth >= 0; path = path->next, --curdepth) { ntree = path->nodetree; - if (ntreeIsValid(ntree)) { + if (ntree) { snode_setup_v2d(snode, ar, ntree->view_center[0], ntree->view_center[1]); if (curdepth == 0) { diff --git a/source/blender/editors/space_node/node_templates.c b/source/blender/editors/space_node/node_templates.c index 0bc2fba0d0b..527defb1f07 100644 --- a/source/blender/editors/space_node/node_templates.c +++ b/source/blender/editors/space_node/node_templates.c @@ -606,7 +606,7 @@ void uiTemplateNodeView(uiLayout *layout, bContext *C, bNodeTree *ntree, bNode * { bNode *tnode; - if (!ntreeIsValid(ntree)) + if (!ntree) return; /* clear for cycle check */ diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 2d5207e69db..2075cc055e1 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -479,7 +479,7 @@ static void node_area_refresh(const struct bContext *C, ScrArea *sa) snode_set_context(C); - if (ntreeIsValid(snode->nodetree)) { + if (snode->nodetree) { if (snode->nodetree->type == NTREE_SHADER) { if (GS(snode->id->name) == ID_MA) { Material *ma = (Material *)snode->id; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index b558e6d2eeb..44ec8316c9d 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -542,9 +542,6 @@ static void rna_NodeTree_draw_add_menu(const bContext *C, struct uiLayout *layou ParameterList list; FunctionRNA *func; - if (!ntreeIsValid(ntree)) - return; - RNA_id_pointer_create(&ntree->id, &ptr); func = &rna_NodeTree_draw_add_menu_func; /* RNA_struct_find_function(&ptr, "draw_add_menu"); */ @@ -656,6 +653,18 @@ static StructRNA *rna_NodeTree_register(Main *bmain, ReportList *reports, void * return nt->ext.srna; } +static bool rna_NodeTree_check(bNodeTree *ntree, ReportList *reports) +{ + if (!ntreeIsRegistered(ntree)) { + if (reports) + BKE_reportf(reports, RPT_ERROR, "Node tree '%s' has undefined type %s", ntree->id.name + 2, ntree->idname); + + return false; + } + else + return true; +} + static void rna_NodeTree_update(Main *bmain, Scene *scene, PointerRNA *ptr) { bNodeTree *ntree = (bNodeTree *)ptr->id.data; @@ -695,10 +704,8 @@ static bNode *rna_NodeTree_node_new(bNodeTree *ntree, bContext *C, ReportList *r bNodeType *ntype; bNode *node; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return NULL; - } ntype = nodeTypeFind(type); if (!ntype) { @@ -745,10 +752,8 @@ static void rna_NodeTree_node_remove(bNodeTree *ntree, ReportList *reports, Poin { bNode *node = node_ptr->data; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return; - } if (BLI_findindex(&ntree->nodes, node) == -1) { BKE_reportf(reports, RPT_ERROR, "Unable to locate node '%s' in node tree", node->name); @@ -767,10 +772,8 @@ static void rna_NodeTree_node_clear(bNodeTree *ntree, ReportList *reports) { bNode *node = ntree->nodes.first; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return; - } while (node) { bNode *next_node = node->next; @@ -800,10 +803,6 @@ static void rna_NodeTree_active_node_set(PointerRNA *ptr, const PointerRNA value bNodeTree *ntree = (bNodeTree *)ptr->data; bNode *node = (bNode *)value.data; - /* activating node might require valid typeinfo */ - if (!ntreeIsValid(ntree)) - return; - if (node && BLI_findindex(&ntree->nodes, node) != -1) nodeSetActive(ntree, node); else @@ -817,10 +816,8 @@ static bNodeLink *rna_NodeTree_link_new(bNodeTree *ntree, ReportList *reports, bNodeLink *ret; bNode *fromnode = NULL, *tonode = NULL; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return NULL; - } nodeFindNode(ntree, fromsock, &fromnode, NULL); nodeFindNode(ntree, tosock, &tonode, NULL); @@ -855,10 +852,8 @@ static void rna_NodeTree_link_remove(bNodeTree *ntree, ReportList *reports, Poin { bNodeLink *link = link_ptr->data; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return; - } if (BLI_findindex(&ntree->links, link) == -1) { BKE_report(reports, RPT_ERROR, "Unable to locate link in node tree"); @@ -876,10 +871,8 @@ static void rna_NodeTree_link_clear(bNodeTree *ntree, ReportList *reports) { bNodeLink *link = ntree->links.first; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return; - } while (link) { bNodeLink *next_link = link->next; @@ -971,10 +964,8 @@ static bNodeSocket *rna_NodeTree_inputs_new(bNodeTree *ntree, ReportList *report { bNodeSocket *sock; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return NULL; - } sock = ntreeAddSocketInterface(ntree, SOCK_IN, type, name); @@ -988,10 +979,8 @@ static bNodeSocket *rna_NodeTree_outputs_new(bNodeTree *ntree, ReportList *repor { bNodeSocket *sock; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return NULL; - } sock = ntreeAddSocketInterface(ntree, SOCK_OUT, type, name); @@ -1003,10 +992,8 @@ static bNodeSocket *rna_NodeTree_outputs_new(bNodeTree *ntree, ReportList *repor static void rna_NodeTree_socket_remove(bNodeTree *ntree, ReportList *reports, bNodeSocket *sock) { - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return; - } if (BLI_findindex(&ntree->inputs, sock) == -1 && BLI_findindex(&ntree->outputs, sock) == -1) { BKE_reportf(reports, RPT_ERROR, "Unable to locate socket '%s' in node", sock->identifier); @@ -1023,10 +1010,8 @@ static void rna_NodeTree_inputs_clear(bNodeTree *ntree, ReportList *reports) { bNodeSocket *sock, *nextsock; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return; - } for (sock = ntree->inputs.first; sock; sock = nextsock) { nextsock = sock->next; @@ -1041,10 +1026,8 @@ static void rna_NodeTree_outputs_clear(bNodeTree *ntree, ReportList *reports) { bNodeSocket *sock, *nextsock; - if (!ntreeIsValid(ntree)) { - BKE_reportf(reports, RPT_ERROR, "Node tree %s invalid", ntree->id.name + 2); + if (!rna_NodeTree_check(ntree, reports)) return; - } for (sock = ntree->outputs.first; sock; sock = nextsock) { nextsock = sock->next; @@ -1057,9 +1040,6 @@ static void rna_NodeTree_outputs_clear(bNodeTree *ntree, ReportList *reports) static void rna_NodeTree_interface_update(bNodeTree *ntree, bContext *C) { - if (!ntreeIsValid(ntree)) - return; - ntree->update |= NTREE_UPDATE_GROUP; ntreeUpdateTree(ntree); diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c index e5528b0dbc8..62a937b106c 100644 --- a/source/blender/nodes/intern/node_exec.c +++ b/source/blender/nodes/intern/node_exec.c @@ -156,8 +156,6 @@ bNodeTreeExec *ntree_exec_begin(bNodeExecContext *context, bNodeTree *ntree, bNo bNode **nodelist; int totnodes, n; - BLI_assert(ntreeIsValid(ntree)); - /* ensure all sock->link pointers and node levels are correct */ ntreeUpdateTree(ntree); |