X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcolorcurve.h;h=dac0ac08ab689382ace03041070d4db77ec873e2;hp=d7589cb565b8bacd4f63c0f60d672b294ec7d9bf;hb=a4549c55a6d47129bd9e42c6a49a671b759ce6d9;hpb=b1d0b6bb1412d0c23d891a4804ddb60623d1f6b4 diff --git a/source/colorcurve.h b/source/colorcurve.h index d7589cb5..dac0ac08 100644 --- a/source/colorcurve.h +++ b/source/colorcurve.h @@ -5,14 +5,15 @@ #include "program.h" #include "programdata.h" #include "texture1d.h" +#include "texturing.h" namespace Msp { namespace GL { /** 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 @@ -20,21 +21,48 @@ space and converting to sRGB for display. */ class ColorCurve: public PostProcessor { +public: + struct Template: public PostProcessor::Template + { + class Loader: public DataFile::DerivedObjectLoader + { + 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; Texture1D curve; + Texturing texturing; const Mesh &quad; 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 @@ -48,7 +76,7 @@ public: /// Sets output mapping to linear. This is equivalent to set_gamma(1). void set_linear(); - virtual void render(const Texture2D &, const Texture2D &); + virtual void render(Renderer &, const Texture2D &, const Texture2D &); }; } // namespace GL