From d1c9a99c07b1160b01710577ea0109addceac97c Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 19 May 2021 17:17:16 -0400 Subject: Splines: Optimize interpolation in special case virtual array When the input data is a virtual array for a single value, we don't need to run any of the interpolation, instead just copy the input data. --- source/blender/blenkernel/intern/spline_bezier.cc | 4 ++++ source/blender/blenkernel/intern/spline_nurbs.cc | 4 ++++ 2 files changed, 8 insertions(+) (limited to 'source') diff --git a/source/blender/blenkernel/intern/spline_bezier.cc b/source/blender/blenkernel/intern/spline_bezier.cc index 0fd3efce033..4be3ba8576e 100644 --- a/source/blender/blenkernel/intern/spline_bezier.cc +++ b/source/blender/blenkernel/intern/spline_bezier.cc @@ -560,6 +560,10 @@ blender::fn::GVArrayPtr BezierSpline::interpolate_to_evaluated_points( { BLI_assert(source_data.size() == this->size()); + if (source_data.is_single()) { + return source_data.shallow_copy(); + } + const int eval_size = this->evaluated_points_size(); if (eval_size == 1) { return source_data.shallow_copy(); diff --git a/source/blender/blenkernel/intern/spline_nurbs.cc b/source/blender/blenkernel/intern/spline_nurbs.cc index cd3ebe9e680..ae691d26cdb 100644 --- a/source/blender/blenkernel/intern/spline_nurbs.cc +++ b/source/blender/blenkernel/intern/spline_nurbs.cc @@ -389,6 +389,10 @@ blender::fn::GVArrayPtr NURBSpline::interpolate_to_evaluated_points( { BLI_assert(source_data.size() == this->size()); + if (source_data.is_single()) { + return source_data.shallow_copy(); + } + this->calculate_basis_cache(); Span weights(basis_cache_); -- cgit v1.2.3