Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-04-18 18:12:17 +0300
committerHans Goudey <h.goudey@me.com>2022-04-18 18:12:17 +0300
commitef2b8c1c3afac9176da936995231523745e21643 (patch)
tree4e5e4dc2f933a8c759ef707db0593ad9f526a54c /source/blender/nodes/intern
parent933fed2a17a313f7ef3412eaf911ed6f5944046b (diff)
Nodes: Remove unnecessary RNA pointer creation
`rna_NodeSocket_refine` and `rna_Node_refine` take significant time when building the `NodeTreeRef` acceleration data structure, but they aren't used at all. This commit removes their eager calculation and instead creates them on-demand in the `rna()` functions. They also aren't inlined to avoid including `RNA_prototypes.h` in the header. Differential Revision: https://developer.blender.org/D14674
Diffstat (limited to 'source/blender/nodes/intern')
-rw-r--r--source/blender/nodes/intern/node_tree_ref.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/source/blender/nodes/intern/node_tree_ref.cc b/source/blender/nodes/intern/node_tree_ref.cc
index 01a31ab852d..64a8690a869 100644
--- a/source/blender/nodes/intern/node_tree_ref.cc
+++ b/source/blender/nodes/intern/node_tree_ref.cc
@@ -21,7 +21,6 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree)
node.tree_ = this;
node.bnode_ = bnode;
node.id_ = nodes_by_id_.append_and_get_index(&node);
- RNA_pointer_create(&btree->id, &RNA_Node, bnode, &node.rna_);
LISTBASE_FOREACH (bNodeSocket *, bsocket, &bnode->inputs) {
InputSocketRef &socket = *allocator_.construct<InputSocketRef>().release();
@@ -30,7 +29,6 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree)
socket.is_input_ = true;
socket.bsocket_ = bsocket;
socket.id_ = sockets_by_id_.append_and_get_index(&socket);
- RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &socket.rna_);
}
LISTBASE_FOREACH (bNodeSocket *, bsocket, &bnode->outputs) {
@@ -40,7 +38,6 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree)
socket.is_input_ = false;
socket.bsocket_ = bsocket;
socket.id_ = sockets_by_id_.append_and_get_index(&socket);
- RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &socket.rna_);
}
LISTBASE_FOREACH (bNodeLink *, blink, &bnode->internal_links) {
@@ -664,4 +661,18 @@ const NodeTreeRef &get_tree_ref_from_map(NodeTreeRefMap &node_tree_refs, bNodeTr
[&]() { return std::make_unique<NodeTreeRef>(&btree); });
}
+PointerRNA NodeRef::rna() const
+{
+ PointerRNA rna;
+ RNA_pointer_create(&tree_->btree()->id, &RNA_Node, bnode_, &rna);
+ return rna;
+}
+
+PointerRNA SocketRef::rna() const
+{
+ PointerRNA rna;
+ RNA_pointer_create(&this->tree().btree()->id, &RNA_NodeSocket, bsocket_, &rna);
+ return rna;
+}
+
} // namespace blender::nodes