]> git.tdb.fi Git - libs/gl.git/blobdiff - source/colorcurve.h
Add a utility class for switching renderables
[libs/gl.git] / source / colorcurve.h
index 2b854bec8b6f8ac5392f010e64a06b5269b83415..dac0ac08ab689382ace03041070d4db77ec873e2 100644 (file)
@@ -12,8 +12,8 @@ namespace GL {
 
 /**
 Processes oversaturated colors to preserve hues.  When one color component
 
 /**
 Processes oversaturated colors to preserve hues.  When one color component
-exceeds 1.0, the others are scaled towards white.  A transition curve is also
-applied near 1.0 to prevent the abrupt change in the gradient.
+exceeds 1.0, the overflow is distributed to the other components, scaling the
+color towards white.
 
 Gamma or sRGB correction can also be applied to the output.  It can be used to
 improve color reproduction by performing lighting calculations in linear color
 
 Gamma or sRGB correction can also be applied to the output.  It can be used to
 improve color reproduction by performing lighting calculations in linear color
@@ -21,6 +21,29 @@ space and converting to sRGB for display.
 */
 class ColorCurve: public PostProcessor
 {
 */
 class ColorCurve: public PostProcessor
 {
+public:
+       struct Template: public PostProcessor::Template
+       {
+               class Loader: public DataFile::DerivedObjectLoader<Template, PostProcessor::Template::Loader>
+               {
+               public:
+                       Loader(Template &);
+
+               private:
+                       void gamma(float);
+                       void srgb();
+               };
+
+               float exposure_adjust;
+               float brightness_response;
+               float gamma;
+               bool srgb;
+
+               Template();
+
+               virtual ColorCurve *create(unsigned, unsigned) const;
+       };
+
 private:
        Program shprog;
        ProgramData shdata;
 private:
        Program shprog;
        ProgramData shdata;
@@ -31,12 +54,15 @@ private:
 public:
        ColorCurve();
 
 public:
        ColorCurve();
 
-       /// Sets the size of the peak zone.  Must be between 0 and 1, inclusive.
-       void set_peak(float);
+       /** Set exposure adjustment in EV units.  Positive values brighten the
+       image, negative values darken it.  Zero is neutral. */
+       void set_exposure_adjust(float);
 
 
-       /** Sets brightness for oversaturated colors.  Must be >= 1.  Suggested
-       values are between 1.5 and 2.0; a value of 1.0 will clamp colors to the
-       saturated value. */
+       /** Sets the exponent of the */
+       void set_brightness_response(float);
+
+       // Deprecated functions
+       void set_peak(float);
        void set_brightness(float);
 
        /** Sets the gamma value used for mapping output colors.  Allowed range is
        void set_brightness(float);
 
        /** Sets the gamma value used for mapping output colors.  Allowed range is