diff options
Diffstat (limited to 'intern/cycles/util/util_math_cdf.h')
-rw-r--r-- | intern/cycles/util/util_math_cdf.h | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/intern/cycles/util/util_math_cdf.h b/intern/cycles/util/util_math_cdf.h index 983855e3e9b..43995204263 100644 --- a/intern/cycles/util/util_math_cdf.h +++ b/intern/cycles/util/util_math_cdf.h @@ -24,27 +24,24 @@ CCL_NAMESPACE_BEGIN /* Evaluate CDF of a given functor with given range and resolution. */ -template <typename Functor> -void util_cdf_evaluate(const int resolution, - const float from, - const float to, - Functor functor, - vector<float> &cdf) +template<typename Functor> +void util_cdf_evaluate( + const int resolution, const float from, const float to, Functor functor, vector<float> &cdf) { - const int cdf_count = resolution + 1; - const float range = to - from; - cdf.resize(cdf_count); - cdf[0] = 0.0f; - /* Actual CDF evaluation. */ - for(int i = 0; i < resolution; ++i) { - float x = from + range * (float)i / (resolution - 1); - float y = functor(x); - cdf[i + 1] = cdf[i] + fabsf(y); - } - /* Normalize the CDF. */ - for(int i = 0; i <= resolution; i++) { - cdf[i] /= cdf[resolution]; - } + const int cdf_count = resolution + 1; + const float range = to - from; + cdf.resize(cdf_count); + cdf[0] = 0.0f; + /* Actual CDF evaluation. */ + for (int i = 0; i < resolution; ++i) { + float x = from + range * (float)i / (resolution - 1); + float y = functor(x); + cdf[i + 1] = cdf[i] + fabsf(y); + } + /* Normalize the CDF. */ + for (int i = 0; i <= resolution; i++) { + cdf[i] /= cdf[resolution]; + } } /* Invert pre-calculated CDF function. */ @@ -56,7 +53,7 @@ void util_cdf_invert(const int resolution, vector<float> &inv_cdf); /* Evaluate inverted CDF of a given functor with given range and resolution. */ -template <typename Functor> +template<typename Functor> void util_cdf_inverted(const int resolution, const float from, const float to, @@ -64,15 +61,15 @@ void util_cdf_inverted(const int resolution, const bool make_symmetric, vector<float> &inv_cdf) { - vector<float> cdf; - /* There is no much smartness going around lower resolution for the CDF table, - * this just to match the old code from pixel filter so it all stays exactly - * the same and no regression tests are failed. - */ - util_cdf_evaluate(resolution - 1, from, to, functor, cdf); - util_cdf_invert(resolution, from, to, cdf, make_symmetric, inv_cdf); + vector<float> cdf; + /* There is no much smartness going around lower resolution for the CDF table, + * this just to match the old code from pixel filter so it all stays exactly + * the same and no regression tests are failed. + */ + util_cdf_evaluate(resolution - 1, from, to, functor, cdf); + util_cdf_invert(resolution, from, to, cdf, make_symmetric, inv_cdf); } CCL_NAMESPACE_END -#endif /* __UTIL_MATH_H_CDF__ */ +#endif /* __UTIL_MATH_H_CDF__ */ |