1 #include <glm/gtc/color_space.hpp>
2 #include <glm/gtc/epsilon.hpp>
3 #include <glm/gtc/constants.hpp>
4
5 namespace srgb
6 {
test()7 int test()
8 {
9 int Error(0);
10
11 glm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);
12
13 {
14 glm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB);
15 glm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
16 Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
17 }
18
19 {
20 glm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);
21 glm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
22 Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
23 }
24
25 glm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);
26
27 {
28 glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);
29 glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
30 Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
31 }
32
33 {
34 glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);
35 glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
36 Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
37 }
38
39 return Error;
40 }
41 }//namespace srgb
42
43 namespace srgb_lowp
44 {
test()45 int test()
46 {
47 int Error(0);
48
49 for(float Color = 0.0f; Color < 1.0f; Color += 0.01f)
50 {
51 glm::highp_vec3 const HighpSRGB = glm::convertLinearToSRGB(glm::highp_vec3(Color));
52 glm::lowp_vec3 const LowpSRGB = glm::convertLinearToSRGB(glm::lowp_vec3(Color));
53 Error += glm::all(glm::epsilonEqual(glm::abs(HighpSRGB - glm::highp_vec3(LowpSRGB)), glm::highp_vec3(0), 0.1f)) ? 0 : 1;
54 }
55
56 return Error;
57 }
58 }//namespace srgb_lowp
59
main()60 int main()
61 {
62 int Error(0);
63
64 Error += srgb::test();
65 Error += srgb_lowp::test();
66
67 return Error;
68 }
69