-class Effect {
-public:
- virtual bool needs_linear_light() { return true; }
- virtual bool needs_srgb_primaries() { return true; }
- virtual bool needs_many_samples() { return false; }
- virtual bool needs_mipmaps() { return false; }
- bool set_float(const std::string& key, float value);
- bool set_float_array(const std::string&, const float *values, size_t num_values);
+// Can alias on a float[3].
+struct RGBTriplet {
+ RGBTriplet(float r, float g, float b)
+ : r(r), g(g), b(b) {}
+
+ float r, g, b;
+};
+
+class GammaExpansionEffect : public Effect {
+public:
+ GammaExpansionEffect()
+ : source_curve(GAMMA_LINEAR)
+ {
+ register_int("source_curve", (int *)&source_curve);
+ }
+
+private:
+ GammaCurve source_curve;
+};
+
+class ColorSpaceConversionEffect : public Effect {
+public:
+ ColorSpaceConversionEffect()
+ : source_space(COLORSPACE_sRGB),
+ destination_space(COLORSPACE_sRGB)
+ {
+ register_int("source_space", (int *)&source_space);
+ register_int("destination_space", (int *)&destination_space);
+ }
+
+private:
+ ColorSpace source_space, destination_space;
+};
+
+class ColorSpaceConversionEffect;
+
+class LiftGammaGainEffect : public Effect {
+public:
+ LiftGammaGainEffect()
+ : lift(0.0f, 0.0f, 0.0f),
+ gamma(1.0f, 1.0f, 1.0f),
+ gain(1.0f, 1.0f, 1.0f),
+ saturation(1.0f)
+ {
+ register_vec3("lift", (float *)&lift);
+ register_vec3("gamma", (float *)&gamma);
+ register_vec3("gain", (float *)&gain);
+ register_float("saturation", &saturation);
+ }