]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/color.c
Include pthread_time on windows for clock_gettime
[dragonblocks_alpha.git] / src / color.c
1 #include "color.h"
2
3 static f32 hue_to_rgb(f32 p, f32 q, f32 t)
4 {
5     if (t < 0.0f)
6         t += 1.0f;
7
8     if (t > 1.0f)
9         t -= 1.0f;
10
11     if (t < 1.0f / 6.0f)
12         return p + (q - p) * 6.0f * t;
13
14     if (t < 1.0f / 2.0f)
15         return q;
16
17     if (t < 2.0f / 3.0f)
18         return p + (q - p) * (2.0f / 3.0f - t) * 6.0f;
19
20     return p;
21 }
22
23 v3f32 hsl_to_rgb(v3f32 hsl)
24 {
25         v3f32 rgb;
26
27     if (hsl.y == 0.0f) {
28                 rgb = (v3f32) {hsl.z, hsl.z, hsl.z};
29     } else {
30         f32 q = hsl.z < 0.5f ? hsl.z * (1.0f + hsl.y) : hsl.z + hsl.y - hsl.z * hsl.y;
31         f32 p = 2.0f * hsl.z - q;
32
33         rgb.x = hue_to_rgb(p, q, hsl.x + 1.0f / 3.0f);
34         rgb.y = hue_to_rgb(p, q, hsl.x);
35         rgb.z = hue_to_rgb(p, q, hsl.x - 1.0f / 3.0f);
36     }
37
38     return rgb;
39 }
40