X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=fft_pass_effect.cpp;h=b0006087cd2779282af2ec3750d5ba7761d084f5;hp=b46e5e589fc9bb4f548dafc234745c801506beb4;hb=eff011224abc5dc81f801f3ea44572287a55bcac;hpb=d01854ff8276207e5493c7c97a1e02cae81c64a0 diff --git a/fft_pass_effect.cpp b/fft_pass_effect.cpp index b46e5e5..b000608 100644 --- a/fft_pass_effect.cpp +++ b/fft_pass_effect.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include "effect_chain.h" @@ -25,6 +25,8 @@ FFTPassEffect::FFTPassEffect() register_int("direction", (int *)&direction); register_int("pass_number", &pass_number); register_int("inverse", &inverse); + register_uniform_float("num_repeats", &uniform_num_repeats); + register_uniform_sampler2d("support_tex", &uniform_support_tex); glGenTextures(1, &tex); } @@ -83,11 +85,11 @@ void FFTPassEffect::set_gl_state(GLuint glsl_program_num, const string &prefix, generate_support_texture(); } - set_uniform_int(glsl_program_num, prefix, "support_tex", *sampler_num); + uniform_support_tex = *sampler_num; ++*sampler_num; assert(input_size % fft_size == 0); - set_uniform_float(glsl_program_num, prefix, "num_repeats", input_size / fft_size); + uniform_num_repeats = input_size / fft_size; } void FFTPassEffect::generate_support_texture() @@ -165,10 +167,10 @@ void FFTPassEffect::generate_support_texture() support_texture_index = subfft_size - support_texture_index - 1; sign = -1.0; } - tmp[support_texture_index * 4 + 0] = fp64_to_fp16(sign * (src1 - i * stride) / double(input_size)); - tmp[support_texture_index * 4 + 1] = fp64_to_fp16(sign * (src2 - i * stride) / double(input_size)); - tmp[support_texture_index * 4 + 2] = fp64_to_fp16(twiddle_real); - tmp[support_texture_index * 4 + 3] = fp64_to_fp16(twiddle_imag); + tmp[support_texture_index * 4 + 0] = fp32_to_fp16(sign * (src1 - i * stride) / double(input_size)); + tmp[support_texture_index * 4 + 1] = fp32_to_fp16(sign * (src2 - i * stride) / double(input_size)); + tmp[support_texture_index * 4 + 2] = fp32_to_fp16(twiddle_real); + tmp[support_texture_index * 4 + 3] = fp32_to_fp16(twiddle_imag); } // Supposedly FFTs are very sensitive to inaccuracies in the twiddle factors,