[Bf-blender-cvs] [198f8c209f6] temp-geometry-nodes-evaluator-refactor: cleanup
Jacques Lucke
noreply at git.blender.org
Thu Sep 8 17:22:30 CEST 2022
Commit: 198f8c209f6955709c83e2d099652e7c8e7add36
Author: Jacques Lucke
Date: Thu Sep 8 10:43:58 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB198f8c209f6955709c83e2d099652e7c8e7add36
cleanup
===================================================================
M source/blender/blenkernel/BKE_node_runtime.hh
M source/blender/editors/space_node/node_draw.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node_runtime.hh b/source/blender/blenkernel/BKE_node_runtime.hh
index 24d8dcd9a2c..658f6f4cced 100644
--- a/source/blender/blenkernel/BKE_node_runtime.hh
+++ b/source/blender/blenkernel/BKE_node_runtime.hh
@@ -49,6 +49,11 @@ class bNodeTreeRuntime : NonCopyable, NonMovable {
/** Information about how inputs and outputs of the node group interact with fields. */
std::unique_ptr<nodes::FieldInferencingInterface> field_inferencing_interface;
+ /**
+ * For geometry nodes, a lazy function graph with some additional info is cached. This is used to
+ * evaluate the node group. Caching it here allows us to reuse the preprocessed node tree in case
+ * its used multiple times.
+ */
std::mutex geometry_nodes_lazy_function_graph_info_mutex;
std::unique_ptr<nodes::GeometryNodesLazyFunctionGraphInfo>
geometry_nodes_lazy_function_graph_info;
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index a8fa27c0313..79935f6396b 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -97,7 +97,14 @@ extern void ui_draw_dropshadow(
const rctf *rct, float radius, float aspect, float alpha, int select);
}
+/**
+ * This is passed to many functions which draw the node editor.
+ */
struct TreeDrawContext {
+ /**
+ * Geometry nodes logs various data during execution. The logged data that corresponds to the
+ * currently drawn node tree can be retrieved from the log below.
+ */
GeoTreeLog *geo_tree_log = nullptr;
};
@@ -326,50 +333,6 @@ float2 node_from_view(const bNode &node, const float2 &co)
return result;
}
-static nodes::geo_eval_log::GeoTreeLog *get_geo_tree_log(SpaceNode &snode)
-{
- using namespace blender;
- using namespace blender::nodes;
- using namespace blender::nodes::geo_eval_log;
-
- ComputeContextBuilder compute_context_builder;
-
- if (snode.id == nullptr) {
- return nullptr;
- }
- if (GS(snode.id->name) != ID_OB) {
- return nullptr;
- }
- Object *object = reinterpret_cast<Object *>(snode.id);
- NodesModifierData *nmd = nullptr;
- LISTBASE_FOREACH (ModifierData *, md_iter, &object->modifiers) {
- if (md_iter->type == eModifierType_Nodes) {
- NodesModifierData *nmd_iter = reinterpret_cast<NodesModifierData *>(md_iter);
- if (nmd_iter->node_group == snode.nodetree) {
- nmd = nmd_iter;
- break;
- }
- }
- }
- if (nmd == nullptr) {
- return nullptr;
- }
- if (nmd->runtime_eval_log == nullptr) {
- return nullptr;
- }
- GeoModifierLog &modifier_log = *static_cast<GeoModifierLog *>(nmd->runtime_eval_log);
- compute_context_builder.push<bke::ModifierComputeContext>(nmd->modifier.name);
- Vector<const bNodeTreePath *> tree_path_vec{snode.treepath};
- if (tree_path_vec.is_empty()) {
- return nullptr;
- }
- for (const bNodeTreePath *path : tree_path_vec.as_span().drop_front(1)) {
- compute_context_builder.push<bke::NodeGroupComputeContext>(path->node_name);
- }
-
- return &modifier_log.get_tree_log(compute_context_builder.hash());
-}
-
struct SocketTooltipData {
const bNodeTree *ntree;
const bNode *node;
@@ -383,7 +346,7 @@ static bool node_socket_has_tooltip(const bNodeTree *ntree, const bNodeSocket *s
}
if (socket->runtime->declaration != nullptr) {
- const blender::nodes::SocketDeclaration &socket_decl = *socket->runtime->declaration;
+ const nodes::SocketDeclaration &socket_decl = *socket->runtime->declaration;
return !socket_decl.description().is_empty();
}
@@ -712,7 +675,9 @@ static char *node_socket_get_tooltip(const bContext *C,
TreeDrawContext tree_draw_ctx;
if (snode != nullptr) {
if (ntree->type == NTREE_GEOMETRY) {
- tree_draw_ctx.geo_tree_log = get_geo_tree_log(*snode);
+ tree_draw_ctx.geo_tree_log =
+ nodes::geo_eval_log::GeoModifierLog::get_tree_log_for_node_editor(*snode);
+ ;
}
}
@@ -3173,7 +3138,8 @@ static void draw_nodetree(const bContext &C,
TreeDrawContext tree_draw_ctx;
if (ntree.type == NTREE_GEOMETRY) {
- tree_draw_ctx.geo_tree_log = get_geo_tree_log(*snode);
+ tree_draw_ctx.geo_tree_log = nodes::geo_eval_log::GeoModifierLog::get_tree_log_for_node_editor(
+ *snode);
if (tree_draw_ctx.geo_tree_log != nullptr) {
tree_draw_ctx.geo_tree_log->ensure_node_warnings();
tree_draw_ctx.geo_tree_log->ensure_node_run_time();
More information about the Bf-blender-cvs
mailing list