Page MenuHome
Paste P244

(An Untitled Masterwork)
ActivePublic

Authored by Julian Eisel (Severin) on Aug 2 2015, 9:11 PM.
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index d91d06e..9f2b99a 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -3031,6 +3031,25 @@ static void ntree_update_link_pointers(bNodeTree *ntree)
ntreeTagUsedSockets(ntree);
}
+static bool node_link_are_sockets_compatible(const bNodeLink *link, const int tree_type)
+{
+ const int fromtype = link->fromsock->type;
+ const int totype = link->tosock->type;
+ bool retval = true;
+
+ switch (tree_type) {
+ case NTREE_SHADER:
+ if (ELEM(fromtype, SOCK_SHADER, SOCK_STRING) || ELEM(totype, SOCK_SHADER, SOCK_STRING)) {
+ if (fromtype != totype) {
+ retval = false;
+ }
+ }
+ break;
+ }
+
+ return retval;
+}
+
static void ntree_validate_links(bNodeTree *ntree)
{
bNodeLink *link;
@@ -3043,6 +3062,8 @@ static void ntree_validate_links(bNodeTree *ntree)
if (!ntree->typeinfo->validate_link(ntree, link))
link->flag &= ~NODE_LINK_VALID;
}
+ else if (node_link_are_sockets_compatible(link, ntree->type) == false)
+ link->flag &= ~NODE_LINK_VALID;
}
}
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index 1e309f5..8742738 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -851,4 +851,13 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
}
#undef BRUSH_TORUS
}
+
+ {
+ /* update node tree links for flagging invalid connections */
+ FOREACH_NODETREE(main, ntree, id)
+ {
+ ntree->update |= NTREE_UPDATE_LINKS;
+ }
+ FOREACH_NODETREE_END
+ }
}