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:
authorJacques Lucke <jacques@blender.org>2021-04-23 13:44:59 +0300
committerJacques Lucke <jacques@blender.org>2021-04-23 13:44:59 +0300
commit4cb8438e08cb64d755f627c8eeb3e8cda73864f1 (patch)
treeba27a73986f9d0477e3c77cc6d88dc165fcafca7
parentf8e1526fa61b8a79b6514e4f265586732d28280d (diff)
Geometry Nodes: warn when output attribute has not been saved
-rw-r--r--source/blender/blenkernel/BKE_attribute_access.hh5
-rw-r--r--source/blender/blenkernel/intern/attribute_access.cc10
2 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_attribute_access.hh b/source/blender/blenkernel/BKE_attribute_access.hh
index f6a6de04b70..5feae1bf4ca 100644
--- a/source/blender/blenkernel/BKE_attribute_access.hh
+++ b/source/blender/blenkernel/BKE_attribute_access.hh
@@ -94,6 +94,7 @@ class OutputAttribute {
SaveFn save_;
std::optional<fn::GVMutableArray_GSpan> optional_span_varray_;
bool ignore_old_values_ = false;
+ bool save_has_been_called_ = false;
public:
OutputAttribute() = default;
@@ -109,6 +110,10 @@ class OutputAttribute {
{
}
+ OutputAttribute(OutputAttribute &&other) = default;
+
+ ~OutputAttribute();
+
operator bool() const
{
return varray_.get() != nullptr;
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc
index 6c37d34dc9b..5b2f588959f 100644
--- a/source/blender/blenkernel/intern/attribute_access.cc
+++ b/source/blender/blenkernel/intern/attribute_access.cc
@@ -184,6 +184,7 @@ AttributeDomain attribute_domain_highest_priority(Span<AttributeDomain> domains)
void OutputAttribute::save()
{
+ save_has_been_called_ = true;
if (optional_span_varray_.has_value()) {
optional_span_varray_->save();
}
@@ -192,6 +193,15 @@ void OutputAttribute::save()
}
}
+OutputAttribute::~OutputAttribute()
+{
+ if (!save_has_been_called_) {
+ if (varray_) {
+ std::cout << "Warning: Call `save()` to make sure that changes persist in all cases.\n";
+ }
+ }
+}
+
GVArrayPtr BuiltinCustomDataLayerProvider::try_get_for_read(
const GeometryComponent &component) const
{