Fix #31318: cycles preview missing update for other materials using same node
group with certain operations.
This commit is contained in:
@@ -243,8 +243,37 @@ static bNode *editnode_get_active(bNodeTree *ntree)
|
||||
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 @@ static void snode_update(SpaceNode *snode, bNode *node)
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user