Attributes: Correct implementation of typed "write_only" method
The typed "lookup_or_add_for_write_only" function is meant to do the
same thing as the non-typed version of the function. Instead, it still
initialized values of new attribute arrays, which isn't meant to happen.
Missed in 4c91c24bc7
.
I also had to correct one place that used the "write_only"
function but didn't intialize all values.
This commit is contained in:
parent
a82e52102b
commit
600c069e0e
Notes:
blender-bot
2023-02-14 11:42:40 +01:00
Referenced by issue #101886, adding a second material to an imported usdc animation causes immediate crash of blender.
|
@ -706,7 +706,9 @@ class MutableAttributeAccessor : public AttributeAccessor {
|
|||
SpanAttributeWriter<T> lookup_or_add_for_write_only_span(const AttributeIDRef &attribute_id,
|
||||
const eAttrDomain domain)
|
||||
{
|
||||
AttributeWriter<T> attribute = this->lookup_or_add_for_write<T>(attribute_id, domain);
|
||||
AttributeWriter<T> attribute = this->lookup_or_add_for_write<T>(
|
||||
attribute_id, domain, AttributeInitConstruct());
|
||||
|
||||
if (attribute) {
|
||||
return SpanAttributeWriter<T>{std::move(attribute), false};
|
||||
}
|
||||
|
|
|
@ -485,7 +485,7 @@ static void calculate_selection_outputs(Mesh *mesh,
|
|||
/* Populate "Top" selection output. */
|
||||
if (attribute_outputs.top_id) {
|
||||
const bool face = !config.top_is_point && config.fill_type != GEO_NODE_MESH_CIRCLE_FILL_NONE;
|
||||
SpanAttributeWriter<bool> selection = attributes.lookup_or_add_for_write_only_span<bool>(
|
||||
SpanAttributeWriter<bool> selection = attributes.lookup_or_add_for_write_span<bool>(
|
||||
attribute_outputs.top_id.get(), face ? ATTR_DOMAIN_FACE : ATTR_DOMAIN_POINT);
|
||||
|
||||
if (config.top_is_point) {
|
||||
|
@ -501,7 +501,7 @@ static void calculate_selection_outputs(Mesh *mesh,
|
|||
if (attribute_outputs.bottom_id) {
|
||||
const bool face = !config.bottom_is_point &&
|
||||
config.fill_type != GEO_NODE_MESH_CIRCLE_FILL_NONE;
|
||||
SpanAttributeWriter<bool> selection = attributes.lookup_or_add_for_write_only_span<bool>(
|
||||
SpanAttributeWriter<bool> selection = attributes.lookup_or_add_for_write_span<bool>(
|
||||
attribute_outputs.bottom_id.get(), face ? ATTR_DOMAIN_FACE : ATTR_DOMAIN_POINT);
|
||||
|
||||
if (config.bottom_is_point) {
|
||||
|
@ -518,7 +518,7 @@ static void calculate_selection_outputs(Mesh *mesh,
|
|||
|
||||
/* Populate "Side" selection output. */
|
||||
if (attribute_outputs.side_id) {
|
||||
SpanAttributeWriter<bool> selection = attributes.lookup_or_add_for_write_only_span<bool>(
|
||||
SpanAttributeWriter<bool> selection = attributes.lookup_or_add_for_write_span<bool>(
|
||||
attribute_outputs.side_id.get(), ATTR_DOMAIN_FACE);
|
||||
|
||||
selection.span.slice(config.side_faces_start, config.side_faces_len).fill(true);
|
||||
|
|
Loading…
Reference in New Issue