[Bf-blender-cvs] [b43077ba3a2] blender-v3.0-release: Fix T92552: Spline evaluation with all points at the origin
Hans Goudey
noreply at git.blender.org
Fri Oct 29 01:24:06 CEST 2021
Commit: b43077ba3a2991096aa6484fcccd94d68998fb11
Author: Hans Goudey
Date: Thu Oct 28 18:23:55 2021 -0500
Branches: blender-v3.0-release
https://developer.blender.org/rBb43077ba3a2991096aa6484fcccd94d68998fb11
Fix T92552: Spline evaluation with all points at the origin
In this case, the uniform index sampling loop would fail to assign any
data to the samples, so fill the rest with the largest value possible,
corresponding to the end of the spline. Animation Nodes has the same
fix for this case.
===================================================================
M source/blender/blenkernel/intern/spline_base.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/spline_base.cc b/source/blender/blenkernel/intern/spline_base.cc
index 663c1951ba3..bbe4e0aab7b 100644
--- a/source/blender/blenkernel/intern/spline_base.cc
+++ b/source/blender/blenkernel/intern/spline_base.cc
@@ -486,6 +486,12 @@ Array<float> Spline::sample_uniform_index_factors(const int samples_size) const
prev_length = length;
}
+ /* Zero lengths or float innacuracies can cause invalid values, or simply
+ * skip some, so set the values that weren't completed in the main loop. */
+ for (const int i : IndexRange(i_sample, samples_size - i_sample)) {
+ samples[i] = float(samples_size);
+ }
+
if (!is_cyclic_) {
/* In rare cases this can prevent overflow of the stored index. */
samples.last() = lengths.size();
More information about the Bf-blender-cvs
mailing list