19 template<ColorComponent T>
20 struct alignas(std::max(alignof(T), alignof(uint32_t)))
Rgba final {
29 static constexpr Rgba clear() {
return {0.0f, 0.0f, 0.0f, 0.0f}; }
64 r{
v.x()},
g{
v.y()},
b{
v.z()},
a(1.0f)
68 r{
v.x()},
g{
v.y()},
b{
v.z()},
a{alpha}
72 r{
v.x()},
g{
v.y()},
b{
v.z()},
a{
v.w()}
75 template<ColorComponent U>
76 requires std::constructible_from<T, const U&>
92 template<ColorComponent U>
93 requires std::constructible_from<T, const U&>
94 explicit (
not (std::convertible_to<U, T>))
96 r{
static_cast<T>(
v.r)},
97 g{
static_cast<T>(
v.g)},
98 b{
static_cast<T>(
v.b)},
99 a{
static_cast<T>(
v.a)}
112 constexpr size_t size()
const {
return 4; }
172 template<ColorComponent T>
175 return o <<
"Rgba{r = " <<
rgba.r <<
", g = " <<
rgba.g <<
", b = " <<
rgba.b <<
", a = " <<
rgba.a <<
"}";
179 template<ColorComponent T>
186 template<ColorComponent T>
194 template<
size_t I, ColorComponent T>
197 template<
size_t I, ColorComponent T>
200 template<
size_t I, ColorComponent T>
203 template<
size_t I, ColorComponent T>
207 template<ColorComponent T, std::invocable<const T&> UnaryOperation>
210 Rgba<
decltype(std::invoke(
op, x[0]))>
rv{};
211 for (
size_t i = 0;
i < 4; ++
i) {
212 rv[
i] = std::invoke(
op, x[
i]);
218 template<ColorComponent T, std::invocable<const T&, const T&> BinaryOperation>
221 Rgba<
decltype(std::invoke(
op, x[0], y[0]))>
rv{};
222 for (
size_t i = 0;
i < 4; ++
i) {
223 rv[
i] = std::invoke(
op, x[
i], y[
i]);
229 template<ColorComponent T,
typename TInterpolant>
236 template<ColorComponent T>
244template<osc::ColorComponent T>
245struct std::tuple_size<
osc::Rgba<T>> {
246 static inline constexpr size_t value = 4;
249template<
size_t I, osc::ColorComponent T>
250struct std::tuple_element<I,
osc::Rgba<T>> {
255template<osc::ColorComponent T>
256struct std::hash<
osc::Rgba<T>> final {
Definition custom_decoration_generator.h:5
std::ostream & operator<<(std::ostream &, const Object &)
constexpr auto map(const Rgba< T > &x, UnaryOperation op) -> Rgba< decltype(std::invoke(op, x[0]))>
Definition rgba.h:208
constexpr const T & get(const Rgb< T > &v)
Definition rgb.h:88
constexpr auto lerp(const Rgba< T > &x, const Rgba< T > &y, TInterpolant t)
Definition rgba.h:230
constexpr Rgba< T > saturate(const Rgba< T > &x)
Definition rgba.h:237
size_t hash_of(const T &v) noexcept(noexcept(std::hash< T >{}(v)))
Definition hash_helpers.h:24
constexpr U to(T &&value)
Definition conversion.h:56
constexpr const T * value_ptr(const Rgba< T > &rgba)
Definition rgba.h:180
static constexpr Rgb muted_yellow()
Definition rgb.h:39
static constexpr Rgb dark_grey()
Definition rgb.h:26
static constexpr Rgb muted_green()
Definition rgb.h:32
static constexpr Rgb muted_blue()
Definition rgb.h:35
static constexpr Rgb magenta()
Definition rgb.h:38
static constexpr Rgb yellow()
Definition rgb.h:40
static constexpr Rgb blue()
Definition rgb.h:36
static constexpr Rgb black()
Definition rgb.h:29
static constexpr Rgb muted_red()
Definition rgb.h:30
static constexpr Rgb red()
Definition rgb.h:31
static constexpr Rgb lightest_grey()
Definition rgb.h:23
static constexpr Rgb orange()
Definition rgb.h:41
static constexpr Rgb darkest_grey()
Definition rgb.h:28
static constexpr Rgb purple()
Definition rgb.h:42
static constexpr Rgb cyan()
Definition rgb.h:37
static constexpr Rgb lighter_grey()
Definition rgb.h:24
static constexpr Rgb darker_grey()
Definition rgb.h:27
static constexpr Rgb white()
Definition rgb.h:22
static constexpr Rgb green()
Definition rgb.h:33
static constexpr Rgb light_grey()
Definition rgb.h:25
static constexpr Rgb dark_green()
Definition rgb.h:34
static constexpr Rgba blue()
Definition rgba.h:45
const value_type & const_reference
Definition rgba.h:24
static constexpr Rgba black()
Definition rgba.h:38
T value_type
Definition rgba.h:22
constexpr Rgba(value_type v, value_type alpha)
Definition rgba.h:59
static constexpr Rgba orange()
Definition rgba.h:50
static constexpr Rgba red()
Definition rgba.h:40
value_type r
Definition rgba.h:166
constexpr Rgba(const Rgb< T > &rgb, T alpha=T{1.0f})
Definition rgba.h:102
static constexpr Rgba cyan()
Definition rgba.h:46
static constexpr Rgba dark_green()
Definition rgba.h:43
static constexpr Rgba purple()
Definition rgba.h:51
constexpr Rgba(value_type r_, value_type g_, value_type b_)
Definition rgba.h:88
static constexpr Rgba muted_yellow()
Definition rgba.h:48
constexpr reference operator[](size_type pos)
Definition rgba.h:109
constexpr iterator end()
Definition rgba.h:117
constexpr const_iterator begin() const
Definition rgba.h:115
constexpr friend Rgba operator*(const Rgba &lhs, const Rgba &rhs)
Definition rgba.h:132
constexpr Rgb< T > rgb() const
Definition rgba.h:161
value_type a
Definition rgba.h:169
constexpr Rgba(value_type v)
Definition rgba.h:55
static constexpr Rgba darkest_grey()
Definition rgba.h:37
constexpr size_t size() const
Definition rgba.h:112
static constexpr Rgba muted_green()
Definition rgba.h:41
static constexpr Rgba darker_grey()
Definition rgba.h:36
size_t size_type
Definition rgba.h:25
static constexpr Rgba white()
Definition rgba.h:31
not(std::convertible_to< U, T >)) const expr Rgba(const Rgba< U > &v)
Definition rgba.h:94
static constexpr Rgba yellow()
Definition rgba.h:49
value_type & reference
Definition rgba.h:23
static constexpr Rgba green()
Definition rgba.h:42
value_type * iterator
Definition rgba.h:26
constexpr friend Rgba & operator*=(Rgba &lhs, const Rgba &rhs)
Definition rgba.h:122
constexpr iterator begin()
Definition rgba.h:114
constexpr friend Rgba operator*(value_type lhs, const Rgba &rhs)
Definition rgba.h:139
constexpr Rgba(const Vector< value_type, 4 > &v)
Definition rgba.h:71
static constexpr Rgba lighter_grey()
Definition rgba.h:33
constexpr const_reference operator[](size_type pos) const
Definition rgba.h:110
friend bool operator==(const Rgba &, const Rgba &)=default
constexpr Rgba(const Vector< value_type, 3 > &v)
Definition rgba.h:63
static constexpr Rgba muted_red()
Definition rgba.h:39
static constexpr Rgba light_grey()
Definition rgba.h:34
constexpr Rgba(const Vector< U, 4 > &v)
Definition rgba.h:77
static constexpr Rgba dark_grey()
Definition rgba.h:35
constexpr Rgba with_element(size_type pos, value_type value) const
Definition rgba.h:154
value_type b
Definition rgba.h:168
static constexpr Rgba clear()
Definition rgba.h:29
static constexpr Rgba magenta()
Definition rgba.h:47
const value_type * const_iterator
Definition rgba.h:27
static constexpr Rgba muted_blue()
Definition rgba.h:44
value_type g
Definition rgba.h:167
constexpr Rgba(const Vector< value_type, 3 > &v, value_type alpha)
Definition rgba.h:67
constexpr const_iterator end() const
Definition rgba.h:118
static constexpr Rgba lightest_grey()
Definition rgba.h:32
constexpr Rgba with_alpha(value_type a_) const
Definition rgba.h:149
constexpr Rgba(value_type r_, value_type g_, value_type b_, value_type a_)
Definition rgba.h:84
size_t operator()(const osc::Rgba< T > &rgba) const noexcept
Definition rgba.h:257
T type
Definition rgba.h:251