[Bf-blender-cvs] [4bef49e32b6] blender-v2.93-release: Fix T87169: support attribute search on group nodes

Jacques Lucke noreply at git.blender.org
Fri Apr 16 11:56:13 CEST 2021


Commit: 4bef49e32b6d4d9df496b2b54a78b66b11df7334
Author: Jacques Lucke
Date:   Fri Apr 16 11:56:04 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rB4bef49e32b6d4d9df496b2b54a78b66b11df7334

Fix T87169: support attribute search on group nodes

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

M	source/blender/modifiers/intern/MOD_nodes.cc

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

diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 02a1dc07c93..3481b1c75d9 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -462,10 +462,6 @@ class GeometryNodesEvaluator {
   {
     const bNode &bnode = params.node();
 
-    if (DEG_is_active(depsgraph_)) {
-      this->store_ui_hints(node, params);
-    }
-
     /* Use the geometry-node-execute callback if it exists. */
     if (bnode.typeinfo->geometry_node_execute != nullptr) {
       bnode.typeinfo->geometry_node_execute(params);
@@ -483,41 +479,6 @@ class GeometryNodesEvaluator {
     this->execute_unknown_node(node, params);
   }
 
-  void store_ui_hints(const DNode node, GeoNodeExecParams params) const
-  {
-    for (const InputSocketRef *socket_ref : node->inputs()) {
-      if (!socket_ref->is_available()) {
-        continue;
-      }
-      if (socket_ref->bsocket()->type != SOCK_GEOMETRY) {
-        continue;
-      }
-      if (socket_ref->is_multi_input_socket()) {
-        /* Not needed currently. */
-        continue;
-      }
-
-      bNodeTree *btree_cow = node->btree();
-      bNodeTree *btree_original = (bNodeTree *)DEG_get_original_id((ID *)btree_cow);
-      const NodeTreeEvaluationContext context(*self_object_, *modifier_);
-
-      const GeometrySet &geometry_set = params.get_input<GeometrySet>(socket_ref->identifier());
-
-      blender::bke::geometry_set_instances_attribute_foreach(
-          geometry_set,
-          [&](StringRefNull attribute_name, const AttributeMetaData &meta_data) {
-            BKE_nodetree_attribute_hint_add(*btree_original,
-                                            context,
-                                            *node->bnode(),
-                                            attribute_name,
-                                            meta_data.domain,
-                                            meta_data.data_type);
-            return true;
-          },
-          8);
-    }
-  }
-
   void execute_multi_function_node(const DNode node,
                                    GeoNodeExecParams params,
                                    const MultiFunction &fn)
@@ -1239,6 +1200,37 @@ static void log_preview_socket_value(const Span<GPointer> values,
   }
 }
 
+static void log_ui_hints(const DSocket socket,
+                         const Span<GPointer> values,
+                         Object *self_object,
+                         NodesModifierData *nmd)
+{
+  const DNode node = socket.node();
+  if (node->is_reroute_node() || socket->typeinfo()->type != SOCK_GEOMETRY) {
+    return;
+  }
+  bNodeTree *btree_cow = node->btree();
+  bNodeTree *btree_original = (bNodeTree *)DEG_get_original_id((ID *)btree_cow);
+  const NodeTreeEvaluationContext context{*self_object, nmd->modifier};
+  for (const GPointer data : values) {
+    if (data.type() == &CPPType::get<GeometrySet>()) {
+      const GeometrySet &geometry_set = *(const GeometrySet *)data.get();
+      blender::bke::geometry_set_instances_attribute_foreach(
+          geometry_set,
+          [&](StringRefNull attribute_name, const AttributeMetaData &meta_data) {
+            BKE_nodetree_attribute_hint_add(*btree_original,
+                                            context,
+                                            *node->bnode(),
+                                            attribute_name,
+                                            meta_data.domain,
+                                            meta_data.data_type);
+            return true;
+          },
+          8);
+    }
+  }
+}
+
 /**
  * Evaluate a node group to compute the output geometry.
  * Currently, this uses a fairly basic and inefficient algorithm that might compute things more
@@ -1305,6 +1297,7 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree,
     if (!keys.is_empty()) {
       log_preview_socket_value(values, ctx->object, keys);
     }
+    log_ui_hints(socket, values, ctx->object, nmd);
   };
 
   GeometryNodesEvaluator evaluator{group_inputs,



More information about the Bf-blender-cvs mailing list