[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