X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=blur_effect.h;h=7f92074b882b2b1b06c1e34128d97a2dc5a5cc6e;hp=2aada42061098561892b71b3d6d1fb1a2d91f19f;hb=322c03693ae23e5a5843dee9dcb74dfb3b7d43d8;hpb=048e90293b5f5ed4b922d60c4cb47c4b5d24b85e diff --git a/blur_effect.h b/blur_effect.h index 2aada42..7f92074 100644 --- a/blur_effect.h +++ b/blur_effect.h @@ -25,6 +25,8 @@ public: virtual bool needs_mipmaps() const { return true; } virtual bool needs_srgb_primaries() const { return false; } + virtual void inform_input_size(unsigned input_num, unsigned width, unsigned height); + virtual std::string output_fragment_shader() { assert(false); } @@ -40,11 +42,14 @@ private: float radius; SingleBlurPassEffect *hpass, *vpass; + unsigned input_width, input_height; }; class SingleBlurPassEffect : public Effect { public: - SingleBlurPassEffect(); + // If parent is non-NULL, calls to inform_input_size will be forwarded + // so that it can make reasonable decisions for both blur passes. + SingleBlurPassEffect(BlurEffect *parent); virtual std::string effect_type_id() const { return "SingleBlurPassEffect"; } std::string output_fragment_shader(); @@ -53,6 +58,11 @@ public: virtual bool needs_mipmaps() const { return true; } virtual bool needs_srgb_primaries() const { return false; } + virtual void inform_input_size(unsigned input_num, unsigned width, unsigned height) { + if (parent != NULL) { + parent->inform_input_size(input_num, width, height); + } + } virtual bool changes_output_size() const { return true; } virtual void get_output_size(unsigned *width, unsigned *height) const { @@ -66,6 +76,7 @@ public: enum Direction { HORIZONTAL = 0, VERTICAL = 1 }; private: + BlurEffect *parent; float radius; Direction direction; int width, height;