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.
This commit is contained in:
Hans Goudey
2022-05-06 10:58:54 +02:00
parent 12a1fa9cf4
commit 477066adee

View File

@@ -65,6 +65,8 @@ CurvesGeometry::CurvesGeometry(const int point_size, const int curve_size)
this->update_customdata_pointers();
this->runtime = MEM_new<CurvesGeometryRuntime>(__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<int8_t> types_span = this->curve_types().get_internal_span();
const VArray<int8_t> types = this->curve_types();
if (types.is_single()) {
return types.get_internal_single() == type ? IndexMask(this->curves_num()) : IndexMask(0);
}
Span<int8_t> 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; });
}