]> git.mxchange.org Git - simgear.git/blobdiff - simgear/screen/colors.hxx
Mac OS X fixes from Markus Morawitz
[simgear.git] / simgear / screen / colors.hxx
index 13c6ef3ff0e550d0a20e93d965c54b1d0e54d8ed..1aa0ef47bc3474ce96dd0413db25a773a3636ec2 100644 (file)
 const float system_gamma = 1.4;
 
 #elif defined (sgi)
-const float system_gamma = 1.7;
+const float system_gamma = 2.0/1.7;
 
 #else  // others
 const float system_gamma = 2.5;
 #endif
 
-
 // simple architecture independant gamma correction function.
-inline void gamma_correct(float *color,
-                          float reff = 2.5, float system = system_gamma)
+inline void gamma_correct_rgb(float *color,
+                              float reff = 2.5, float system = system_gamma)
+{
+    if (reff == system)
+       return;
+
+    float tmp = reff/system;
+    color[0] = pow(color[0], tmp);
+    color[1] = pow(color[1], tmp);
+    color[2] = pow(color[2], tmp);
+};
+
+inline void gamma_correct_c(float *color,
+                            float reff = 2.5, float system = system_gamma)
 {
-   color[0] = pow(color[0], reff/system);
-   color[1] = pow(color[1], reff/system);
-   color[2] = pow(color[2], reff/system);
+   if (reff == system)
+      return;
+
+   *color = pow(*color, reff/system);
 };
 
+inline void gamma_restore_rgb(float *color,
+                              float reff = 2.5, float system = system_gamma)
+{
+    if (reff == system)
+       return;
+
+    float tmp = system/reff;
+    color[0] = pow(color[0], tmp);
+    color[1] = pow(color[1], tmp);
+    color[2] = pow(color[2], tmp);
+};
+
+inline void gamma_restore_c(float *color,
+                            float reff = 2.5, float system = system_gamma)
+{
+   if (reff == system)
+      return;
+
+   *color = pow(*color, system/reff);
+};
+
+
 #endif // _SG_COLORS_HXX