Fix T94162: incorrect handling when there are multiple group outputs

Typically a node group should only have a single Group Output node.
However, currently Blender already supports having multiple group outputs,
one of which is active. This wasn't handled correctly by geometry nodes.

Differential Revision: https://developer.blender.org/D13611
This commit is contained in:
2021-12-24 12:34:04 +01:00
parent c0db8a9a3b
commit ba4b7b4319
3 changed files with 30 additions and 0 deletions

View File

@@ -262,6 +262,7 @@ class NodeTreeRef : NonCopyable, NonMovable {
Vector<LinkRef *> links_;
MultiValueMap<const bNodeType *, NodeRef *> nodes_by_type_;
Vector<std::unique_ptr<SocketIndexByIdentifierMap>> owned_identifier_maps_;
const NodeRef *group_output_node_ = nullptr;
public:
NodeTreeRef(bNodeTree *btree);
@@ -279,6 +280,11 @@ class NodeTreeRef : NonCopyable, NonMovable {
const NodeRef *find_node(const bNode &bnode) const;
/**
* This is the active group output node if there are multiple.
*/
const NodeRef *group_output_node() const;
/**
* \return True when there is a link cycle. Unavailable sockets are ignored.
*/
@@ -759,6 +765,11 @@ inline Span<const LinkRef *> NodeTreeRef::links() const
return links_;
}
inline const NodeRef *NodeTreeRef::group_output_node() const
{
return group_output_node_;
}
inline bNodeTree *NodeTreeRef::btree() const
{
return btree_;