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>2021-04-14 19:11:51 +0300
committerHans Goudey <h.goudey@me.com>2021-04-14 19:11:51 +0300
commit71eaf872c2db37fcc00f269bcb7e8949b2711942 (patch)
tree0ce5fa850e57e87c0d9f74bc0e908983a97aecd8 /source/blender/blenkernel/BKE_node_ui_storage.hh
parentd705335c2b0ae5994d8d66df100270f34c098c77 (diff)
Geometry Nodes: Add domain and data type to attribute search
This patch adds domain and data type information to each row of the attribute search menu. The data type is displayed on the right, just like how the list is exposed for the existing point cloud and hair attribute panels. The domain is exposed on the left like the menu hierarchy from menu search. For the implementation, the attribute hint information is stored as a set instead of a multi-value map so that every item (which we need to point to descretely in the search process) contains the necessary data type and domain information by itself. We also need to allocate a new struct for every button, which requires a change to allow passing a newly allocated argument to search buttons. Note that the search does't yet handle the case where there are two attributes with the same name but different domains or data types in the input geometry set. That will be handled as a separate improvement. Differential Revision: https://developer.blender.org/D10623
Diffstat (limited to 'source/blender/blenkernel/BKE_node_ui_storage.hh')
-rw-r--r--source/blender/blenkernel/BKE_node_ui_storage.hh18
1 files changed, 12 insertions, 6 deletions
diff --git a/source/blender/blenkernel/BKE_node_ui_storage.hh b/source/blender/blenkernel/BKE_node_ui_storage.hh
index aa7e5180b03..5f9c039ef9e 100644
--- a/source/blender/blenkernel/BKE_node_ui_storage.hh
+++ b/source/blender/blenkernel/BKE_node_ui_storage.hh
@@ -20,7 +20,6 @@
#include "BLI_hash.hh"
#include "BLI_map.hh"
-#include "BLI_multi_value_map.hh"
#include "BLI_session_uuid.h"
#include "BLI_set.hh"
@@ -80,30 +79,37 @@ struct NodeWarning {
};
struct AvailableAttributeInfo {
+ std::string name;
AttributeDomain domain;
CustomDataType data_type;
uint64_t hash() const
{
- uint64_t domain_hash = (uint64_t)domain;
- uint64_t data_type_hash = (uint64_t)data_type;
- return (domain_hash * 33) ^ (data_type_hash * 89);
+ return blender::get_default_hash(name);
}
friend bool operator==(const AvailableAttributeInfo &a, const AvailableAttributeInfo &b)
{
- return a.domain == b.domain && a.data_type == b.data_type;
+ return a.name == b.name;
}
};
struct NodeUIStorage {
blender::Vector<NodeWarning> warnings;
- blender::MultiValueMap<std::string, AvailableAttributeInfo> attribute_hints;
+ blender::Set<AvailableAttributeInfo> attribute_hints;
};
struct NodeTreeUIStorage {
blender::Map<NodeTreeEvaluationContext, blender::Map<std::string, NodeUIStorage>> context_map;
std::mutex context_map_mutex;
+
+ /**
+ * Attribute search uses this to store the fake info for the string typed into a node, in order
+ * to pass the info to the execute callback that sets node socket values. This is mutable since
+ * we can count on only one attribute search being open at a time, and there is no real data
+ * stored here.
+ */
+ mutable AvailableAttributeInfo dummy_info_for_search;
};
const NodeUIStorage *BKE_node_tree_ui_storage_get_from_context(const bContext *C,