[Bf-blender-cvs] [b7260ca4c9f] blender-v3.0-release: Fix T92799: handle undefined node group type in field inferencing

Jacques Lucke noreply at git.blender.org
Thu Nov 4 18:27:22 CET 2021


Commit: b7260ca4c9f4b7618c9c214f1270e31d6ed9886b
Author: Jacques Lucke
Date:   Thu Nov 4 18:25:48 2021 +0100
Branches: blender-v3.0-release
https://developer.blender.org/rBb7260ca4c9f4b7618c9c214f1270e31d6ed9886b

Fix T92799: handle undefined node group type in field inferencing

A group node could reference an undefined group when the group
was linked and its source file was not found on load. The field
inferencing code did not handle that case before.

With this change, the file provided in T92799 loads successfully.

===================================================================

M	source/blender/blenkernel/intern/node.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 6b409ae656e..0827a15dea0 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -4585,6 +4585,15 @@ static OutputFieldDependency get_interface_output_field_dependency(const NodeRef
   return socket_decl.output_field_dependency();
 }
 
+static FieldInferencingInterface get_dummy_field_inferencing_interface(const NodeRef &node)
+{
+  FieldInferencingInterface inferencing_interface;
+  inferencing_interface.inputs.append_n_times(InputSocketFieldType::None, node.inputs().size());
+  inferencing_interface.outputs.append_n_times(OutputFieldDependency::ForDataSource(),
+                                               node.outputs().size());
+  return inferencing_interface;
+}
+
 /**
  * Retrieves information about how the node interacts with fields.
  * In the future, this information can be stored in the node declaration. This would allow this
@@ -4598,6 +4607,10 @@ static FieldInferencingInterface get_node_field_inferencing_interface(const Node
     if (group == nullptr) {
       return FieldInferencingInterface();
     }
+    if (!ntreeIsRegistered(group)) {
+      /* This can happen when there is a linked node group that was not found (see T92799). */
+      return get_dummy_field_inferencing_interface(node);
+    }
     if (group->field_inferencing_interface == nullptr) {
       /* Update group recursively. */
       update_field_inferencing(*group);



More information about the Bf-blender-cvs mailing list