]> git.sesse.net Git - movit/blobdiff - blur_effect.cpp
Make the blur into a simple, Gaussian horizontal blur. Still not very good.
[movit] / blur_effect.cpp
index e945295da641dd565c74b54684be93e158de0022..ddf542eec62fea98c362ba726d3b942bb0b61fa7 100644 (file)
@@ -8,7 +8,7 @@
 #include "util.h"
 
 BlurEffect::BlurEffect()
-       : radius(0.3f)
+       : radius(3.0f)
 {
        register_float("radius", (float *)&radius);
 }
@@ -21,4 +21,24 @@ std::string BlurEffect::output_fragment_shader()
 void BlurEffect::set_uniforms(GLuint glsl_program_num, const std::string &prefix, unsigned *sampler_num)
 {
        Effect::set_uniforms(glsl_program_num, prefix, sampler_num);
+
+       //glActiveTexture(GL_TEXTURE0);
+       //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 3);
+       //check_error();
+
+       set_uniform_float(glsl_program_num, prefix, "pixel_offset", 1.0f / 1280.0f);  // FIXME
+
+       // Simple Gaussian weights for now.
+       float weight[15], total = 0.0f;
+       for (unsigned i = 0; i < 15; ++i) {
+               float z = (i - 7.0f) / radius;
+               weight[i] = exp(-(z*z));
+               total += weight[i];
+       }
+       for (unsigned i = 0; i < 15; ++i) {
+               weight[i] /= total;
+               printf("%f\n", weight[i]);
+       }
+       printf("\n");
+       set_uniform_float_array(glsl_program_num, prefix, "weight", weight, 15);
 }