X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=fft_pass_effect.cpp;h=51bde35aec5d31ea313694b892668ab586b38026;hp=a3de3792b380060f1c6effe112bfd5a1d0270344;hb=7d7149ef94571b83e4cbd8e3359e3c3c9aea85c2;hpb=c4f0d4e876a8177db5738596f22349e030e0a1dc diff --git a/fft_pass_effect.cpp b/fft_pass_effect.cpp index a3de379..51bde35 100644 --- a/fft_pass_effect.cpp +++ b/fft_pass_effect.cpp @@ -1,9 +1,14 @@ #include +#include -#include "fft_pass_effect.h" #include "effect_util.h" +#include "fft_pass_effect.h" #include "util.h" +using namespace std; + +namespace movit { + FFTPassEffect::FFTPassEffect() : input_width(1280), input_height(720), @@ -21,14 +26,14 @@ FFTPassEffect::~FFTPassEffect() glDeleteTextures(1, &tex); } -std::string FFTPassEffect::output_fragment_shader() +string FFTPassEffect::output_fragment_shader() { char buf[256]; sprintf(buf, "#define DIRECTION_VERTICAL %d\n", (direction == VERTICAL)); return buf + read_file("fft_pass_effect.frag"); } -void FFTPassEffect::set_gl_state(GLuint glsl_program_num, const std::string &prefix, unsigned *sampler_num) +void FFTPassEffect::set_gl_state(GLuint glsl_program_num, const string &prefix, unsigned *sampler_num) { Effect::set_gl_state(glsl_program_num, prefix, sampler_num); @@ -127,13 +132,13 @@ void FFTPassEffect::set_gl_state(GLuint glsl_program_num, const std::string &pre glActiveTexture(GL_TEXTURE0 + *sampler_num); check_error(); - glBindTexture(GL_TEXTURE_1D, tex); + glBindTexture(GL_TEXTURE_2D, tex); check_error(); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); check_error(); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); check_error(); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); check_error(); // Supposedly FFTs are very sensitive to inaccuracies in the twiddle factors, @@ -142,7 +147,7 @@ void FFTPassEffect::set_gl_state(GLuint glsl_program_num, const std::string &pre // small sizes, all components are exact anyway, so we can cheat there // (although noting that the source coordinates become somewhat less // accurate then, too). - glTexImage1D(GL_TEXTURE_1D, 0, (subfft_size <= 4) ? GL_RGBA16F : GL_RGBA32F, fft_size, 0, GL_RGBA, GL_FLOAT, tmp); + glTexImage2D(GL_TEXTURE_2D, 0, (subfft_size <= 4) ? GL_RGBA16F : GL_RGBA32F, fft_size, 1, 0, GL_RGBA, GL_FLOAT, tmp); check_error(); delete[] tmp; @@ -153,3 +158,5 @@ void FFTPassEffect::set_gl_state(GLuint glsl_program_num, const std::string &pre assert(input_size % fft_size == 0); set_uniform_float(glsl_program_num, prefix, "num_repeats", input_size / fft_size); } + +} // namespace movit