[Bf-blender-cvs] [3337838b499] master: Fix: retrieved writable attribute but did not write to it

Jacques Lucke noreply at git.blender.org
Fri Jan 6 13:05:06 CET 2023


Commit: 3337838b4990ab92aca7644f36f5f2273ffb4abe
Author: Jacques Lucke
Date:   Fri Jan 6 12:54:08 2023 +0100
Branches: master
https://developer.blender.org/rB3337838b4990ab92aca7644f36f5f2273ffb4abe

Fix: retrieved writable attribute but did not write to it

This caused a warning because `attribute.finish` was not called.

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

M	source/blender/blenkernel/intern/geometry_fields.cc

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

diff --git a/source/blender/blenkernel/intern/geometry_fields.cc b/source/blender/blenkernel/intern/geometry_fields.cc
index 6fe822d6dc6..9c691cb5870 100644
--- a/source/blender/blenkernel/intern/geometry_fields.cc
+++ b/source/blender/blenkernel/intern/geometry_fields.cc
@@ -433,8 +433,10 @@ bool try_capture_field_on_geometry(GeometryComponent &component,
                                  GMutableSpan{type, buffer, domain_size});
   evaluator.evaluate();
 
-  if (GAttributeWriter attribute = attributes.lookup_for_write(attribute_id)) {
-    if (attribute.domain == domain && attribute.varray.type() == type) {
+  const std::optional<AttributeMetaData> meta_data = attributes.lookup_meta_data(attribute_id);
+
+  if (meta_data && meta_data->domain == domain && meta_data->data_type == data_type) {
+    if (GAttributeWriter attribute = attributes.lookup_for_write(attribute_id)) {
       attribute.varray.set_all(buffer);
       attribute.finish();
       type.destruct_n(buffer, domain_size);
@@ -442,6 +444,7 @@ bool try_capture_field_on_geometry(GeometryComponent &component,
       return true;
     }
   }
+
   attributes.remove(attribute_id);
   if (attributes.add(attribute_id, domain, data_type, bke::AttributeInitMoveArray{buffer})) {
     return true;



More information about the Bf-blender-cvs mailing list