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) {}
55 [[nodiscard]]
static constexpr color transparent()
noexcept
57 return {0.0f, 0.0f, 0.0f, 0.0f};
60 [[nodiscard]]
static constexpr color white()
noexcept
62 return {1.0f, 1.0f, 1.0f, 1.0f};
65 [[nodiscard]]
static constexpr color black()
noexcept
67 return {0.0f, 0.0f, 0.0f, 1.0f};
70 [[nodiscard]]
constexpr float &r()
noexcept
75 [[nodiscard]]
constexpr float &g()
noexcept
80 [[nodiscard]]
constexpr float &b()
noexcept
85 [[nodiscard]]
constexpr float &a()
noexcept
90 [[nodiscard]]
constexpr float const &r()
const noexcept
95 [[nodiscard]]
constexpr float const &g()
const noexcept
100 [[nodiscard]]
constexpr float const &b()
const noexcept
105 [[nodiscard]]
constexpr float const &a()
const noexcept
110 [[nodiscard]]
constexpr bool is_valid()
const noexcept
112 return _v.w() >= 0.0 && _v.w() <= 1.0;
115 [[nodiscard]]
constexpr friend bool operator==(
color const &lhs,
color const &rhs)
noexcept
117 return lhs._v == rhs._v;
120 [[nodiscard]]
constexpr friend color operator*(
color const &lhs,
color const &rhs)
noexcept
122 return color{lhs._v * rhs._v};
125 [[nodiscard]]
constexpr friend color composit(
color const &lhs,
color const &rhs)
noexcept
127 return color{composit(lhs._v, rhs._v)};
130 [[nodiscard]]
constexpr friend color pre_multiply_alpha(
color const &rhs)
noexcept
132 auto r = rhs._v * rhs.a();