42float linearToSRGBColorComponent(float c)
43{
44 if (c < 0.0031308)
45 return 12.92 * c;
46
47 return clampTo<float>(1.055 * powf(c, 1.0 / 2.4) - 0.055, 0, 1);
48}
49
50float sRGBToLinearColorComponent(float c)
51{
52 if (c <= 0.04045)
53 return c / 12.92;
54
55 return clampTo<float>(powf((c + 0.055) / 1.055, 2.4), 0, 1);
56}
57
58Color linearToSRGBColor(const Color& color)
59{
60 float r, g, b, a;
61 color.getRGBA(r, g, b, a);
62 r = linearToSRGBColorComponent(r);
63 g = linearToSRGBColorComponent(g);
64 b = linearToSRGBColorComponent(b);
65
66 return Color(r, g, b, a);
67}
68
69Color sRGBToLinearColor(const Color& color)
70{
71 float r, g, b, a;
72 color.getRGBA(r, g, b, a);
73 r = sRGBToLinearColorComponent(r);
74 g = sRGBToLinearColorComponent(g);
75 b = sRGBToLinearColorComponent(b);
76
77 return Color(r, g, b, a);
78}
79