[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 ¶ms, 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