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(); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs