6namespace qml_material::math
11inline constexpr scalar k_scalar_one = 1.0f;
12inline constexpr scalar k_nearly_zero = k_scalar_one / (1 << 12);
13inline constexpr scalar k_float_sqrt2 = 1.41421356f;
16[[nodiscard]]
constexpr const T& pin(
const T& x,
const T& lo,
const T& hi) {
17 return std::max(lo, std::min(x, hi));
20[[nodiscard]]
inline float divide_and_pin(
float numer,
float denom,
float lo,
float hi) {
21 return std::max(lo, std::min(numer / denom, hi));
24[[nodiscard]]
constexpr int saturate_to_int(
float x) {
25 constexpr int k_max_s32_fits_in_float = 2147483520;
26 constexpr int k_min_s32_fits_in_float = -k_max_s32_fits_in_float;
27 x = x < k_max_s32_fits_in_float ? x : (float)k_max_s32_fits_in_float;
28 x = x > k_min_s32_fits_in_float ? x : (float)k_min_s32_fits_in_float;
32[[nodiscard]]
constexpr float round(
double x) {
return (
float)std::floor(x + 0.5); }
34[[nodiscard]]
constexpr int round_to_int(
double x) {
return saturate_to_int(round(x)); }