]> git.sesse.net Git - movit/blobdiff - fft_pass_effect.cpp
Add a utility library for downconverting to fp16.
[movit] / fft_pass_effect.cpp
index a3de3792b380060f1c6effe112bfd5a1d0270344..51bde35aec5d31ea313694b892668ab586b38026 100644 (file)
@@ -1,9 +1,14 @@
 #include <GL/glew.h>
+#include <math.h>
 
-#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