X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcolorcurve.h;h=3f65b04916897c6d85bde7ec4f33fece160a3cd1;hp=2b854bec8b6f8ac5392f010e64a06b5269b83415;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=d1e3975c163694d7bca6417463462be950019e5e diff --git a/source/colorcurve.h b/source/colorcurve.h index 2b854bec..3f65b049 100644 --- a/source/colorcurve.h +++ b/source/colorcurve.h @@ -12,8 +12,8 @@ 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 @@ -21,23 +21,47 @@ 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; + RefPtr quad; + RefPtr linear_sampler; + RefPtr nearest_sampler; 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. */ - void set_brightness(float); + /** Sets the exponent of the */ + void set_brightness_response(float); /** Sets the gamma value used for mapping output colors. Allowed range is from 0.1 to 10. */