Fix: Missing handling of dynamic instance attribute size

The attributes need to be reallocated when the size changes.

Differential Revision: https://developer.blender.org/D13390
This commit is contained in:
Hans Goudey 2021-11-30 10:59:11 -05:00
parent 2fbb52dd86
commit c822e03e2a
3 changed files with 12 additions and 0 deletions

View File

@ -345,6 +345,8 @@ class CustomDataAttributes {
void reallocate(const int size);
void clear();
std::optional<blender::fn::GSpan> get_for_read(const AttributeIDRef &attribute_id) const;
blender::fn::GVArray get_for_read(const AttributeIDRef &attribute_id,

View File

@ -821,6 +821,12 @@ void CustomDataAttributes::reallocate(const int size)
CustomData_realloc(&data, size);
}
void CustomDataAttributes::clear()
{
CustomData_free(&data, size_);
size_ = 0;
}
bool CustomDataAttributes::foreach_attribute(const AttributeForeachCallback callback,
const AttributeDomain domain) const
{

View File

@ -63,6 +63,7 @@ void InstancesComponent::reserve(int min_capacity)
if (!instance_ids_.is_empty()) {
this->instance_ids_ensure();
}
attributes_.reallocate(min_capacity);
}
/**
@ -78,6 +79,7 @@ void InstancesComponent::resize(int capacity)
if (!instance_ids_.is_empty()) {
this->instance_ids_ensure();
}
attributes_.reallocate(capacity);
}
void InstancesComponent::clear()
@ -85,6 +87,7 @@ void InstancesComponent::clear()
instance_reference_handles_.clear();
instance_transforms_.clear();
instance_ids_.clear();
attributes_.clear();
references_.clear();
}
@ -98,6 +101,7 @@ void InstancesComponent::add_instance(const int instance_handle, const float4x4
if (!instance_ids_.is_empty()) {
this->instance_ids_ensure();
}
attributes_.reallocate(this->instances_amount());
}
blender::Span<int> InstancesComponent::instance_reference_handles() const