[Bf-blender-cvs] [686d90a8249] temp-geometry-nodes-evaluator-refactor: try find socket with logged value
Jacques Lucke
noreply at git.blender.org
Fri Sep 2 17:50:40 CEST 2022
Commit: 686d90a8249aedcd18bf956cf69a9bb658d4090d
Author: Jacques Lucke
Date: Fri Sep 2 15:26:54 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB686d90a8249aedcd18bf956cf69a9bb658d4090d
try find socket with logged value
===================================================================
M source/blender/editors/space_node/node_draw.cc
===================================================================
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index a4a57e69caf..8f654dd2001 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -388,19 +388,83 @@ static bool node_socket_has_tooltip(bNodeTree *ntree, bNodeSocket *socket)
return false;
}
+static blender::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 std::optional<std::string> create_socket_inspection_string(TreeDrawContext &tree_draw_ctx,
- bNode &node,
bNodeSocket &socket)
{
using namespace blender::nodes::geo_eval_log;
- tree_draw_ctx.geo_tree_log->ensure_socket_values();
- GeoNodeLog *node_log = tree_draw_ctx.geo_tree_log->nodes.lookup_ptr(node.name);
- if (node_log == nullptr) {
- return std::nullopt;
- }
- ValueLog *value_log = socket.in_out == SOCK_IN ?
- node_log->input_values_.lookup_default(socket.identifier, nullptr) :
- node_log->output_values_.lookup_default(socket.identifier, nullptr);
+ ValueLog *value_log = find_socket_value_log(*tree_draw_ctx.geo_tree_log, socket);
if (value_log == nullptr) {
return std::nullopt;
}
@@ -414,7 +478,7 @@ static std::optional<std::string> create_socket_inspection_string(TreeDrawContex
static char *node_socket_get_tooltip(bContext *C,
bNodeTree *ntree,
- bNode *node,
+ bNode *UNUSED(node),
bNodeSocket *socket)
{
SpaceNode *snode = CTX_wm_space_node(C);
@@ -440,7 +504,7 @@ static char *node_socket_get_tooltip(bContext *C,
}
std::optional<std::string> socket_inspection_str = create_socket_inspection_string(
- tree_draw_ctx, *node, *socket);
+ tree_draw_ctx, *socket);
if (socket_inspection_str.has_value()) {
output << *socket_inspection_str;
}
More information about the Bf-blender-cvs
mailing list