X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=fft_pass_effect.h;h=53428bd8d31a3f82360615a2ec20b0cac3653cd5;hp=1fd4ea2c1886ed0bd6fb1f358954989770e0e5da;hb=009c7510df1ac1b70662b0085ebaf1a619dd761a;hpb=cfc161e0289c2169d4835c48751ff56b97355eb2 diff --git a/fft_pass_effect.h b/fft_pass_effect.h index 1fd4ea2..53428bd 100644 --- a/fft_pass_effect.h +++ b/fft_pass_effect.h @@ -50,7 +50,7 @@ // scaling), and as fp16 has quite limited range at times, this can be relevant // on some GPUs for larger sizes. -#include +#include #include #include #include @@ -85,6 +85,7 @@ public: // in our own phase, which is exactly what we want. virtual bool needs_texture_bounce() const { return true; } virtual bool changes_output_size() const { return true; } + virtual bool sets_virtual_output_size() const { return false; } virtual void inform_input_size(unsigned input_num, unsigned width, unsigned height) { @@ -98,16 +99,30 @@ public: *width = *virtual_width = input_width; *height = *virtual_height = input_height; } + + virtual void inform_added(EffectChain *chain) { this->chain = chain; } - enum Direction { HORIZONTAL = 0, VERTICAL = 1 }; + enum Direction { INVALID = -1, HORIZONTAL = 0, VERTICAL = 1 }; private: + void generate_support_texture(); + + EffectChain *chain; int input_width, input_height; GLuint tex; + float uniform_num_repeats; + GLint uniform_support_tex; + int fft_size; Direction direction; int pass_number; // From 1..n. int inverse; // 0 = forward (FFT), 1 = reverse (IFFT). + + int last_fft_size; + Direction last_direction; + int last_pass_number; + int last_inverse; + int last_input_size; }; } // namespace movit