X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=vignette_effect.cpp;h=088406b78779e49afbb0dccf4f41a274b4620be7;hp=f1449aec6073313df76a5189a24ee547589dface;hb=34776d3ed2565ee834405e575bf3bfc7f7933e36;hpb=74cdd144cf35c403d9a8a3f35420f1eaa3d84cc4 diff --git a/vignette_effect.cpp b/vignette_effect.cpp index f1449ae..088406b 100644 --- a/vignette_effect.cpp +++ b/vignette_effect.cpp @@ -1,33 +1,50 @@ -#define GL_GLEXT_PROTOTYPES 1 - +#include +#include #include -#include -#include -#include "vignette_effect.h" +#include "effect_util.h" #include "util.h" +#include "vignette_effect.h" + +using namespace std; + +namespace movit { VignetteEffect::VignetteEffect() : center(0.5f, 0.5f), + uniform_aspect_correction(1.0f, 1.0f), + uniform_flipped_center(0.5f, 0.5f), radius(0.3f), inner_radius(0.3f) { register_vec2("center", (float *)¢er); register_float("radius", (float *)&radius); register_float("inner_radius", (float *)&inner_radius); + register_uniform_float("pihalf_div_radius", &uniform_pihalf_div_radius); + register_uniform_vec2("aspect_correction", (float *)&uniform_aspect_correction); + register_uniform_vec2("flipped_center", (float *)&uniform_flipped_center); } -std::string VignetteEffect::output_fragment_shader() +string VignetteEffect::output_fragment_shader() { return read_file("vignette_effect.frag"); } -void VignetteEffect::set_uniforms(GLuint glsl_program_num, const std::string &prefix) -{ - Effect::set_uniforms(glsl_program_num, prefix); +void VignetteEffect::inform_input_size(unsigned input_num, unsigned width, unsigned height) { + assert(input_num == 0); + if (width >= height) { + uniform_aspect_correction = Point2D(float(width) / float(height), 1.0f); + } else { + uniform_aspect_correction = Point2D(1.0f, float(height) / float(width)); + } +} - set_uniform_float(glsl_program_num, prefix, "inv_radius", 1.0f / radius); +void VignetteEffect::set_gl_state(GLuint glsl_program_num, const string &prefix, unsigned *sampler_num) +{ + Effect::set_gl_state(glsl_program_num, prefix, sampler_num); - Point2D aspect(16.0f / 9.0f, 1.0f); // FIXME - set_uniform_vec2(glsl_program_num, prefix, "aspect_correction", (float *)&aspect); + uniform_pihalf_div_radius = 0.5 * M_PI / radius; + uniform_flipped_center = Point2D(center.x, 1.0f - center.y); } + +} // namespace movit