[Bf-blender-cvs] [68c797c49e9] temp-geometry-nodes-evaluator-refactor: gather sockets to preview
Jacques Lucke
noreply at git.blender.org
Sun Sep 4 12:53:41 CEST 2022
Commit: 68c797c49e987300238221fd4c0153d753f6af52
Author: Jacques Lucke
Date: Sun Sep 4 12:39:36 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB68c797c49e987300238221fd4c0153d753f6af52
gather sockets to preview
===================================================================
M source/blender/modifiers/intern/MOD_nodes.cc
M source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 5f1b58a106d..2acea5a63a6 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -840,13 +840,28 @@ static Vector<SpaceSpreadsheet *> find_spreadsheet_editors(Main *bmain)
return spreadsheets;
}
-static void find_sockets_to_preview_for_spreadsheet(SpaceSpreadsheet *sspreadsheet,
- NodesModifierData *nmd,
- const ModifierEvalContext *ctx,
- const DerivedNodeTree &tree,
- Set<DSocket> &r_sockets_to_preview)
+struct SocketToPreview {
+ blender::ContextStackHash context_hash;
+ const bNodeSocket *bsocket;
+
+ friend bool operator==(const SocketToPreview &a, const SocketToPreview &b)
+ {
+ return a.context_hash == b.context_hash && a.bsocket == b.bsocket;
+ }
+
+ uint64_t hash() const
+ {
+ return blender::get_default_hash_2(this->context_hash, bsocket);
+ }
+};
+
+static void find_sockets_to_preview_for_spreadsheet(const SpaceSpreadsheet &sspreadsheet,
+ const NodesModifierData &nmd,
+ const ModifierEvalContext &ctx,
+ const bNodeTree &root_tree,
+ Set<SocketToPreview> &r_sockets_to_preview)
{
- Vector<SpreadsheetContext *> context_path = sspreadsheet->context_path;
+ Vector<SpreadsheetContext *> context_path = sspreadsheet.context_path;
if (context_path.size() < 3) {
return;
}
@@ -857,11 +872,11 @@ static void find_sockets_to_preview_for_spreadsheet(SpaceSpreadsheet *sspreadshe
return;
}
SpreadsheetContextObject *object_context = (SpreadsheetContextObject *)context_path[0];
- if (object_context->object != DEG_get_original_object(ctx->object)) {
+ if (object_context->object != DEG_get_original_object(ctx.object)) {
return;
}
SpreadsheetContextModifier *modifier_context = (SpreadsheetContextModifier *)context_path[1];
- if (StringRef(modifier_context->modifier_name) != nmd->modifier.name) {
+ if (StringRef(modifier_context->modifier_name) != nmd.modifier.name) {
return;
}
for (SpreadsheetContext *context : context_path.as_span().drop_front(2)) {
@@ -870,54 +885,60 @@ static void find_sockets_to_preview_for_spreadsheet(SpaceSpreadsheet *sspreadshe
}
}
+ blender::ContextStackBuilder context_stack_builder;
+ context_stack_builder.push<blender::nodes::ModifierContextStack>(nmd.modifier.name);
+
Span<SpreadsheetContextNode *> nested_group_contexts =
context_path.as_span().drop_front(2).drop_back(1).cast<SpreadsheetContextNode *>();
SpreadsheetContextNode *last_context = (SpreadsheetContextNode *)context_path.last();
- const DTreeContext *context = &tree.root_context();
+ const bNodeTree *group = &root_tree;
for (SpreadsheetContextNode *node_context : nested_group_contexts) {
- const bNodeTree &btree = context->btree();
const bNode *found_node = nullptr;
- for (const bNode *bnode : btree.all_nodes()) {
- if (STREQ(bnode->name, node_context->node_name)) {
- found_node = bnode;
+ for (const bNode *node : group->all_nodes()) {
+ if (STREQ(node->name, node_context->node_name)) {
+ found_node = node;
break;
}
}
if (found_node == nullptr) {
return;
}
- context = context->child_context(*found_node);
- if (context == nullptr) {
+ if (!found_node->is_group()) {
return;
}
+ if (found_node->id == nullptr) {
+ return;
+ }
+ group = reinterpret_cast<const bNodeTree *>(found_node->id);
+ context_stack_builder.push<blender::nodes::NodeGroupContextStack>(node_context->node_name,
+ group->id.name + 2);
}
- const bNodeTree &btree = context->btree();
- for (const bNode *bnode : btree.nodes_by_type("GeometryNodeViewer")) {
- if (STREQ(bnode->name, last_context->node_name)) {
- const DNode viewer_node{context, bnode};
- for (const bNodeSocket *input_socket : bnode->input_sockets()) {
+ for (const bNode *viewer_node : group->nodes_by_type("GeometryNodeViewer")) {
+ if (STREQ(viewer_node->name, last_context->node_name)) {
+ for (const bNodeSocket *input_socket : viewer_node->input_sockets()) {
if (input_socket->is_available() && input_socket->is_logically_linked()) {
- r_sockets_to_preview.add(DSocket{context, input_socket});
+ r_sockets_to_preview.add(SocketToPreview{context_stack_builder.hash(), input_socket});
+ context_stack_builder.current()->print_stack(std::cout, input_socket->name);
}
}
}
}
}
-static void find_sockets_to_preview(NodesModifierData *nmd,
- const ModifierEvalContext *ctx,
- const DerivedNodeTree &tree,
- Set<DSocket> &r_sockets_to_preview)
+static void find_sockets_to_preview(const NodesModifierData &nmd,
+ const ModifierEvalContext &ctx,
+ const bNodeTree &tree,
+ Set<SocketToPreview> &r_sockets_to_preview)
{
- Main *bmain = DEG_get_bmain(ctx->depsgraph);
+ Main *bmain = DEG_get_bmain(ctx.depsgraph);
/* Based on every visible spreadsheet context path, get a list of sockets that need to have their
* intermediate geometries cached for display. */
Vector<SpaceSpreadsheet *> spreadsheets = find_spreadsheet_editors(bmain);
for (SpaceSpreadsheet *sspreadsheet : spreadsheets) {
- find_sockets_to_preview_for_spreadsheet(sspreadsheet, nmd, ctx, tree, r_sockets_to_preview);
+ find_sockets_to_preview_for_spreadsheet(*sspreadsheet, nmd, ctx, tree, r_sockets_to_preview);
}
}
@@ -1094,7 +1115,7 @@ static GeometrySet compute_geometry(const bNodeTree &btree,
NodesModifierData *nmd,
const ModifierEvalContext *ctx)
{
- UNUSED_VARS(find_sockets_to_preview, logging_enabled);
+ UNUSED_VARS(logging_enabled);
const blender::nodes::GeometryNodesLazyFunctionGraphInfo &lf_graph_info =
blender::nodes::ensure_geometry_nodes_lazy_function_graph(btree);
@@ -1160,6 +1181,9 @@ static GeometrySet compute_geometry(const bNodeTree &btree,
param_outputs[i] = {type, buffer};
}
+ Set<SocketToPreview> sockets_to_preview;
+ find_sockets_to_preview(*nmd, *ctx, btree, sockets_to_preview);
+
lf::Context lf_context;
lf_context.storage = graph_executor.init_storage(allocator);
lf_context.user_data = &user_data;
diff --git a/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh b/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
index 3d7457e3f6c..a8bc2cff23b 100644
--- a/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
@@ -30,13 +30,15 @@ class NodeGroupContextStack : public ContextStack {
static constexpr const char *s_static_type = "NODE_GROUP";
std::string node_name_;
- std::string group_name_;
+ std::string debug_group_name_;
public:
- NodeGroupContextStack(const ContextStack *parent, std::string node_name, std::string group_name)
+ NodeGroupContextStack(const ContextStack *parent,
+ std::string node_name,
+ std::string debug_group_name)
: ContextStack(s_static_type, parent),
node_name_(std::move(node_name)),
- group_name_(std::move(group_name))
+ debug_group_name_(std::move(debug_group_name))
{
hash_.mix_in(s_static_type, strlen(s_static_type));
hash_.mix_in(node_name_.data(), node_name_.size());
@@ -50,7 +52,7 @@ class NodeGroupContextStack : public ContextStack {
private:
void print_current_in_line(std::ostream &stream) const override
{
- stream << "Node Group: " << group_name_ << " \t Node Name: " << node_name_;
+ stream << "Node Group: " << debug_group_name_ << " \t Node Name: " << node_name_;
}
};
More information about the Bf-blender-cvs
mailing list