Geometry Nodes: warn when output attribute has not been saved

This commit is contained in:
Jacques Lucke 2021-04-23 12:44:59 +02:00
parent f8e1526fa6
commit 4cb8438e08
2 changed files with 15 additions and 0 deletions

@ -94,6 +94,7 @@ class OutputAttribute {
SaveFn save_; SaveFn save_;
std::optional<fn::GVMutableArray_GSpan> optional_span_varray_; std::optional<fn::GVMutableArray_GSpan> optional_span_varray_;
bool ignore_old_values_ = false; bool ignore_old_values_ = false;
bool save_has_been_called_ = false;
public: public:
OutputAttribute() = default; OutputAttribute() = default;
@ -109,6 +110,10 @@ class OutputAttribute {
{ {
} }
OutputAttribute(OutputAttribute &&other) = default;
~OutputAttribute();
operator bool() const operator bool() const
{ {
return varray_.get() != nullptr; return varray_.get() != nullptr;

@ -184,6 +184,7 @@ AttributeDomain attribute_domain_highest_priority(Span<AttributeDomain> domains)
void OutputAttribute::save() void OutputAttribute::save()
{ {
save_has_been_called_ = true;
if (optional_span_varray_.has_value()) { if (optional_span_varray_.has_value()) {
optional_span_varray_->save(); 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( GVArrayPtr BuiltinCustomDataLayerProvider::try_get_for_read(
const GeometryComponent &component) const const GeometryComponent &component) const
{ {