[Bf-blender-cvs] [8ea353102e7] temp-node-error-messages: Use original node tree from depsgraph

Hans Goudey noreply at git.blender.org
Tue Jan 19 19:57:15 CET 2021


Commit: 8ea353102e73d2e0e80a387f5b693754a4667708
Author: Hans Goudey
Date:   Tue Jan 19 12:45:35 2021 -0600
Branches: temp-node-error-messages
https://developer.blender.org/rB8ea353102e73d2e0e80a387f5b693754a4667708

Use original node tree from depsgraph

===================================================================

M	source/blender/blenkernel/intern/node.cc
M	source/blender/nodes/NOD_geometry_exec.hh
M	source/blender/nodes/intern/node_geometry_exec.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 88f88cb4cb1..e8c9892395d 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -103,23 +103,15 @@ static CLG_LogRef LOG = {"bke.node"};
 /** \name Runtime (Error Messages)
  * \{ */
 
-// typedef struct bNodeTreeRuntime {
-//   blender::Map<std::string, std::string> error_messages;
-// } bNodeTreeRuntime;
-
 class bNodeTreeRuntime {
  public:
-  blender::Map<std::string, std::string> error_messages;
+  blender::Map<const std::string, const std::string> error_messages;
 };
 
 static void nodetree_runtime_ensure(bNodeTree *ntree)
 {
   if (ntree->runtime == nullptr) {
     ntree->runtime = new bNodeTreeRuntime();
-    // ntree->runtime = (bNodeTreeRuntime *)MEM_callocN(sizeof(bNodeTreeRuntime), __func__);
-    // new (ntree->runtime->error_messages) blender::Map<std::string, std::string>
-    // ntree->runtime->error_messages = blender::Map<std::string, std::string>();
-    blender::Map<std::string, std::string>(ntree->runtime->error_messages);
   }
 }
 
@@ -128,7 +120,9 @@ void BKE_nodetree_error_message_add(bNodeTree *ntree, const bNode *node, const c
   nodetree_runtime_ensure(ntree);
   bNodeTreeRuntime *runtime = ntree->runtime;
 
-  runtime->error_messages.add(node->name, std::string(message));
+  const std::string message_string(message);
+
+  runtime->error_messages.add(node->name, std::move(message_string));
 }
 
 void BKE_nodetree_error_messages_clear(bNodeTree *ntree)
@@ -141,7 +135,6 @@ void BKE_nodetree_error_messages_clear(bNodeTree *ntree)
 
 const char *BKE_nodetree_error_message_get(const bNodeTree *ntree, const bNode *node)
 {
-  // nodetree_runtime_ensure((bNodeTree *)ntree);
   bNodeTreeRuntime *runtime = ntree->runtime;
   if (runtime == nullptr) {
     return nullptr;
@@ -149,10 +142,10 @@ const char *BKE_nodetree_error_message_get(const bNodeTree *ntree, const bNode *
 
   const std::string node_name = std::string(node->name);
   if (runtime->error_messages.contains(node_name)) {
-    return nullptr;
+    return runtime->error_messages.lookup(node_name).data();
   }
-  std::string message = runtime->error_messages.lookup(node_name);
-  return message.data();
+
+  return nullptr;
 }
 
 /** \} */
@@ -618,6 +611,7 @@ static void ntree_blend_write(BlendWriter *writer, ID *id, const void *id_addres
     ntree->interface_type = NULL;
     ntree->progress = NULL;
     ntree->execdata = NULL;
+    ntree->runtime = NULL;
 
     BLO_write_id_struct(writer, bNodeTree, id_address, &ntree->id);
 
@@ -648,6 +642,7 @@ void ntreeBlendReadData(BlendDataReader *reader, bNodeTree *ntree)
 
   ntree->progress = NULL;
   ntree->execdata = NULL;
+  ntree->runtime = NULL;
 
   BLO_read_data_address(reader, &ntree->adt);
   BKE_animdata_blend_read_data(reader, ntree->adt);
diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh
index 57f0875af30..46d5cf57618 100644
--- a/source/blender/nodes/NOD_geometry_exec.hh
+++ b/source/blender/nodes/NOD_geometry_exec.hh
@@ -177,13 +177,11 @@ class GeoNodeExecParams {
     return depsgraph_;
   }
 
-  void add_error_message(StringRef message)
-  {
-    bNodeTree *original_ntree = (bNodeTree *)DEG_get_original_id(&(ID &)ntree_);
-    if (original_ntree != nullptr) {
-      BKE_nodetree_error_message_add(original_ntree, &node_, message.data());
-    }
-  }
+  /**
+   * Add an error message displayed at the bottom of the node when displaying the node tree,
+   * and potentially elsewhere in Blender.
+   */
+  void add_error_message(StringRef message);
 
   /**
    * Creates a read-only attribute based on node inputs. The method automatically detects which
diff --git a/source/blender/nodes/intern/node_geometry_exec.cc b/source/blender/nodes/intern/node_geometry_exec.cc
index eef2c6c9125..025008e3546 100644
--- a/source/blender/nodes/intern/node_geometry_exec.cc
+++ b/source/blender/nodes/intern/node_geometry_exec.cc
@@ -14,11 +14,21 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#include "DEG_depsgraph_query.h"
+
 #include "NOD_geometry_exec.hh"
 #include "NOD_type_callbacks.hh"
 
 namespace blender::nodes {
 
+void GeoNodeExecParams::add_error_message(StringRef message)
+{
+  bNodeTree *original_ntree = (bNodeTree *)DEG_get_original_id(&(ID &)ntree_);
+  if (original_ntree != nullptr) {
+    BKE_nodetree_error_message_add(original_ntree, &node_, message.data());
+  }
+}
+
 const bNodeSocket *GeoNodeExecParams::find_available_socket(const StringRef name) const
 {
   LISTBASE_FOREACH (const bNodeSocket *, socket, &node_.inputs) {



More information about the Bf-blender-cvs mailing list