X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=slice_effect.cpp;h=50504fecbf0a4851af6c59d69fac02ad92349558;hp=3cdd415251d880577b3d47456edb471c8a4798fb;hb=refs%2Ftags%2F1.1.1;hpb=8c7e53028a3ef4805d2608643041a5d7e6bd1b6e diff --git a/slice_effect.cpp b/slice_effect.cpp index 3cdd415..50504fe 100644 --- a/slice_effect.cpp +++ b/slice_effect.cpp @@ -1,5 +1,6 @@ #include +#include "effect_chain.h" #include "slice_effect.h" #include "effect_util.h" #include "util.h" @@ -9,9 +10,14 @@ using namespace std; namespace movit { SliceEffect::SliceEffect() + : input_slice_size(1), + output_slice_size(1), + offset(0), + direction(VERTICAL) { register_int("input_slice_size", &input_slice_size); register_int("output_slice_size", &output_slice_size); + register_int("offset", &offset); register_int("direction", (int *)&direction); } @@ -54,18 +60,18 @@ void SliceEffect::set_gl_state(GLuint glsl_program_num, const string &prefix, un set_uniform_float(glsl_program_num, prefix, "output_coord_to_slice_num", float(output_width) / float(output_slice_size)); set_uniform_float(glsl_program_num, prefix, "slice_num_to_input_coord", float(input_slice_size) / float(input_width)); set_uniform_float(glsl_program_num, prefix, "slice_offset_to_input_coord", float(output_slice_size) / float(input_width)); + set_uniform_float(glsl_program_num, prefix, "offset", float(offset) / float(input_width)); } else { set_uniform_float(glsl_program_num, prefix, "output_coord_to_slice_num", float(output_height) / float(output_slice_size)); set_uniform_float(glsl_program_num, prefix, "slice_num_to_input_coord", float(input_slice_size) / float(input_height)); set_uniform_float(glsl_program_num, prefix, "slice_offset_to_input_coord", float(output_slice_size) / float(input_height)); + set_uniform_float(glsl_program_num, prefix, "offset", float(offset) / float(input_height)); } - // Normalized coordinates could potentially cause blurring of the - // image; it's not critical, but we have set changes_output_size() - // and needs_texture_bounce(), so simply turning off the interpolation - // is allowed. - assert(*sampler_num == 1); - glActiveTexture(GL_TEXTURE0); + // Normalized coordinates could potentially cause blurring of the image. + // It isn't critical, but still good practice. + Node *self = chain->find_node_for_effect(this); + glActiveTexture(chain->get_input_sampler(self, 0)); check_error(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); check_error();