Skip to content
Snippets Groups Projects
Commit 45482ac5 authored by Jacques Lucke's avatar Jacques Lucke Committed by Philipp Oeser
Browse files

Fix T96402: fix case when material output is contained in node group

For now just assume that a node group without output sockets is
an output node. Ideally, we would use run-time information stored
on the node group itself to determine if the group contains a
top-level output node (e.g. Material Output). That can be
implemented separately.

In the larger scheme of things, top-level outputs within node
groups seem to break the node group abstraction and reusability
a bit.
parent b125046c
No related branches found
No related tags found
No related merge requests found
......@@ -1353,8 +1353,7 @@ class NodeTreeMainUpdater {
{
Vector<const SocketRef *> sockets;
for (const NodeRef *node : tree.nodes()) {
const bNode *bnode = node->bnode();
if (bnode->typeinfo->nclass != NODE_CLASS_OUTPUT && bnode->type != NODE_GROUP_OUTPUT) {
if (!this->is_output_node(*node)) {
continue;
}
for (const InputSocketRef *socket : node->inputs()) {
......@@ -1366,6 +1365,24 @@ class NodeTreeMainUpdater {
return sockets;
}
bool is_output_node(const NodeRef &node) const
{
const bNode &bnode = *node.bnode();
if (bnode.typeinfo->nclass == NODE_CLASS_OUTPUT) {
return true;
}
if (bnode.type == NODE_GROUP_OUTPUT) {
return true;
}
/* Assume node groups without output sockets are outputs. */
/* TODO: Store whether a node group contains a top-level output node (e.g. Material Output) in
* run-time information on the node group itself. */
if (bnode.type == NODE_GROUP && node.outputs().is_empty()) {
return true;
}
return false;
}
/**
* Computes a hash that changes when the node tree topology connected to an output node changes.
* Adding reroutes does not have an effect on the hash.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment