Commit: e35053d369067cdc2d8308c241aa599fd22d8115
Author: Iliya Katueshenock
Date:   Fri Jan 13 15:44:29 2023 -0600
Branches: master
https://developer.blender.org/rBe35053d369067cdc2d8308c241aa599fd22d8115

Fix T103850: Convex hull node crash with empty geometry components

Avoid using components that can contain null pointer.
Getting attibute should avoid trying to do it for a null mesh.
This fix bypasses working with components.

Differential Revision: https://developer.blender.org/D16997

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

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 84cc2b49141..3ede378e95a 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
@@ -143,10 +143,10 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
 
   Span<float3> positions_span;
 
-  if (const MeshComponent *component = 
geometry_set.get_component_for_read<MeshComponent>()) {
+  if (const Mesh *mesh = geometry_set.get_mesh_for_read()) {
     count++;
-    if (const VArray<float3> positions = 
component->attributes()->lookup<float3>(
-            "position", ATTR_DOMAIN_POINT)) {
+    if (const VArray<float3> positions = 
mesh->attributes().lookup<float3>("position",
+                                                                           
ATTR_DOMAIN_POINT)) {
       if (positions.is_span()) {
         span_count++;
         positions_span = positions.get_internal_span();
@@ -155,11 +155,10 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
     }
   }
 
-  if (const PointCloudComponent *component =
-          geometry_set.get_component_for_read<PointCloudComponent>()) {
+  if (const PointCloud *points = geometry_set.get_pointcloud_for_read()) {
     count++;
-    if (const VArray<float3> positions = 
component->attributes()->lookup<float3>(
-            "position", ATTR_DOMAIN_POINT)) {
+    if (const VArray<float3> positions = 
points->attributes().lookup<float3>("position",
+                                                                             
ATTR_DOMAIN_POINT)) {
       if (positions.is_span()) {
         span_count++;
         positions_span = positions.get_internal_span();
@@ -189,18 +188,17 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
   Array<float3> positions(total_num);
   int offset = 0;
 
-  if (const MeshComponent *component = 
geometry_set.get_component_for_read<MeshComponent>()) {
-    if (const VArray<float3> varray = 
component->attributes()->lookup<float3>("position",
-                                                                              
ATTR_DOMAIN_POINT)) {
+  if (const Mesh *mesh = geometry_set.get_mesh_for_read()) {
+    if (const VArray<float3> varray = 
mesh->attributes().lookup<float3>("position",
+                                                                        
ATTR_DOMAIN_POINT)) {
       varray.materialize(positions.as_mutable_span().slice(offset, 
varray.size()));
       offset += varray.size();
     }
   }
 
-  if (const PointCloudComponent *component =
-          geometry_set.get_component_for_read<PointCloudComponent>()) {
-    if (const VArray<float3> varray = 
component->attributes()->lookup<float3>("position",
-                                                                              
ATTR_DOMAIN_POINT)) {
+  if (const PointCloud *points = geometry_set.get_pointcloud_for_read()) {
+    if (const VArray<float3> varray = 
points->attributes().lookup<float3>("position",
+                                                                          
ATTR_DOMAIN_POINT)) {
       varray.materialize(positions.as_mutable_span().slice(offset, 
varray.size()));
       offset += varray.size();
     }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to