[Bf-blender-cvs] [e35053d3690] master: Fix T103850: Convex hull node crash with empty geometry components
Iliya Katueshenock
noreply at git.blender.org
Fri Jan 13 22:46:48 CET 2023
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();
}
More information about the Bf-blender-cvs
mailing list