Fix T39547: Toggling render passes on active scene does not update

render layer nodes in a pinned tree from different scene.

The way these updates work is a nasty legacy hack:
https://developer.blender.org/diffusion/B/browse/master/source/blender/nodes/composite/node_composite_tree.c$277

This function is called //very frequently// by the get_from_context
method. However, this does not get called for pinned node trees, so
when showing a different scene's compositing nodes in the editor they
may not get updated correctly.

Now moved this update call out of get_from_context so it happens in any
case. Will be called no more frequently than before (on every redraw).
Eventually the depsgraph should handle this more precisely, it's just a
simple ID dependency anyway ...
This commit is contained in:
Lukas Tönne
2014-04-02 10:59:35 +02:00
parent eed3974d11
commit 288147334c
2 changed files with 8 additions and 4 deletions

View File

@@ -586,6 +586,14 @@ void snode_set_context(const bContext *C)
if (snode->nodetree != ntree || snode->id != id || snode->from != from) {
ED_node_tree_start(snode, ntree, id, from);
}
/* XXX Legacy hack to update render layer node outputs.
* This should be handled by the depsgraph eventually ...
*/
if (ED_node_is_compositor(snode) && snode->nodetree) {
/* update output sockets based on available layers */
ntreeCompositForceHidden(snode->nodetree);
}
}
void snode_update(SpaceNode *snode, bNode *node)

View File

@@ -72,10 +72,6 @@ static void composite_get_from_context(const bContext *C, bNodeTreeType *UNUSED(
*r_from = NULL;
*r_id = &scene->id;
*r_ntree = scene->nodetree;
/* update output sockets based on available layers */
ntreeCompositForceHidden(scene->nodetree);
}
static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func)