#include "cornerpineffect.h" #include "io/path.h" #include "project/clip.h" #include "debug.h" CornerPinEffect::CornerPinEffect(Clip *c, const EffectMeta *em) : Effect(c, em) { enable_coords = true; enable_shader = true; EffectRow* top_left = add_row("Top Left:"); top_left_x = top_left->add_field(EFFECT_FIELD_DOUBLE); top_left_x->id = "topleftx"; top_left_y = top_left->add_field(EFFECT_FIELD_DOUBLE); top_left_y->id = "toplefty"; EffectRow* top_right = add_row("Top Right:"); top_right_x = top_right->add_field(EFFECT_FIELD_DOUBLE); top_right_x->id = "toprightx"; top_right_y = top_right->add_field(EFFECT_FIELD_DOUBLE); top_right_y->id = "toprighty"; EffectRow* bottom_left = add_row("Bottom Left:"); bottom_left_x = bottom_left->add_field(EFFECT_FIELD_DOUBLE); bottom_left_x->id = "bottomleftx"; bottom_left_y = bottom_left->add_field(EFFECT_FIELD_DOUBLE); bottom_left_y->id = "bottomlefty"; EffectRow* bottom_right = add_row("Bottom Right:"); bottom_right_x = bottom_right->add_field(EFFECT_FIELD_DOUBLE); bottom_right_x->id = "bottomrightx"; bottom_right_y = bottom_right->add_field(EFFECT_FIELD_DOUBLE); bottom_right_y->id = "bottomrighty"; perspective = add_row("Perspective:")->add_field(EFFECT_FIELD_BOOL); perspective->set_bool_value(false); connect(top_left_x, SIGNAL(changed()), this, SLOT(field_changed())); connect(top_left_y, SIGNAL(changed()), this, SLOT(field_changed())); connect(top_right_x, SIGNAL(changed()), this, SLOT(field_changed())); connect(top_right_y, SIGNAL(changed()), this, SLOT(field_changed())); connect(bottom_left_x, SIGNAL(changed()), this, SLOT(field_changed())); connect(bottom_left_y, SIGNAL(changed()), this, SLOT(field_changed())); connect(bottom_right_x, SIGNAL(changed()), this, SLOT(field_changed())); connect(bottom_right_y, SIGNAL(changed()), this, SLOT(field_changed())); connect(perspective, SIGNAL(changed()), this, SLOT(field_changed())); vertPath = "cornerpin.vert"; fragPath = "cornerpin.frag"; } void CornerPinEffect::process_coords(double timecode, GLTextureCoords &coords) { coords.vertexTopLeftX += top_left_x->get_double_value(timecode); coords.vertexTopLeftY += top_left_y->get_double_value(timecode); coords.vertexTopRightX += top_right_x->get_double_value(timecode); coords.vertexTopRightY += top_right_y->get_double_value(timecode); coords.vertexBottomLeftX += bottom_left_x->get_double_value(timecode); coords.vertexBottomLeftY += bottom_left_y->get_double_value(timecode); coords.vertexBottomRightX += bottom_right_x->get_double_value(timecode); coords.vertexBottomRightY += bottom_right_y->get_double_value(timecode); } void CornerPinEffect::process_shader(double timecode, GLTextureCoords &coords) { glslProgram->setUniformValue("p0", (GLfloat) coords.vertexBottomLeftX, (GLfloat) coords.vertexBottomLeftY); glslProgram->setUniformValue("p1", (GLfloat) coords.vertexBottomRightX, (GLfloat) coords.vertexBottomRightY); glslProgram->setUniformValue("p2", (GLfloat) coords.vertexTopLeftX, (GLfloat) coords.vertexTopLeftY); glslProgram->setUniformValue("p3", (GLfloat) coords.vertexTopRightX, (GLfloat) coords.vertexTopRightY); glslProgram->setUniformValue("perspective", perspective->get_bool_value(timecode)); }