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.
This commit is contained in:
parent
c6642f06ab
commit
bf5e9ef2df
Notes:
blender-bot
2023-02-14 06:17:17 +01:00
Referenced by issue #96402, Nodegroups don't update the shaders anymore in 3.1 Referenced by issue #96241, 3.1: Potential candidates for corrective releases
|
@ -1339,8 +1339,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()) {
|
||||
|
@ -1352,6 +1351,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.
|
||||
|
|
Loading…
Reference in New Issue