[Bf-blender-cvs] [5e8dcdf8b56] temp-node-error-messages: Working error messages, fixed incorrect buffer length
Hans Goudey
noreply at git.blender.org
Tue Feb 16 15:11:32 CET 2021
Commit: 5e8dcdf8b56fd61c029fd43eee32669b9bbf7d14
Author: Hans Goudey
Date: Tue Feb 16 08:11:22 2021 -0600
Branches: temp-node-error-messages
https://developer.blender.org/rB5e8dcdf8b56fd61c029fd43eee32669b9bbf7d14
Working error messages, fixed incorrect buffer length
===================================================================
M source/blender/blenkernel/BKE_node_ui_storage.hh
M source/blender/blenkernel/intern/node_ui_storage.cc
M source/blender/editors/space_node/node_draw.cc
M source/blender/nodes/intern/node_geometry_exec.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node_ui_storage.hh b/source/blender/blenkernel/BKE_node_ui_storage.hh
index 4a50bcf54ce..b498e75f289 100644
--- a/source/blender/blenkernel/BKE_node_ui_storage.hh
+++ b/source/blender/blenkernel/BKE_node_ui_storage.hh
@@ -18,6 +18,11 @@
#include "BLI_hash.hh"
#include "BLI_map.hh"
+#include "BLI_session_uuid.h"
+
+#include "DNA_ID.h"
+#include "DNA_modifier_types.h"
+#include "DNA_session_uuid_types.h"
struct bNode;
struct bNodeTree;
@@ -25,19 +30,27 @@ struct Object;
struct ModifierData;
struct NodeUIStorageContextModifier {
- const struct Object *object;
- const struct ModifierData *modifier;
+ std::string object_name;
+ SessionUUID modifier_session_uuid;
+
+ NodeUIStorageContextModifier(const Object &object, const ModifierData &modifier)
+ {
+ object_name = reinterpret_cast<const ID &>(object).name;
+ modifier_session_uuid = modifier.session_uuid;
+ }
uint64_t hash() const
{
- const uint64_t hash1 = blender::DefaultHash<const Object *>{}(object);
- const uint64_t hash2 = blender::DefaultHash<const ModifierData *>{}(modifier);
+
+ const uint64_t hash1 = blender::DefaultHash<std::string>{}(object_name);
+ const uint64_t hash2 = BLI_session_uuid_hash_uint64(&modifier_session_uuid);
return hash1 ^ (hash2 * 33);
}
bool operator==(const NodeUIStorageContextModifier &other) const
{
- return other.object == object && other.modifier == modifier;
+ return other.object_name == object_name &&
+ BLI_session_uuid_is_equal(&other.modifier_session_uuid, &modifier_session_uuid);
}
};
@@ -57,8 +70,7 @@ struct NodeUIStorage {
};
struct NodeTreeUIStorage {
- blender::Map<const struct bNode *, blender::Map<NodeUIStorageContextModifier, NodeUIStorage>>
- node_map;
+ blender::Map<std::string, blender::Map<NodeUIStorageContextModifier, NodeUIStorage>> node_map;
NodeTreeUIStorage() = default;
};
diff --git a/source/blender/blenkernel/intern/node_ui_storage.cc b/source/blender/blenkernel/intern/node_ui_storage.cc
index 844bf0fbb37..5df1b5d34d2 100644
--- a/source/blender/blenkernel/intern/node_ui_storage.cc
+++ b/source/blender/blenkernel/intern/node_ui_storage.cc
@@ -91,7 +91,7 @@ void BKE_nodetree_error_message_add(bNodeTree &ntree,
node_error_message_log(ntree, node, message, type);
Map<NodeUIStorageContextModifier, NodeUIStorage> &context_to_storage_map =
- node_tree_ui_storage.node_map.lookup_or_add_default(&node);
+ node_tree_ui_storage.node_map.lookup_or_add_default(node.name);
NodeUIStorage &node_ui_storage = context_to_storage_map.lookup_or_add_default(context);
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index ba1c13593f2..ebd87ffdcbd 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -1234,7 +1234,7 @@ static const NodeUIStorage *node_ui_storage_get_from_context(const bContext *C,
return nullptr;
}
const Map<NodeUIStorageContextModifier, NodeUIStorage> *node_ui_storage =
- node_tree_ui_storage->node_map.lookup_ptr(&node);
+ node_tree_ui_storage->node_map.lookup_ptr(node.name);
if (node_ui_storage == nullptr) {
return nullptr;
}
@@ -1244,7 +1244,8 @@ static const NodeUIStorage *node_ui_storage_get_from_context(const bContext *C,
if (active_object == nullptr || active_modifier == nullptr) {
return nullptr;
}
- const NodeUIStorageContextModifier context = {active_object, active_modifier};
+ const NodeUIStorageContextModifier context = NodeUIStorageContextModifier(*active_object,
+ *active_modifier);
return node_ui_storage->lookup_ptr(context);
}
@@ -1264,7 +1265,7 @@ static void node_add_error_message_button(
for (const NodeWarning &warning : node_ui_storage->warnings) {
total_str_len += warning.message.size();
}
- char *tooltip_alloc = (char *)MEM_mallocN(sizeof(char), __func__);
+ char *tooltip_alloc = (char *)MEM_mallocN(sizeof(char) * total_str_len, __func__);
int tooltip_offest = 0;
for (const NodeWarning &warning : node_ui_storage->warnings) {
BLI_strncpy(tooltip_alloc + tooltip_offest, warning.message.c_str(), warning.message.size());
diff --git a/source/blender/nodes/intern/node_geometry_exec.cc b/source/blender/nodes/intern/node_geometry_exec.cc
index 35ff87147c6..3f56c01ad1a 100644
--- a/source/blender/nodes/intern/node_geometry_exec.cc
+++ b/source/blender/nodes/intern/node_geometry_exec.cc
@@ -32,7 +32,8 @@ void GeoNodeExecParams::error_message_add(const NodeWarningType type,
{
bNodeTree *original_ntree = (bNodeTree *)DEG_get_original_id(&(ID &)ntree_);
if (original_ntree != nullptr) {
- const NodeUIStorageContextModifier context = {self_object_, modifier_};
+ const NodeUIStorageContextModifier context = NodeUIStorageContextModifier(*self_object_,
+ *modifier_);
BKE_nodetree_error_message_add(*original_ntree, context, node_, type, message);
}
}
More information about the Bf-blender-cvs
mailing list