From 477066adeee17697757cfb7eb779488dcc7e2eea Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Fri, 6 May 2022 10:58:54 +0200 Subject: [PATCH] Fix: Handle default better in curves type count cache When the curve types array isn't allocated, the default type is Catmull Rom. Because the type counts are calculated eagerly, they must be in a valid state. --- source/blender/blenkernel/intern/curves_geometry.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/curves_geometry.cc b/source/blender/blenkernel/intern/curves_geometry.cc index e7337d5c012..4dd0fad57d4 100644 --- a/source/blender/blenkernel/intern/curves_geometry.cc +++ b/source/blender/blenkernel/intern/curves_geometry.cc @@ -65,6 +65,8 @@ CurvesGeometry::CurvesGeometry(const int point_size, const int curve_size) this->update_customdata_pointers(); this->runtime = MEM_new(__func__); + /* Fill the type counts with the default so they're in a valid state. */ + this->runtime->type_counts[CURVE_TYPE_CATMULL_ROM] = curve_size; } /** @@ -541,7 +543,11 @@ IndexMask CurvesGeometry::indices_for_curve_type(const CurveType type, if (this->curve_type_counts()[type] == this->curves_num()) { return selection; } - Span types_span = this->curve_types().get_internal_span(); + const VArray types = this->curve_types(); + if (types.is_single()) { + return types.get_internal_single() == type ? IndexMask(this->curves_num()) : IndexMask(0); + } + Span types_span = types.get_internal_span(); return index_mask_ops::find_indices_based_on_predicate( selection, 1024, r_indices, [&](const int index) { return types_span[index] == type; }); }