[Bf-blender-cvs] [e599bb1793d] temp-geometry-nodes-evaluator-refactor: cleanup

Jacques Lucke noreply at git.blender.org
Thu Sep 8 17:22:30 CEST 2022


Commit: e599bb1793dfd185091ef04f1c0afb48d9dad9c7
Author: Jacques Lucke
Date:   Thu Sep 8 10:54:44 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rBe599bb1793dfd185091ef04f1c0afb48d9dad9c7

cleanup

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

M	source/blender/editors/space_node/node_draw.cc
M	source/blender/editors/space_node/node_geometry_attribute_search.cc
M	source/blender/editors/space_node/node_intern.hh
M	source/blender/nodes/NOD_geometry_nodes_log.hh
M	source/blender/nodes/intern/geometry_nodes_log.cc

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

diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index 79935f6396b..9d5ce17a9be 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -353,78 +353,6 @@ static bool node_socket_has_tooltip(const bNodeTree *ntree, const bNodeSocket *s
   return false;
 }
 
-nodes::geo_eval_log::ValueLog *find_socket_value_log(GeoTreeLog &tree_log,
-                                                     const bNodeSocket &query_socket)
-{
-  using namespace blender::nodes::geo_eval_log;
-  tree_log.ensure_socket_values();
-
-  if (query_socket.is_multi_input()) {
-    return nullptr;
-  }
-
-  Set<const bNodeSocket *> added_sockets;
-  Stack<const bNodeSocket *> sockets_to_check;
-  sockets_to_check.push(&query_socket);
-  added_sockets.add(&query_socket);
-
-  while (!sockets_to_check.is_empty()) {
-    const bNodeSocket &socket = *sockets_to_check.pop();
-    const bNode &node = socket.owner_node();
-    if (GeoNodeLog *node_log = tree_log.nodes.lookup_ptr(node.name)) {
-      ValueLog *value_log = socket.is_input() ?
-                                node_log->input_values_.lookup_default(socket.identifier,
-                                                                       nullptr) :
-                                node_log->output_values_.lookup_default(socket.identifier,
-                                                                        nullptr);
-      if (value_log != nullptr) {
-        return value_log;
-      }
-    }
-
-    if (socket.is_input()) {
-      const Span<const bNodeLink *> links = socket.directly_linked_links();
-      for (const bNodeLink *link : links) {
-        const bNodeSocket &from_socket = *link->fromsock;
-        if (added_sockets.add(&from_socket)) {
-          sockets_to_check.push(&from_socket);
-        }
-      }
-    }
-    else {
-      if (node.is_reroute()) {
-        const bNodeSocket &input_socket = node.input_socket(0);
-        if (added_sockets.add(&input_socket)) {
-          sockets_to_check.push(&input_socket);
-        }
-        const Span<const bNodeLink *> links = input_socket.directly_linked_links();
-        for (const bNodeLink *link : links) {
-          const bNodeSocket &from_socket = *link->fromsock;
-          if (added_sockets.add(&from_socket)) {
-            sockets_to_check.push(&from_socket);
-          }
-        }
-      }
-      else if (node.is_muted()) {
-        if (const bNodeSocket *input_socket = socket.internal_link_input()) {
-          if (added_sockets.add(input_socket)) {
-            sockets_to_check.push(input_socket);
-          }
-          const Span<const bNodeLink *> links = input_socket->directly_linked_links();
-          for (const bNodeLink *link : links) {
-            const bNodeSocket &from_socket = *link->fromsock;
-            if (added_sockets.add(&from_socket)) {
-              sockets_to_check.push(&from_socket);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  return nullptr;
-}
-
 static void create_inspection_string_for_generic_value(const GPointer value, std::stringstream &ss)
 {
   auto id_to_inspection_string = [&](const ID *id, const short idcode) {
@@ -638,7 +566,7 @@ static std::optional<std::string> create_socket_inspection_string(TreeDrawContex
                                                                   const bNodeSocket &socket)
 {
   using namespace blender::nodes::geo_eval_log;
-  ValueLog *value_log = find_socket_value_log(*tree_draw_ctx.geo_tree_log, socket);
+  ValueLog *value_log = tree_draw_ctx.geo_tree_log->find_socket_value_log(socket);
   if (value_log == nullptr) {
     return std::nullopt;
   }
diff --git a/source/blender/editors/space_node/node_geometry_attribute_search.cc b/source/blender/editors/space_node/node_geometry_attribute_search.cc
index d65647aead0..c9dbc1649c4 100644
--- a/source/blender/editors/space_node/node_geometry_attribute_search.cc
+++ b/source/blender/editors/space_node/node_geometry_attribute_search.cc
@@ -93,7 +93,7 @@ static Vector<const GeometryAttributeInfo *> get_attribute_info_from_context(
     if (input_socket->type != SOCK_GEOMETRY) {
       continue;
     }
-    const ValueLog *value_log = find_socket_value_log(*tree_log, *input_socket);
+    const ValueLog *value_log = tree_log->find_socket_value_log(*input_socket);
     if (value_log == nullptr) {
       continue;
     }
diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh
index da0f3589c3f..b9435a00843 100644
--- a/source/blender/editors/space_node/node_intern.hh
+++ b/source/blender/editors/space_node/node_intern.hh
@@ -155,9 +155,6 @@ void node_socket_add_tooltip(const bNodeTree &ntree,
                              const bNodeSocket &sock,
                              uiLayout &layout);
 
-nodes::geo_eval_log::ValueLog *find_socket_value_log(nodes::geo_eval_log::GeoTreeLog &tree_log,
-                                                     const bNodeSocket &query_socket);
-
 /**
  * Sort nodes by selection: unselected nodes first, then selected,
  * then the active node at the very end. Relative order is kept intact.
diff --git a/source/blender/nodes/NOD_geometry_nodes_log.hh b/source/blender/nodes/NOD_geometry_nodes_log.hh
index b04ae35a41f..b8fb55abffb 100644
--- a/source/blender/nodes/NOD_geometry_nodes_log.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_log.hh
@@ -171,6 +171,8 @@ class GeoTreeLog {
   void ensure_socket_values();
   void ensure_viewer_node_logs();
   void ensure_existing_attributes();
+
+  ValueLog *find_socket_value_log(const bNodeSocket &query_socket);
 };
 
 class GeoModifierLog {
diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc
index e099c8be2de..c907f475771 100644
--- a/source/blender/nodes/intern/geometry_nodes_log.cc
+++ b/source/blender/nodes/intern/geometry_nodes_log.cc
@@ -5,6 +5,7 @@
 
 #include "BKE_compute_contexts.hh"
 #include "BKE_curves.hh"
+#include "BKE_node_runtime.hh"
 
 #include "FN_field_cpp_type.hh"
 
@@ -289,6 +290,82 @@ void GeoTreeLog::ensure_existing_attributes()
   reduced_existing_attributes_ = true;
 }
 
+ValueLog *GeoTreeLog::find_socket_value_log(const bNodeSocket &query_socket)
+{
+  /**
+   * Geometry nodes does not log values for every socket. That would produce a lot of redundant
+   * data,because often many linked sockets have the same value. To find the logged value for a
+   * socket one might have to look at linked sockets as well.
+   */
+
+  BLI_assert(reduced_socket_values_);
+  if (query_socket.is_multi_input()) {
+    /* Not supported currently. */
+    return nullptr;
+  }
+
+  Set<const bNodeSocket *> added_sockets;
+  Stack<const bNodeSocket *> sockets_to_check;
+  sockets_to_check.push(&query_socket);
+  added_sockets.add(&query_socket);
+
+  while (!sockets_to_check.is_empty()) {
+    const bNodeSocket &socket = *sockets_to_check.pop();
+    const bNode &node = socket.owner_node();
+    if (GeoNodeLog *node_log = this->nodes.lookup_ptr(node.name)) {
+      ValueLog *value_log = socket.is_input() ?
+                                node_log->input_values_.lookup_default(socket.identifier,
+                                                                       nullptr) :
+                                node_log->output_values_.lookup_default(socket.identifier,
+                                                                        nullptr);
+      if (value_log != nullptr) {
+        return value_log;
+      }
+    }
+
+    if (socket.is_input()) {
+      const Span<const bNodeLink *> links = socket.directly_linked_links();
+      for (const bNodeLink *link : links) {
+        const bNodeSocket &from_socket = *link->fromsock;
+        if (added_sockets.add(&from_socket)) {
+          sockets_to_check.push(&from_socket);
+        }
+      }
+    }
+    else {
+      if (node.is_reroute()) {
+        const bNodeSocket &input_socket = node.input_socket(0);
+        if (added_sockets.add(&input_socket)) {
+          sockets_to_check.push(&input_socket);
+        }
+        const Span<const bNodeLink *> links = input_socket.directly_linked_links();
+        for (const bNodeLink *link : links) {
+          const bNodeSocket &from_socket = *link->fromsock;
+          if (added_sockets.add(&from_socket)) {
+            sockets_to_check.push(&from_socket);
+          }
+        }
+      }
+      else if (node.is_muted()) {
+        if (const bNodeSocket *input_socket = socket.internal_link_input()) {
+          if (added_sockets.add(input_socket)) {
+            sockets_to_check.push(input_socket);
+          }
+          const Span<const bNodeLink *> links = input_socket->directly_linked_links();
+          for (const bNodeLink *link : links) {
+            const bNodeSocket &from_socket = *link->fromsock;
+            if (added_sockets.add(&from_socket)) {
+              sockets_to_check.push(&from_socket);
+            }
+          }
+        }
+      }
+    }
+  }
+
+  return nullptr;
+}
+
 GeoTreeLogger &GeoModifierLog::get_local_tree_logger(const ComputeContext &compute_context)
 {
   LocalData &local_data = data_per_thread_.local();



More information about the Bf-blender-cvs mailing list