[Bf-blender-cvs] [b8a634cb1df] blender-v3.1-release: Fix T95489: support writing to vertex groups with geometry nodes again

Jacques Lucke noreply at git.blender.org
Fri Feb 4 13:10:54 CET 2022


Commit: b8a634cb1dff736f5c4b2109e759cfb8ac848c41
Author: Jacques Lucke
Date:   Fri Feb 4 13:10:02 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rBb8a634cb1dff736f5c4b2109e759cfb8ac848c41

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.

===================================================================

M	source/blender/modifiers/intern/MOD_nodes.cc

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index a7c29efbebd..7e65774b86e 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -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,



More information about the Bf-blender-cvs mailing list