25__attribute__((
const)) double linearToGamma(
double x )
29 return 1.055 * pow(x, 1.0 / 2.4) - 0.055;
34__attribute__((
const)) double gammaToLinear(
double x )
38 return pow((x + 0.055) / 1.055, 2.4);
41void col_linearToGamma( glColour *
c )
43 c->r = linearToGamma(
c->r );
44 c->g = linearToGamma(
c->g );
45 c->b = linearToGamma(
c->b );
48void col_gammaToLinear( glColour *
c )
50 c->r = gammaToLinear(
c->r );
51 c->g = gammaToLinear(
c->g );
52 c->b = gammaToLinear(
c->b );
67 float var_h, var_i, var_1, var_2, var_3;
81 var_2 = v * (1 - s * (var_h - var_i));
82 var_3 = v * (1 - s * (1 - (var_h - var_i)));
84 if (var_i == 0) {
c->r = v ;
c->g = var_3 ;
c->b = var_1; }
85 else if (var_i == 1) {
c->r = var_2 ;
c->g = v ;
c->b = var_1; }
86 else if (var_i == 2) {
c->r = var_1 ;
c->g = v ;
c->b = var_3; }
87 else if (var_i == 3) {
c->r = var_1 ;
c->g = var_2 ;
c->b = v; }
88 else if (var_i == 4) {
c->r = var_3 ;
c->g = var_1 ;
c->b = v; }
89 else {
c->r = v ;
c->g = var_1 ;
c->b = var_2; }
92 c->r = gammaToLinear(
c->r );
93 c->g = gammaToLinear(
c->g );
94 c->b = gammaToLinear(
c->b );
111void col_rgb2hsv(
float *H,
float *S,
float *V,
float R,
float G,
float B )
117 float max, min, diff;
119 R = gammaToLinear( R );
120 G = gammaToLinear( G );
121 B = gammaToLinear( B );
123 max =
max3( R, G, B );
124 min =
min3( R, G, B );
141 if ((R == max) && (G == min))
144 if ((R == max) && (G != min))
147 if ((G == max) && (B == min))
150 if ((G == max) && (B != min))
169 H1 = 2 + (B - R)/diff;
171 H1 = 4 + (R - G)/diff;
192void col_blend( glColour *blend,
const glColour *fg,
const glColour *bg,
float alpha )
194 blend->r = (1. - alpha) * bg->r + alpha * fg->r;
195 blend->g = (1. - alpha) * bg->g + alpha * fg->g;
196 blend->b = (1. - alpha) * bg->b + alpha * fg->b;
197 blend->a = (1. - alpha) * bg->a + alpha * fg->a;
void col_blend(glColour *blend, const glColour *fg, const glColour *bg, float alpha)
Blends two colours.
void col_rgb2hsv(float *H, float *S, float *V, float R, float G, float B)
Changes colour space from RGB to HSV.
void col_hsv2rgb(glColour *c, float h, float s, float v)
Changes colour space from HSV to RGB.
Header file with generic functions and naev-specifics.
double min3(double v1, double v2, double v3)
Returns the minimum of 3 values.
double max3(double v1, double v2, double v3)
Returns the maximum of 3 values.