[Bf-blender-cvs] [0b75698519e] temp-geometry-nodes-evaluator-refactor: actually log data in viewer node

Jacques Lucke noreply at git.blender.org
Wed Sep 7 13:02:57 CEST 2022


Commit: 0b75698519eb8e134fc01192c09a28cf38e28a67
Author: Jacques Lucke
Date:   Wed Sep 7 11:21:35 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB0b75698519eb8e134fc01192c09a28cf38e28a67

actually log data in viewer node

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

M	source/blender/nodes/NOD_geometry_nodes_log.hh
M	source/blender/nodes/intern/geometry_nodes_log.cc
M	source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc

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

diff --git a/source/blender/nodes/NOD_geometry_nodes_log.hh b/source/blender/nodes/NOD_geometry_nodes_log.hh
index 2b07021ce3c..679f2a65acc 100644
--- a/source/blender/nodes/NOD_geometry_nodes_log.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_log.hh
@@ -104,6 +104,11 @@ class GeometryInfoLog : public ValueLog {
   GeometryInfoLog(const GeometrySet &geometry_set);
 };
 
+class ViewerNodeLog {
+ public:
+  GeometrySet geometry;
+};
+
 using Clock = std::chrono::steady_clock;
 using TimePoint = Clock::time_point;
 
@@ -119,8 +124,10 @@ class GeoTreeLogger {
   Vector<std::tuple<std::string, std::string, ValueLog *>> input_socket_values;
   Vector<std::tuple<std::string, std::string, ValueLog *>> output_socket_values;
   Vector<std::tuple<std::string, TimePoint, TimePoint>> node_execution_times;
+  Vector<std::tuple<std::string, destruct_ptr<ViewerNodeLog>>, 0> viewer_node_logs_;
 
   void log_value(const bNode &node, const bNodeSocket &socket, GPointer value);
+  void log_viewer_node(const bNode &viewer_node, const GeometrySet &geometry);
 };
 
 class GeoNodeLog {
@@ -140,9 +147,11 @@ class GeoTreeLog {
   bool reduced_node_warnings_ = false;
   bool reduced_node_run_times_ = false;
   bool reduced_socket_values_ = false;
+  bool reduced_viewer_node_logs_ = false;
 
  public:
   Map<std::string, GeoNodeLog> nodes;
+  Map<std::string, ViewerNodeLog *, 0> viewer_node_logs;
   Vector<NodeWarning> all_warnings;
   std::chrono::nanoseconds run_time_sum{0};
 
@@ -154,6 +163,7 @@ class GeoTreeLog {
   void ensure_node_warnings();
   void ensure_node_run_time();
   void ensure_socket_values();
+  void ensure_viewer_node_logs();
 };
 
 class GeoModifierLog {
diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc
index 8ee3c0c8b10..34c33ca6c19 100644
--- a/source/blender/nodes/intern/geometry_nodes_log.cc
+++ b/source/blender/nodes/intern/geometry_nodes_log.cc
@@ -155,6 +155,14 @@ void GeoTreeLogger::log_value(const bNode &node, const bNodeSocket &socket, cons
   }
 }
 
+void GeoTreeLogger::log_viewer_node(const bNode &viewer_node, const GeometrySet &geometry)
+{
+  destruct_ptr<ViewerNodeLog> log = this->allocator.construct<ViewerNodeLog>();
+  log->geometry = geometry;
+  log->geometry.ensure_owns_direct_data();
+  this->viewer_node_logs_.append({viewer_node.name, std::move(log)});
+}
+
 void GeoTreeLog::ensure_node_warnings()
 {
   if (reduced_node_warnings_) {
@@ -228,6 +236,20 @@ void GeoTreeLog::ensure_socket_values()
   reduced_socket_values_ = true;
 }
 
+void GeoTreeLog::ensure_viewer_node_logs()
+{
+  if (reduced_viewer_node_logs_) {
+    return;
+  }
+  for (GeoTreeLogger *tree_logger : tree_loggers_) {
+    for (const std::tuple<std::string, destruct_ptr<ViewerNodeLog>> &viewer_log :
+         tree_logger->viewer_node_logs_) {
+      this->viewer_node_logs.add(std::get<0>(viewer_log), std::get<1>(viewer_log).get());
+    }
+  }
+  reduced_viewer_node_logs_ = true;
+}
+
 GeoTreeLogger &GeoModifierLog::get_local_tree_logger(const ContextStack &context_stack)
 {
   Map<ContextStackHash, std::unique_ptr<GeoTreeLogger>> &local_tree_loggers =
diff --git a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
index d0587390362..22dd34195e1 100644
--- a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
+++ b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
@@ -438,8 +438,11 @@ class LazyFunctionForComplexInput : public LazyFunction {
 };
 
 class LazyFunctionForViewerNode : public LazyFunction {
+ private:
+  const bNode &bnode_;
+
  public:
-  LazyFunctionForViewerNode()
+  LazyFunctionForViewerNode(const bNode &bnode) : bnode_(bnode)
   {
     static_name_ = "Viewer";
     inputs_.append({"Geometry", CPPType::get<GeometrySet>()});
@@ -447,9 +450,18 @@ class LazyFunctionForViewerNode : public LazyFunction {
 
   void execute_impl(lf::Params &params, const lf::Context &context) const override
   {
-    UNUSED_VARS(context);
+    GeoNodesLFUserData *user_data = dynamic_cast<GeoNodesLFUserData *>(context.user_data);
+    BLI_assert(user_data != nullptr);
+
     GeometrySet geometry = params.extract_input<GeometrySet>(0);
-    std::cout << "View Geometry: " << geometry << "\n";
+
+    geo_eval_log::GeoTreeLogger &tree_logger =
+        user_data->modifier_data->eval_log->get_local_tree_logger(*user_data->context_stack);
+    tree_logger.log_viewer_node(bnode_, geometry);
+
+    std::stringstream ss;
+    ss << geometry;
+    user_data->context_stack->print_stack(std::cout, ss.str());
   }
 };
 
@@ -849,7 +861,7 @@ struct GeometryNodesLazyFunctionGraphBuilder {
 
   void handle_viewer_node(const bNode &bnode)
   {
-    auto lazy_function = std::make_unique<LazyFunctionForViewerNode>();
+    auto lazy_function = std::make_unique<LazyFunctionForViewerNode>(bnode);
     lf::FunctionNode &lf_node = lf_graph_->add_function(*lazy_function);
     lf_graph_info_->functions.append(std::move(lazy_function));



More information about the Bf-blender-cvs mailing list