[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