38 constexpr color(
color const &)
noexcept =
default;
40 constexpr color &operator=(
color const &)
noexcept =
default;
41 constexpr color &operator=(
color &&)
noexcept =
default;
47 [[nodiscard]]
constexpr explicit operator f32x4()
const noexcept
52 [[nodiscard]]
constexpr color() noexcept : _v(0.0, 0.0, 0.0, 1.0) {}
53 [[nodiscard]]
constexpr color(
float r,
float g,
float b,
float a = 1.0) noexcept : _v(r, g, b, a) {}
54 [[nodiscard]]
constexpr color(
double r,
double g,
double b,
double a = 1.0) noexcept :
55 _v(
static_cast<float>(r),
static_cast<float>(g),
static_cast<float>(b),
static_cast<float>(a))
59 [[nodiscard]]
static constexpr color transparent()
noexcept
61 return {0.0f, 0.0f, 0.0f, 0.0f};
64 [[nodiscard]]
static constexpr color white()
noexcept
66 return {1.0f, 1.0f, 1.0f, 1.0f};
69 [[nodiscard]]
static constexpr color black()
noexcept
71 return {0.0f, 0.0f, 0.0f, 1.0f};
74 [[nodiscard]]
constexpr float &r()
noexcept
79 [[nodiscard]]
constexpr float &g()
noexcept
84 [[nodiscard]]
constexpr float &b()
noexcept
89 [[nodiscard]]
constexpr float &a()
noexcept
94 [[nodiscard]]
constexpr float const &r()
const noexcept
99 [[nodiscard]]
constexpr float const &g()
const noexcept
104 [[nodiscard]]
constexpr float const &b()
const noexcept
109 [[nodiscard]]
constexpr float const &a()
const noexcept
114 [[nodiscard]]
constexpr bool is_valid()
const noexcept
116 return _v.w() >= 0.0 && _v.w() <= 1.0;
119 [[nodiscard]]
constexpr friend bool operator==(
color const &lhs,
color const &rhs)
noexcept
121 return lhs._v == rhs._v;
124 [[nodiscard]]
constexpr friend color operator*(
color const &lhs,
color const &rhs)
noexcept
126 return color{lhs._v * rhs._v};
129 [[nodiscard]]
constexpr friend color composit(
color const &lhs,
color const &rhs)
noexcept
131 return color{composit(lhs._v, rhs._v)};
134 [[nodiscard]]
constexpr friend color pre_multiply_alpha(
color const &rhs)
noexcept
136 auto r = rhs._v * rhs.a();