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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user