00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _SG_COLORS_HXX
00025 #define _SG_COLORS_HXX 1
00026
00027 #include <math.h>
00028
00029 #if defined (sgi)
00030 const float system_gamma = 2.0/1.7;
00031
00032 #else // others
00033 const float system_gamma = 2.5;
00034 #endif
00035
00036
00037 inline void gamma_correct_rgb(float *color,
00038 float reff = 2.5, float system = system_gamma)
00039 {
00040 if (reff == system)
00041 return;
00042
00043 float tmp = reff/system;
00044 color[0] = pow(color[0], tmp);
00045 color[1] = pow(color[1], tmp);
00046 color[2] = pow(color[2], tmp);
00047 };
00048
00049 inline void gamma_correct_c(float *color,
00050 float reff = 2.5, float system = system_gamma)
00051 {
00052 if (reff == system)
00053 return;
00054
00055 *color = pow(*color, reff/system);
00056 };
00057
00058 inline void gamma_restore_rgb(float *color,
00059 float reff = 2.5, float system = system_gamma)
00060 {
00061 if (reff == system)
00062 return;
00063
00064 float tmp = system/reff;
00065 color[0] = pow(color[0], tmp);
00066 color[1] = pow(color[1], tmp);
00067 color[2] = pow(color[2], tmp);
00068 };
00069
00070 inline void gamma_restore_c(float *color,
00071 float reff = 2.5, float system = system_gamma)
00072 {
00073 if (reff == system)
00074 return;
00075
00076 *color = pow(*color, system/reff);
00077 };
00078
00079
00080 #endif // _SG_COLORS_HXX
00081