Blender  V3.3
BLI_color_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "testing/testing.h"
4 
5 #include "BLI_color.hh"
6 
7 namespace blender::tests {
8 
9 /* -------------------------------------------------------------------- */
13 TEST(color, ThemeByteToFloat)
14 {
15  ColorTheme4b theme_byte(192, 128, 64, 128);
16  ColorTheme4f theme_float = theme_byte.to_4f();
17  EXPECT_NEAR(0.75f, theme_float.r, 0.01f);
18  EXPECT_NEAR(0.5f, theme_float.g, 0.01f);
19  EXPECT_NEAR(0.25f, theme_float.b, 0.01f);
20  EXPECT_NEAR(0.5f, theme_float.a, 0.01f);
21 }
22 
23 TEST(color, SrgbStraightFloatToByte)
24 {
25  ColorTheme4f theme_float(0.75f, 0.5f, 0.25f, 0.5f);
26  ColorTheme4b theme_byte = theme_float.to_4b();
27  EXPECT_EQ(191, theme_byte.r);
28  EXPECT_EQ(128, theme_byte.g);
29  EXPECT_EQ(64, theme_byte.b);
30  EXPECT_EQ(128, theme_byte.a);
31 }
32 
33 TEST(color, SrgbStraightToSceneLinearPremultiplied)
34 {
36 
37  ColorTheme4b theme(192, 128, 64, 128);
39  BLI_color_convert_to_scene_linear(theme).premultiply_alpha();
40  EXPECT_NEAR(0.26f, linear.r, 0.01f);
41  EXPECT_NEAR(0.11f, linear.g, 0.01f);
42  EXPECT_NEAR(0.02f, linear.b, 0.01f);
43  EXPECT_NEAR(0.5f, linear.a, 0.01f);
44 }
45 
46 TEST(color, SceneLinearStraightToPremultiplied)
47 {
48  ColorSceneLinear4f<eAlpha::Straight> straight(0.75f, 0.5f, 0.25f, 0.5f);
50  EXPECT_NEAR(0.37f, premultiplied.r, 0.01f);
51  EXPECT_NEAR(0.25f, premultiplied.g, 0.01f);
52  EXPECT_NEAR(0.12f, premultiplied.b, 0.01f);
53  EXPECT_NEAR(0.5f, premultiplied.a, 0.01f);
54 }
55 
56 TEST(color, SceneLinearPremultipliedToStraight)
57 {
58  ColorSceneLinear4f<eAlpha::Premultiplied> premultiplied(0.75f, 0.5f, 0.25f, 0.5f);
60  EXPECT_NEAR(1.5f, straight.r, 0.01f);
61  EXPECT_NEAR(1.0f, straight.g, 0.01f);
62  EXPECT_NEAR(0.5f, straight.b, 0.01f);
63  EXPECT_NEAR(0.5f, straight.a, 0.01f);
64 }
65 
66 TEST(color, SceneLinearStraightSrgbFloat)
67 {
69  ColorSceneLinear4f<eAlpha::Straight> linear(0.75f, 0.5f, 0.25f, 0.5f);
71  EXPECT_NEAR(0.88f, theme.r, 0.01);
72  EXPECT_NEAR(0.73f, theme.g, 0.01);
73  EXPECT_NEAR(0.53f, theme.b, 0.01);
74  EXPECT_NEAR(0.5f, theme.a, 0.01);
75 }
76 
77 TEST(color, SceneLinearPremultipliedToSrgbFloat)
78 {
80  ColorSceneLinear4f<eAlpha::Premultiplied> linear(0.75f, 0.5f, 0.25f, 0.5f);
82 
83  EXPECT_NEAR(1.19f, theme.r, 0.01);
84  EXPECT_NEAR(1.0f, theme.g, 0.01);
85  EXPECT_NEAR(0.74f, theme.b, 0.01);
86  EXPECT_NEAR(0.5f, theme.a, 0.01);
87 }
88 
89 TEST(color, SceneLinearStraightSrgbByte)
90 {
92  ColorSceneLinear4f<eAlpha::Straight> linear(0.75f, 0.5f, 0.25f, 0.5f);
94  EXPECT_EQ(225, theme.r);
95  EXPECT_EQ(188, theme.g);
96  EXPECT_EQ(137, theme.b);
97  EXPECT_EQ(128, theme.a);
98 }
99 
100 TEST(color, SceneLinearPremultipliedToSrgbByte)
101 {
103  ColorSceneLinear4f<eAlpha::Premultiplied> linear(0.75f, 0.5f, 0.25f, 0.5f);
105  EXPECT_EQ(255, theme.r);
106  EXPECT_EQ(255, theme.g);
107  EXPECT_EQ(188, theme.b);
108  EXPECT_EQ(128, theme.a);
109 }
110 
111 TEST(color, SceneLinearByteEncoding)
112 {
113  ColorSceneLinear4f<eAlpha::Premultiplied> linear(0.75f, 0.5f, 0.25f, 0.5f);
115  EXPECT_EQ(225, encoded.r);
116  EXPECT_EQ(188, encoded.g);
117  EXPECT_EQ(137, encoded.b);
118  EXPECT_EQ(128, encoded.a);
119 }
120 
121 TEST(color, SceneLinearByteDecoding)
122 {
123  ColorSceneLinearByteEncoded4b<eAlpha::Premultiplied> encoded(225, 188, 137, 128);
125  EXPECT_NEAR(0.75f, decoded.r, 0.01f);
126  EXPECT_NEAR(0.5f, decoded.g, 0.01f);
127  EXPECT_NEAR(0.25f, decoded.b, 0.01f);
128  EXPECT_NEAR(0.5f, decoded.a, 0.01f);
129 }
130 
133 } // namespace blender::tests
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
void BLI_init_srgb_conversion(void)
Definition: math_color.c:567
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
ChannelStorageType r
Definition: BLI_color.hh:85
ChannelStorageType g
Definition: BLI_color.hh:85
ChannelStorageType b
Definition: BLI_color.hh:85
ChannelStorageType a
Definition: BLI_color.hh:85
ColorSceneLinear4f< eAlpha::Premultiplied > premultiply_alpha() const
Definition: BLI_color.hh:184
ColorSceneLinearByteEncoded4b< Alpha > encode() const
Definition: BLI_color.hh:172
ColorSceneLinear4f< eAlpha::Straight > unpremultiply_alpha() const
Definition: BLI_color.hh:201
ColorSceneLinear4f< Alpha > decode() const
Definition: BLI_color.hh:233
ColorTheme4< uint8_t > to_4b() const
Definition: BLI_color.hh:284
ColorTheme4< float > to_4f() const
Definition: BLI_color.hh:271
TEST(any, DefaultConstructor)
Definition: BLI_any_test.cc:10
BLI_INLINE ColorSceneLinear4f< eAlpha::Straight > BLI_color_convert_to_scene_linear(const ColorTheme4f &theme4f)
Definition: BLI_color.hh:312
BLI_INLINE ColorTheme4< float > BLI_color_convert_to_theme4f(const ColorTheme4< uint8_t > &srgb4b)
BLI_INLINE ColorTheme4< uint8_t > BLI_color_convert_to_theme4b(const ColorTheme4< float > &srgb4f)
Definition: BLI_color.hh:298