]> git.sesse.net Git - movit/blob - vignette_effect.cpp
Another round of include-what-you-use.
[movit] / vignette_effect.cpp
1 #include <GL/glew.h>
2 #include <assert.h>
3 #include <math.h>
4
5 #include "effect_util.h"
6 #include "util.h"
7 #include "vignette_effect.h"
8
9 using namespace std;
10
11 VignetteEffect::VignetteEffect()
12         : center(0.5f, 0.5f),
13           aspect_correction(1.0f, 1.0f),
14           radius(0.3f),
15           inner_radius(0.3f)
16 {
17         register_vec2("center", (float *)&center);
18         register_float("radius", (float *)&radius);
19         register_float("inner_radius", (float *)&inner_radius);
20 }
21
22 string VignetteEffect::output_fragment_shader()
23 {
24         return read_file("vignette_effect.frag");
25 }
26
27 void VignetteEffect::inform_input_size(unsigned input_num, unsigned width, unsigned height) {
28         assert(input_num == 0);
29         if (width >= height) {
30                 aspect_correction = Point2D(float(width) / float(height), 1.0f);
31         } else {
32                 aspect_correction = Point2D(1.0f, float(height) / float(width));
33         }
34 }
35
36 void VignetteEffect::set_gl_state(GLuint glsl_program_num, const string &prefix, unsigned *sampler_num)
37 {
38         Effect::set_gl_state(glsl_program_num, prefix, sampler_num);
39
40         set_uniform_float(glsl_program_num, prefix, "pihalf_div_radius", 0.5 * M_PI / radius);
41         set_uniform_vec2(glsl_program_num, prefix, "aspect_correction", (float *)&aspect_correction);
42
43         Point2D flipped_center(center.x, 1.0f - center.y);
44         set_uniform_vec2(glsl_program_num, prefix, "flipped_center", (float *)&flipped_center);
45 }