X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=fft_pass_effect.cpp;h=9c8aeb058e71fa33435901d4f5a2588a38ccb4f3;hp=c2b47f047c0747459b92682895be7b9a147f5de2;hb=0597b51d28b5f095931c54a5e5f90ed9d5e18790;hpb=c2371eea5dadf97add7c1a71b8ea660973c9c6de diff --git a/fft_pass_effect.cpp b/fft_pass_effect.cpp index c2b47f0..9c8aeb0 100644 --- a/fft_pass_effect.cpp +++ b/fft_pass_effect.cpp @@ -1,6 +1,7 @@ #include #include +#include "effect_chain.h" #include "effect_util.h" #include "fp16.h" #include "fft_pass_effect.h" @@ -40,15 +41,13 @@ void FFTPassEffect::set_gl_state(GLuint glsl_program_num, const string &prefix, int input_size = (direction == VERTICAL) ? input_height : input_width; - // See the comments on changes_output_size() in the .h file to see - // why this is legal. It is _needed_ because it counteracts the - // precision issues we get because we sample the input texture with - // normalized coordinates (especially when the repeat count along - // the axis is not a power of two); we very rapidly end up in narrowly - // missing a texel center, which causes precision loss to propagate - // throughout the FFT. - assert(*sampler_num == 1); - glActiveTexture(GL_TEXTURE0); + // This is needed because it counteracts the precision issues we get + // because we sample the input texture with normalized coordinates + // (especially when the repeat count along the axis is not a power of + // two); we very rapidly end up in narrowly missing a texel center, + // which causes precision loss to propagate throughout the FFT. + Node *self = chain->find_node_for_effect(this); + glActiveTexture(chain->get_input_sampler(self, 0)); check_error(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); check_error();