[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