[Bf-blender-cvs] [efa4023e0a7] temp-gpu-image-engine: Fix T94082: Curve to point empty evaluated NURBS crash

Hans Goudey noreply at git.blender.org
Wed Dec 15 14:37:52 CET 2021


Commit: efa4023e0a738b00b124a819af99f9afef1c0bbb
Author: Hans Goudey
Date:   Tue Dec 14 18:57:45 2021 -0600
Branches: temp-gpu-image-engine
https://developer.blender.org/rBefa4023e0a738b00b124a819af99f9afef1c0bbb

Fix T94082: Curve to point empty evaluated NURBS crash

This is basically the same as rBee4ed99866fbb7ab04, the fix is
simply to check if the spline has evaluated points when deciding
the offsets into the result points array.

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

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

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
index 5c12a4bf7bd..2f9dfa8158b 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
@@ -94,9 +94,14 @@ static Array<int> calculate_spline_point_offsets(GeoNodeExecParams &params,
         return {0};
       }
       Array<int> offsets(size + 1);
-      for (const int i : offsets.index_range()) {
-        offsets[i] = count * i;
+      int offset = 0;
+      for (const int i : IndexRange(size)) {
+        offsets[i] = offset;
+        if (splines[i]->evaluated_points_size() > 0) {
+          offset += count;
+        }
       }
+      offsets.last() = offset;
       return offsets;
     }
     case GEO_NODE_CURVE_RESAMPLE_LENGTH: {
@@ -106,7 +111,9 @@ static Array<int> calculate_spline_point_offsets(GeoNodeExecParams &params,
       int offset = 0;
       for (const int i : IndexRange(size)) {
         offsets[i] = offset;
-        offset += splines[i]->length() / resolution + 1;
+        if (splines[i]->evaluated_points_size() > 0) {
+          offset += splines[i]->length() / resolution + 1;
+        }
       }
       offsets.last() = offset;
       return offsets;



More information about the Bf-blender-cvs mailing list