X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=vignette_effect.cpp;h=6a9a340a111cb7977ba0bc584bf380cf704eb160;hp=8fde1f7e3b33ae65ab94d76c3e4d875f0aece988;hb=85f9719bf3519b1f1942738d11601584f5d38725;hpb=96a1cff51a8b7dc45ebe725e0d0685eecce31331 diff --git a/vignette_effect.cpp b/vignette_effect.cpp index 8fde1f7..6a9a340 100644 --- a/vignette_effect.cpp +++ b/vignette_effect.cpp @@ -1,14 +1,15 @@ -#define GL_GLEXT_PROTOTYPES 1 - +#include #include -#include -#include +#include "effect_util.h" #include "vignette_effect.h" #include "util.h" +using namespace std; + VignetteEffect::VignetteEffect() : center(0.5f, 0.5f), + aspect_correction(1.0f, 1.0f), radius(0.3f), inner_radius(0.3f) { @@ -17,17 +18,27 @@ VignetteEffect::VignetteEffect() register_float("inner_radius", (float *)&inner_radius); } -std::string VignetteEffect::output_glsl() +string VignetteEffect::output_fragment_shader() { - return read_file("vignette_effect.glsl"); + return read_file("vignette_effect.frag"); +} + +void VignetteEffect::inform_input_size(unsigned input_num, unsigned width, unsigned height) { + assert(input_num == 0); + if (width >= height) { + aspect_correction = Point2D(float(width) / float(height), 1.0f); + } else { + aspect_correction = Point2D(1.0f, float(height) / float(width)); + } } -void VignetteEffect::set_uniforms(GLuint glsl_program_num, const std::string &prefix) +void VignetteEffect::set_gl_state(GLuint glsl_program_num, const string &prefix, unsigned *sampler_num) { - Effect::set_uniforms(glsl_program_num, prefix); + Effect::set_gl_state(glsl_program_num, prefix, sampler_num); - set_uniform_float(glsl_program_num, prefix, "inv_radius", 1.0f / radius); + set_uniform_float(glsl_program_num, prefix, "pihalf_div_radius", 0.5 * M_PI / radius); + set_uniform_vec2(glsl_program_num, prefix, "aspect_correction", (float *)&aspect_correction); - Point2D aspect(16.0f / 9.0f, 1.0f); // FIXME - set_uniform_vec2(glsl_program_num, prefix, "aspect_correction", (float *)&aspect); + Point2D flipped_center(center.x, 1.0f - center.y); + set_uniform_vec2(glsl_program_num, prefix, "flipped_center", (float *)&flipped_center); }