[Bf-blender-cvs] [faeb98b48eb] functions: compute type of every socket only once
Jacques Lucke
noreply at git.blender.org
Thu Aug 1 18:23:28 CEST 2019
Commit: faeb98b48eb94e51a9a17a8652d6fe24a8e90f6d
Author: Jacques Lucke
Date: Thu Aug 1 15:36:37 2019 +0200
Branches: functions
https://developer.blender.org/rBfaeb98b48eb94e51a9a17a8652d6fe24a8e90f6d
compute type of every socket only once
===================================================================
M source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
M source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
===================================================================
diff --git a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
index 62cf96094f0..056378bc900 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
@@ -34,6 +34,20 @@ VTreeDataGraphBuilder::VTreeDataGraphBuilder(VirtualNodeTree &vtree)
m_type_by_data_type(get_type_by_data_type_map()),
m_data_type_by_idname(get_data_type_by_idname_map())
{
+ this->initialize_type_by_vsocket_map();
+}
+
+BLI_NOINLINE void VTreeDataGraphBuilder::initialize_type_by_vsocket_map()
+{
+ m_type_by_vsocket = Vector<SharedType>(m_vtree.socket_count(), SharedType());
+ for (VirtualNode *vnode : m_vtree.nodes()) {
+ for (VirtualSocket *vsocket : vnode->inputs()) {
+ m_type_by_vsocket[vsocket->id()] = m_type_by_idname.lookup_default(vsocket->idname(), {});
+ }
+ for (VirtualSocket *vsocket : vnode->outputs()) {
+ m_type_by_vsocket[vsocket->id()] = m_type_by_idname.lookup_default(vsocket->idname(), {});
+ }
+ }
}
VTreeDataGraph VTreeDataGraphBuilder::build()
@@ -240,7 +254,7 @@ VirtualNodeTree &VTreeDataGraphBuilder::vtree() const
bool VTreeDataGraphBuilder::is_data_socket(VirtualSocket *vsocket) const
{
- return m_type_by_idname.contains(vsocket->bsocket()->idname);
+ return m_type_by_vsocket[vsocket->id()].ptr() != nullptr;
}
SharedType &VTreeDataGraphBuilder::type_by_name(StringRef data_type) const
@@ -250,12 +264,8 @@ SharedType &VTreeDataGraphBuilder::type_by_name(StringRef data_type) const
SharedType &VTreeDataGraphBuilder::query_socket_type(VirtualSocket *vsocket) const
{
- return m_type_by_idname.lookup_ref(vsocket->bsocket()->idname);
-}
-
-StringRef VTreeDataGraphBuilder::query_socket_data_type(VirtualSocket *vsocket) const
-{
- return m_data_type_by_idname.lookup_ref(vsocket->bsocket()->idname);
+ BLI_assert(this->is_data_socket(vsocket));
+ return m_type_by_vsocket[vsocket->id()];
}
SharedType &VTreeDataGraphBuilder::query_type_property(VirtualNode *vnode,
diff --git a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
index 2a148b7573b..7a03131f8ca 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
@@ -21,6 +21,7 @@ class VTreeDataGraphBuilder {
VirtualNodeTree &m_vtree;
DataGraphBuilder m_graph_builder;
Vector<BuilderSocket *> m_socket_map;
+ Vector<SharedType> m_type_by_vsocket;
StringMap<SharedType> &m_type_by_idname;
StringMap<SharedType> &m_type_by_data_type;
StringMap<std::string> &m_data_type_by_idname;
@@ -62,7 +63,6 @@ class VTreeDataGraphBuilder {
/* Query Socket Information */
bool is_data_socket(VirtualSocket *vsocket) const;
- StringRef query_socket_data_type(VirtualSocket *vsocket) const;
SharedType &query_socket_type(VirtualSocket *vsocket) const;
/* Query Node Information */
@@ -73,6 +73,7 @@ class VTreeDataGraphBuilder {
SharedType &type_from_rna(PointerRNA &rna, StringRefNull prop_name) const;
private:
+ void initialize_type_by_vsocket_map();
bool check_if_sockets_are_mapped(VirtualNode *vnode, ArrayRef<VirtualSocket *> vsockets) const;
};
More information about the Bf-blender-cvs
mailing list