91template<
typename ChannelStorageType, eSpace Space, eAlpha Alpha>
class ColorRGBA {
93 ChannelStorageType
r,
g,
b,
a;
96 constexpr ColorRGBA(
const ChannelStorageType rgba[4])
97 :
r(rgba[0]),
g(rgba[1]),
b(rgba[2]),
a(rgba[3])
102 const ChannelStorageType
g,
103 const ChannelStorageType
b,
104 const ChannelStorageType
a)
109 operator ChannelStorageType *()
114 operator const ChannelStorageType *()
const
123 stream <<
Space << Alpha <<
"(" << c.
r <<
", " << c.
g <<
", " << c.
b <<
", " << c.
a <<
")";
131 uint64_t x1 = *
reinterpret_cast<const uint32_t *
>(&
r);
132 uint64_t x2 = *
reinterpret_cast<const uint32_t *
>(&
g);
133 uint64_t x3 = *
reinterpret_cast<const uint32_t *
>(&
b);
134 uint64_t x4 = *
reinterpret_cast<const uint32_t *
>(&
a);
135 return (x1 * 1283591) ^ (x2 * 850177) ^ (x3 * 735391) ^ (x4 * 442319);
141template<eAlpha Alpha>
class ColorSceneLinear4f;
142template<eAlpha Alpha>
class ColorSceneLinearByteEncoded4b;
143template<
typename ChannelStorageType>
class ColorTheme4;
150template<eAlpha Alpha>
185 return premultiplied;
210template<eAlpha Alpha>
212 :
public ColorRGBA<uint8_t, eSpace::SceneLinearByteEncoded, Alpha> {
246template<
typename ChannelStorageType>
257 ChannelStorageType
g,
258 ChannelStorageType
b,
259 ChannelStorageType
a)
269 if constexpr ((std::is_same_v<ChannelStorageType, uint8_t>)) {
282 if constexpr ((std::is_same_v<ChannelStorageType, float>)) {
MINLINE void straight_to_premul_v4_v4(float premul[4], const float straight[4])
MINLINE void srgb_to_linearrgb_uchar4(float linear[4], const unsigned char srgb[4])
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
void rgba_float_to_uchar(unsigned char r_col[4], const float col_f[4])
MINLINE void premul_to_straight_v4_v4(float straight[4], const float premul[4])
MINLINE void linearrgb_to_srgb_uchar4(unsigned char srgb[4], const float linear[4])
MINLINE void linearrgb_to_srgb_v4(float srgb[4], const float linear[4])
#define BLI_STRUCT_EQUALITY_OPERATORS_4(Type, m1, m2, m3, m4)
unsigned long long int uint64_t
constexpr ColorRGBA(const ChannelStorageType r, const ChannelStorageType g, const ChannelStorageType b, const ChannelStorageType a)
constexpr ColorRGBA(const ChannelStorageType rgba[4])
friend std::ostream & operator<<(std::ostream &stream, const ColorRGBA< ChannelStorageType, Space, Alpha > &c)
constexpr ColorRGBA()=default
constexpr ColorSceneLinear4f(const float *rgba)
constexpr ColorSceneLinear4f()=default
ColorSceneLinearByteEncoded4b< Alpha > encode() const
ColorSceneLinear4f< eAlpha::Straight > unpremultiply_alpha() const
constexpr ColorSceneLinear4f(float r, float g, float b, float a)
ColorSceneLinear4f< eAlpha::Premultiplied > premultiply_alpha() const
ColorSceneLinear4f< Alpha > decode() const
constexpr ColorSceneLinearByteEncoded4b(const uint8_t *rgba)
constexpr ColorSceneLinearByteEncoded4b(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
constexpr ColorSceneLinearByteEncoded4b()=default
constexpr ColorTheme4(const ChannelStorageType *rgba)
constexpr ColorTheme4()=default
constexpr ColorTheme4(ChannelStorageType r, ChannelStorageType g, ChannelStorageType b, ChannelStorageType a)
ColorTheme4< float > to_4f() const
ColorTheme4< uint8_t > to_4b() const
ColorTheme4< uint8_t > ColorTheme4b
std::ostream & operator<<(std::ostream &stream, const eAlpha &space)
ColorSceneLinearByteEncoded4b< eAlpha::Straight > ColorPaint4b
BLI_INLINE ColorTheme4< uint8_t > BLI_color_convert_to_theme4b(const ColorTheme4< float > &theme4f)
ColorSceneLinear4f< eAlpha::Straight > ColorPaint4f
BLI_INLINE ColorTheme4< float > BLI_color_convert_to_theme4f(const ColorTheme4< uint8_t > &theme4b)
BLI_INLINE ColorSceneLinear4f< eAlpha::Straight > BLI_color_convert_to_scene_linear(const ColorTheme4f &theme4f)
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
ColorTheme4< float > ColorTheme4f
ColorSceneLinearByteEncoded4b< eAlpha::Premultiplied > ColorGeometry4b