Fix T95489: support writing to vertex groups with geometry nodes again

Technically, this can't be relied upon in the long term. It worked more or
less accidentally before. It was broken by a previous fix accidentally. I mainly
bring it back because rBa985f558a6eb16cd6f0 was not expected to have
this side effect.

Note, this change can result in slower performance. Writing to a vertex
groups is less efficient than using a generic attribute.
This commit is contained in:
Jacques Lucke 2022-02-04 13:10:02 +01:00
parent 5088d907e5
commit b8a634cb1d
Notes: blender-bot 2023-02-14 07:45:38 +01:00
Referenced by issue #95610, Writing to an attribute that is also a vertexgroup results in black when used in a shader
Referenced by issue #95611, Regression: Capture Attribute in Face Corner mode produces garbage data
Referenced by issue #95489, Write to Vertex Groups from Geometry Nodes is not working anymore
1 changed files with 2 additions and 5 deletions

View File

@ -996,21 +996,18 @@ static void store_computed_output_attributes(
{
for (const OutputAttributeToStore &store : attributes_to_store) {
GeometryComponent &component = geometry.get_component_for_write(store.component_type);
/* Try deleting an existing attribute, so that we can just use `attribute_try_create` to pass
* in the data directly. */
component.attribute_try_delete(store.name);
if (component.attribute_exists(store.name)) {
/* Copy the data into an existing attribute. */
blender::bke::WriteAttributeLookup write_attribute = component.attribute_try_get_for_write(
store.name);
if (write_attribute) {
write_attribute.varray.set_all(store.data.data());
store.data.type().destruct_n(store.data.data(), store.data.size());
MEM_freeN(store.data.data());
if (write_attribute.tag_modified_fn) {
write_attribute.tag_modified_fn();
}
}
store.data.type().destruct_n(store.data.data(), store.data.size());
MEM_freeN(store.data.data());
}
else {
component.attribute_try_create(store.name,