[Bf-blender-cvs] [3935bf255e3] master: Fix T99677: crash when convex hull node is used on empty mesh

Jacques Lucke noreply at git.blender.org
Thu Jul 14 09:56:41 CEST 2022


Commit: 3935bf255e3313534bc16090aac8118939a1b333
Author: Jacques Lucke
Date:   Thu Jul 14 09:57:08 2022 +0200
Branches: master
https://developer.blender.org/rB3935bf255e3313534bc16090aac8118939a1b333

Fix T99677: crash when convex hull node is used on empty mesh

Fundamental issue is that the attribute api returns none, because
the custom data api returns null for a layer when the size of 0.
This should be improved separately.

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

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

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
index 489b618b8be..3394a7cad62 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
@@ -183,8 +183,10 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
     const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>();
     const VArray<float3> varray = component->attributes()->lookup<float3>("position",
                                                                           ATTR_DOMAIN_POINT);
-    varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
-    offset += varray.size();
+    if (varray) {
+      varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
+      offset += varray.size();
+    }
   }
 
   if (geometry_set.has_pointcloud()) {
@@ -192,8 +194,10 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
         geometry_set.get_component_for_read<PointCloudComponent>();
     const VArray<float3> varray = component->attributes()->lookup<float3>("position",
                                                                           ATTR_DOMAIN_POINT);
-    varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
-    offset += varray.size();
+    if (varray) {
+      varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
+      offset += varray.size();
+    }
   }
 
   if (geometry_set.has_curves()) {



More information about the Bf-blender-cvs mailing list