[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46327] trunk/blender/source/blender/ editors/space_node/node_edit.c: Fix #31318: cycles preview missing update for other materials using same node
Brecht Van Lommel
brechtvanlommel at pandora.be
Sat May 5 21:44:29 CEST 2012
Revision: 46327
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46327
Author: blendix
Date: 2012-05-05 19:44:28 +0000 (Sat, 05 May 2012)
Log Message:
-----------
Fix #31318: cycles preview missing update for other materials using same node
group with certain operations.
Modified Paths:
--------------
trunk/blender/source/blender/editors/space_node/node_edit.c
Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2012-05-05 19:36:00 UTC (rev 46326)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c 2012-05-05 19:44:28 UTC (rev 46327)
@@ -243,8 +243,37 @@
return nodeGetActive(ntree);
}
-void snode_dag_update(bContext *UNUSED(C), SpaceNode *snode)
+static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
{
+ bNode *node;
+
+ if (ntree == lookup)
+ return 1;
+
+ for (node=ntree->nodes.first; node; node=node->next)
+ if (node->type == NODE_GROUP && node->id)
+ if (has_nodetree((bNodeTree*)node->id, lookup))
+ return 1;
+
+ return 0;
+}
+
+static void snode_dag_update_group(void *calldata, ID *owner_id, bNodeTree *ntree)
+{
+ if (has_nodetree(ntree, calldata))
+ DAG_id_tag_update(owner_id, 0);
+}
+
+void snode_dag_update(bContext *C, SpaceNode *snode)
+{
+ Main *bmain = CTX_data_main(C);
+
+ /* for groups, update all ID's using this */
+ if (snode->edittree!=snode->nodetree) {
+ bNodeTreeType *tti= ntreeGetType(snode->edittree->type);
+ tti->foreach_nodetree(bmain, snode->edittree, snode_dag_update_group);
+ }
+
DAG_id_tag_update(snode->id, 0);
}
@@ -585,21 +614,6 @@
nodeUpdateID(snode->nodetree, gnode->id);
}
-static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
-{
- bNode *node;
-
- if (ntree == lookup)
- return 1;
-
- for (node=ntree->nodes.first; node; node=node->next)
- if (node->type == NODE_GROUP && node->id)
- if (has_nodetree((bNodeTree*)node->id, lookup))
- return 1;
-
- return 0;
-}
-
void ED_node_set_active(Main *bmain, bNodeTree *ntree, bNode *node)
{
int was_active_texture = (node->flag & NODE_ACTIVE_TEXTURE);
More information about the Bf-blender-cvs
mailing list