Commit: 477066adeee17697757cfb7eb779488dcc7e2eea
Author: Hans Goudey
Date:   Fri May 6 10:58:54 2022 +0200
Branches: master
https://developer.blender.org/rB477066adeee17697757cfb7eb779488dcc7e2eea

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.

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

M       source/blender/blenkernel/intern/curves_geometry.cc

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

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<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; });
 }

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

Reply via email to