diff --git a/source/blender/draw/engines/eevee_next/eevee_sampling.cc b/source/blender/draw/engines/eevee_next/eevee_sampling.cc index 5f6ce7fa7dc..40ac5ceea9b 100644 --- a/source/blender/draw/engines/eevee_next/eevee_sampling.cc +++ b/source/blender/draw/engines/eevee_next/eevee_sampling.cc @@ -317,14 +317,12 @@ void Sampling::cdf_from_curvemapping(const CurveMapping &curve, Vector &c * Output vector is expected to already be sized according to the wanted resolution. */ void Sampling::cdf_invert(Vector &cdf, Vector &inverted_cdf) { + BLI_assert(cdf.first() == 0.0f && cdf.last() == 1.0f); for (int u : inverted_cdf.index_range()) { - float x = float(u) / float(inverted_cdf.size() - 1); - for (int i : cdf.index_range()) { - if (i == cdf.size() - 1) { - inverted_cdf[u] = 1.0f; - } - else if (cdf[i] >= x) { - float t = (x - cdf[i]) / (cdf[i + 1] - cdf[i]); + float x = clamp_f(u / float(inverted_cdf.size() - 1), 1e-5f, 1.0f - 1e-5f); + for (int i : cdf.index_range().drop_front(1)) { + if (cdf[i] >= x) { + float t = (x - cdf[i]) / (cdf[i] - cdf[i - 1]); inverted_cdf[u] = (float(i) + t) / float(cdf.size() - 1); break; }