[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36512] branches/particles-2010/source/ blender: Another do_versions fix: Old node trees will now get an automatic update call, so that node dependency levels are correct and node links flagged valid.
Lukas Toenne
lukas.toenne at googlemail.com
Fri May 6 11:43:02 CEST 2011
Revision: 36512
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36512
Author: lukastoenne
Date: 2011-05-06 09:43:01 +0000 (Fri, 06 May 2011)
Log Message:
-----------
Another do_versions fix: Old node trees will now get an automatic update call, so that node dependency levels are correct and node links flagged valid.
Modified Paths:
--------------
branches/particles-2010/source/blender/blenkernel/intern/node.c
branches/particles-2010/source/blender/blenloader/intern/readfile.c
branches/particles-2010/source/blender/makesdna/DNA_node_types.h
Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c 2011-05-06 09:19:29 UTC (rev 36511)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c 2011-05-06 09:43:01 UTC (rev 36512)
@@ -1638,14 +1638,11 @@
for (link = ntree->links.first; link; link = link->next) {
link->flag |= NLINK_VALID;
- /* skip incomplete links (from modal linking operator) */
- if (link->fromsock && link->tosock) {
- if (link->fromnode && link->tonode && link->fromnode->level <= link->tonode->level)
+ if (link->fromnode && link->tonode && link->fromnode->level <= link->tonode->level)
+ link->flag &= ~NLINK_VALID;
+ else if (ntreetype->validate_link) {
+ if (!ntreetype->validate_link(ntree, link))
link->flag &= ~NLINK_VALID;
- else if (ntreetype->validate_link) {
- if (!ntreetype->validate_link(ntree, link))
- link->flag &= ~NLINK_VALID;
- }
}
}
}
Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c 2011-05-06 09:19:29 UTC (rev 36511)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c 2011-05-06 09:43:01 UTC (rev 36512)
@@ -2058,7 +2058,7 @@
/* updates group node socket own_index so that
* external links to/from the group node are preserved.
*/
-static void lib_node_do_versions_group(bNode *gnode)
+static void lib_node_do_versions_group_indices(bNode *gnode)
{
bNodeTree *ngroup= (bNodeTree*)gnode->id;
bNode *intnode;
@@ -2091,19 +2091,26 @@
}
/* updates external links for all group nodes in a tree */
-static void lib_nodetree_do_versions_cb(void *UNUSED(data), ID *UNUSED(id), bNodeTree *ntree)
+static void lib_nodetree_do_versions_group_indices_cb(void *UNUSED(data), ID *UNUSED(id), bNodeTree *ntree)
{
bNode *node;
for (node=ntree->nodes.first; node; node=node->next) {
if (node->type==NODE_GROUP) {
bNodeTree *ngroup= (bNodeTree*)node->id;
- if (ngroup->flag & NTREE_DO_VERSIONS)
- lib_node_do_versions_group(node);
+ if (ngroup->flag & NTREE_DO_VERSIONS_GROUP_EXPOSE)
+ lib_node_do_versions_group_indices(node);
}
}
}
+/* make an update call for the tree */
+static void lib_nodetree_do_versions_update_cb(void *UNUSED(data), ID *UNUSED(id), bNodeTree *ntree)
+{
+ if (ntree->update)
+ ntreeUpdateTree(ntree);
+}
+
/* verify types for nodes and groups, all data has to be read */
/* open = 0: appending/linking, open = 1: open new file (need to clean out dynamic
* typedefs*/
@@ -2135,27 +2142,41 @@
* actual group node updates.
*/
for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next) {
- if (ntree->flag & NTREE_DO_VERSIONS) {
+ if (ntree->flag & NTREE_DO_VERSIONS_GROUP_EXPOSE) {
/* this adds copies and links from all unlinked internal sockets to group inputs/outputs. */
node_group_expose_all_sockets(ntree);
has_old_groups = 1;
}
}
- for (i=0; i < NUM_NTREE_TYPES; ++i) {
- ntreetype= ntreeGetType(i);
- if (ntreetype && ntreetype->foreachNodeTree)
- ntreetype->foreachNodeTree(main, NULL, lib_nodetree_do_versions_cb);
+ if (has_old_groups) {
+ for (i=0; i < NUM_NTREE_TYPES; ++i) {
+ ntreetype= ntreeGetType(i);
+ if (ntreetype && ntreetype->foreachNodeTree)
+ ntreetype->foreachNodeTree(main, NULL, lib_nodetree_do_versions_group_indices_cb);
+ }
}
for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
- ntree->flag &= ~NTREE_DO_VERSIONS;
+ ntree->flag &= ~NTREE_DO_VERSIONS_GROUP_EXPOSE;
}
/* verify all group user nodes */
for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next) {
ntreeVerifyNodes(main, &ntree->id);
}
+
+ /* make update calls where necessary */
+ {
+ for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
+ if (ntree->update)
+ ntreeUpdateTree(ntree);
+ for (i=0; i < NUM_NTREE_TYPES; ++i) {
+ ntreetype= ntreeGetType(i);
+ if (ntreetype && ntreetype->foreachNodeTree)
+ ntreetype->foreachNodeTree(main, NULL, lib_nodetree_do_versions_update_cb);
+ }
+ }
}
/* ntree itself has been read! */
@@ -11593,7 +11614,7 @@
* is done in lib_verify_nodetree, because at this point the internal
* nodes may not be up-to-date! (missing lib-link)
*/
- ntree->flag |= NTREE_DO_VERSIONS;
+ ntree->flag |= NTREE_DO_VERSIONS_GROUP_EXPOSE;
}
}
@@ -11740,17 +11761,25 @@
Material *mat;
Tex *tex;
bNodeTree *ntree;
- for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
+ for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) {
do_versions_nodetree_default_value(ntree);
+ ntree->update |= NTREE_UPDATE;
+ }
for (sce=main->scene.first; sce; sce=sce->id.next)
- if (sce->nodetree)
+ if (sce->nodetree) {
do_versions_nodetree_default_value(sce->nodetree);
+ sce->nodetree->update |= NTREE_UPDATE;
+ }
for (mat=main->mat.first; mat; mat=mat->id.next)
- if (mat->nodetree)
+ if (mat->nodetree) {
do_versions_nodetree_default_value(mat->nodetree);
+ mat->nodetree->update |= NTREE_UPDATE;
+ }
for (tex=main->tex.first; tex; tex=tex->id.next)
- if (tex->nodetree)
+ if (tex->nodetree) {
do_versions_nodetree_default_value(tex->nodetree);
+ tex->nodetree->update |= NTREE_UPDATE;
+ }
}
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h 2011-05-06 09:19:29 UTC (rev 36511)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h 2011-05-06 09:43:01 UTC (rev 36512)
@@ -263,10 +263,10 @@
/* ntree->flag */
#define NTREE_DS_EXPAND 1 /* for animation editors */
-/* XXX not nice, but needed as a temporary flag
+/* XXX not nice, but needed as a temporary flags
* for group updates after library linking.
*/
-#define NTREE_DO_VERSIONS 1024
+#define NTREE_DO_VERSIONS_GROUP_EXPOSE 1024
/* ntree->update */
#define NTREE_UPDATE 0xFFFF /* generic update flag (includes all others) */
More information about the Bf-blender-cvs
mailing list