21__attribute__( (
const ) ) double linearToGamma(
double x )
25 return 1.055 * pow( x, 1.0 / 2.4 ) - 0.055;
30__attribute__( (
const ) ) double gammaToLinear(
double x )
34 return pow( ( x + 0.055 ) / 1.055, 2.4 );
37void col_linearToGamma( glColour *
c )
39 c->r = linearToGamma(
c->r );
40 c->g = linearToGamma(
c->g );
41 c->b = linearToGamma(
c->b );
44void col_gammaToLinear( glColour *
c )
46 c->r = gammaToLinear(
c->r );
47 c->g = gammaToLinear(
c->g );
48 c->b = gammaToLinear(
c->b );
63 float var_h, var_i, var_1, var_2, var_3;
74 var_i = floor( var_h );
75 var_1 = v * ( 1 - s );
76 var_2 = v * ( 1 - s * ( var_h - var_i ) );
77 var_3 = v * ( 1 - s * ( 1 - ( var_h - var_i ) ) );
83 }
else if ( var_i == 1 ) {
87 }
else if ( var_i == 2 ) {
91 }
else if ( var_i == 3 ) {
95 }
else if ( var_i == 4 ) {
106 c->r = gammaToLinear(
c->r );
107 c->g = gammaToLinear(
c->g );
108 c->b = gammaToLinear(
c->b );
125void col_rgb2hsv(
float *H,
float *S,
float *V,
float R,
float G,
float B )
131 float max, min, diff;
133 R = gammaToLinear( R );
134 G = gammaToLinear( G );
135 B = gammaToLinear( B );
137 max =
max3( R, G, B );
138 min =
min3( R, G, B );
151 R1 = ( max - R ) / diff;
152 G1 = ( max - G ) / diff;
153 B1 = ( max - B ) / diff;
155 if ( ( R == max ) && ( G == min ) )
158 if ( ( R == max ) && ( G != min ) )
161 if ( ( G == max ) && ( B == min ) )
164 if ( ( G == max ) && ( B != min ) )
181 H1 = ( G - B ) / diff;
183 H1 = 2 + ( B - R ) / diff;
185 H1 = 4 + ( R - G ) / diff;
206void col_blend( glColour *blend,
const glColour *fg,
const glColour *bg,
209 blend->r = ( 1. - alpha ) * bg->r + alpha * fg->r;
210 blend->g = ( 1. - alpha ) * bg->g + alpha * fg->g;
211 blend->b = ( 1. - alpha ) * bg->b + alpha * fg->b;
212 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.
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.