Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_node.h2
-rw-r--r--source/blender/blenkernel/intern/node.c6
-rw-r--r--source/blender/compositor/intern/COM_Converter.cpp2
-rw-r--r--source/blender/editors/space_node/node_draw.c2
-rw-r--r--source/blender/nodes/intern/node_common.c4
5 files changed, 11 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index e3591b8fcd1..e6fb9d86b0a 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -501,7 +501,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);
+bool nodeTypeUndefined(struct bNode *node);
struct GHashIterator *nodeTypeGetIterator(void);
/* helper macros for iterating over node types */
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index e2e61284d2e..180cced70ea 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1204,9 +1204,11 @@ void nodeUnregisterType(bNodeType *nt)
BLI_ghash_remove(nodetypes_hash, nt->idname, NULL, node_free_type);
}
-bool nodeIsRegistered(bNode *node)
+bool nodeTypeUndefined(bNode *node)
{
- return (node->typeinfo != &NodeTypeUndefined);
+ return (node->typeinfo == &NodeTypeUndefined) ||
+ (node->type == NODE_GROUP && node->id && ID_IS_LINKED(node->id) &&
+ (node->id->tag & LIB_TAG_MISSING));
}
GHashIterator *nodeTypeGetIterator(void)
diff --git a/source/blender/compositor/intern/COM_Converter.cpp b/source/blender/compositor/intern/COM_Converter.cpp
index f7250de8566..9b3355f535a 100644
--- a/source/blender/compositor/intern/COM_Converter.cpp
+++ b/source/blender/compositor/intern/COM_Converter.cpp
@@ -136,7 +136,7 @@ Node *Converter::convert(bNode *b_node)
Node *node = nullptr;
/* ignore undefined nodes with missing or invalid node data */
- if (!nodeIsRegistered(b_node)) {
+ if (nodeTypeUndefined(b_node)) {
return nullptr;
}
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index bafd1b9a388..0e68ebe7c03 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -1288,7 +1288,7 @@ static void node_draw_basis(const bContext *C,
}
/* body */
- if (!nodeIsRegistered(node)) {
+ if (nodeTypeUndefined(node)) {
/* use warning color to indicate undefined types */
UI_GetThemeColor4fv(TH_REDALERT, color);
}
diff --git a/source/blender/nodes/intern/node_common.c b/source/blender/nodes/intern/node_common.c
index 36b9098d972..0b1ab85c059 100644
--- a/source/blender/nodes/intern/node_common.c
+++ b/source/blender/nodes/intern/node_common.c
@@ -188,6 +188,10 @@ void node_group_update(struct bNodeTree *ntree, struct bNode *node)
if (node->id == NULL) {
nodeRemoveAllSockets(ntree, node);
}
+ else if ((ID_IS_LINKED(node->id) && (node->id->tag & LIB_TAG_MISSING))) {
+ /* Missing datablock, leave sockets unchanged so that when it comes back
+ * the links remain valid. */
+ }
else {
bNodeTree *ngroup = (bNodeTree *)node->id;
group_verify_socket_list(ntree, node, &ngroup->inputs, &node->inputs, SOCK_IN);