-#include <GL/glew.h>
+#include <epoxy/gl.h>
#include <math.h>
#include "effect_chain.h"
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);
}
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()
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,