37 return lhs.progress < rhs.progress;
43 return math::epsilonEqual(lhs.progress, rhs.progress, math::epsilon<float>()) &&
44 lhs.element == rhs.element;
54 auto add_point(
const T& element,
float progress) -> size_t;
68 auto
is_valid() const noexcept ->
bool;
69 auto
sample(
float progress) const -> T;
77 bool has_lut() const noexcept {
return !lut_.empty(); }
85 mutable std::vector<T> lut_;
86 mutable size_t lut_size_ = 0;
87 mutable bool lut_dirty_ =
true;
90 void regenerate_lut_if_needed()
const;
91 T sample_from_lut(
float progress)
const;
92 T sample_original(
float progress)
const;
93 void mark_lut_dirty()
const { lut_dirty_ =
true; }
void set_progress(int index, float progress)
auto get_points() const noexcept -> const points_t &
auto get_progress(int index) -> float
auto is_valid() const noexcept -> bool
auto operator==(const gradient< T > &other) const -> bool
void set_element(int index, const T &element)
auto add_point(const T &element, float progress) -> size_t
std::vector< point_t > points_t
auto get_interpolation_mode() const noexcept -> gradient_interpolation_mode_t
void generate_lut(size_t lut_size=256)
bool has_lut() const noexcept
void set_interpolation_mode(gradient_interpolation_mode_t mode)
auto get_element(int index) -> T
void set_points(const points_t &points)
void remove_point(int index)
auto sample(float progress) const -> T
auto gradient_lerp(const vec4 &start, const vec4 &end, float progress) -> vec4
auto operator==(const gradient_point< T > &lhs, const gradient_point< T > &rhs) noexcept -> bool
gradient_interpolation_mode_t
auto operator<(const gradient_point< T > &lhs, const gradient_point< T > &rhs) noexcept -> bool