X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=effect_chain.h;h=3fa62ee3e074c3402843d46f0124ed3599e87ed0;hp=c8fe11e639ed36c52b10724f72cab87af01a1540;hb=91c70600f2d0a6a42420ee98949cf182859b798f;hpb=a88f299483ffe5068cd2828513078b9103325da8 diff --git a/effect_chain.h b/effect_chain.h index c8fe11e..3fa62ee 100644 --- a/effect_chain.h +++ b/effect_chain.h @@ -6,7 +6,7 @@ #include "effect.h" #include "effect_id.h" -enum PixelFormat { FORMAT_RGB, FORMAT_RGBA }; +enum PixelFormat { FORMAT_RGB, FORMAT_RGBA, FORMAT_BGR, FORMAT_BGRA }; enum ColorSpace { COLORSPACE_sRGB = 0, @@ -31,20 +31,35 @@ struct ImageFormat { class EffectChain { public: EffectChain(unsigned width, unsigned height); + + // input, effects, output, finalize need to come in that specific order. + void add_input(const ImageFormat &format); - // The pointer is owned by EffectChain. + // The returned pointer is owned by EffectChain. Effect *add_effect(EffectId effect); void add_output(const ImageFormat &format); + void finalize(); - void render(unsigned char *src, unsigned char *dst); + //void render(unsigned char *src, unsigned char *dst); + void render_to_screen(unsigned char *src); private: + void normalize_to_linear_gamma(); + void normalize_to_srgb(); + unsigned width, height; ImageFormat input_format, output_format; std::vector effects; + bool use_srgb_texture_format; + + GLint glsl_program_num; + GLenum format, bytes_per_pixel; + bool finalized; + + // Used during the building of the effect chain. ColorSpace current_color_space; GammaCurve current_gamma_curve; };