[Bf-blender-cvs] [a373551ab8b] temp-angavrilov: Geometry Nodes: fix Store Named Attribute for vertex groups.

Alexander Gavrilov noreply at git.blender.org
Sun Jul 17 09:29:35 CEST 2022


Commit: a373551ab8be118f54d6fff38257d240dd51c9e7
Author: Alexander Gavrilov
Date:   Sun Jul 17 10:30:11 2022 +0300
Branches: temp-angavrilov
https://developer.blender.org/rBa373551ab8be118f54d6fff38257d240dd51c9e7

Geometry Nodes: fix Store Named Attribute for vertex groups.

For some reason the evaluation code for this node starts with
deleting the attribute, which destroys its Vertex Group status
and the data is written as an abstract custom attribute. It is
much more logical to first try writing to the existing attribute.

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

M	source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc
index 69a4fad10e2..548767b5b4e 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_store_named_attribute.cc
@@ -108,24 +108,31 @@ static void try_capture_field_on_geometry(GeometryComponent &component,
   evaluator.add_with_destination(field, GMutableSpan{type, buffer, domain_size});
   evaluator.evaluate();
 
-  attributes.remove(name);
   if (attributes.contains(name)) {
     GAttributeWriter write_attribute = attributes.lookup_for_write(name);
     if (write_attribute && write_attribute.domain == domain &&
         write_attribute.varray.type() == type) {
       write_attribute.varray.set_all(buffer);
       write_attribute.finish();
+
+      type.destruct_n(buffer, domain_size);
+      MEM_freeN(buffer);
+      return;
     }
     else {
-      /* Cannot change type of built-in attribute. */
+      attributes.remove(name);
+
+      if (attributes.contains(name)) {
+        /* Cannot change type of built-in attribute. */
+        type.destruct_n(buffer, domain_size);
+        MEM_freeN(buffer);
+        return;
+      }
     }
-    type.destruct_n(buffer, domain_size);
-    MEM_freeN(buffer);
   }
-  else {
-    if (!attributes.add(name, domain, data_type, bke::AttributeInitMove{buffer})) {
-      MEM_freeN(buffer);
-    }
+
+  if (!attributes.add(name, domain, data_type, bke::AttributeInitMove{buffer})) {
+    MEM_freeN(buffer);
   }
 }



More information about the Bf-blender-cvs mailing list