added cool wave effect

This commit is contained in:
itsmattkc
2018-10-19 21:58:59 +11:00
parent 856128688d
commit 074570a2d0
7 changed files with 81 additions and 2 deletions
+3
View File
@@ -32,6 +32,7 @@
#include "effects/audio/volumeeffect.h"
#include "effects/audio/audionoiseeffect.h"
#include "effects/audio/toneeffect.h"
#include "effects/video/waveeffect.h"
#include <QCheckBox>
#include <QGridLayout>
@@ -57,6 +58,7 @@ void init_effects() {
video_effect_names[VIDEO_CROP_EFFECT] = "Crop";
video_effect_names[VIDEO_FLIP_EFFECT] = "Flip";
video_effect_names[VIDEO_BOXBLUR_EFFECT] = "Box Blur";
video_effect_names[VIDEO_WAVE_EFFECT] = "Wave";
audio_effect_names[AUDIO_VOLUME_EFFECT] = "Volume";
audio_effect_names[AUDIO_PAN_EFFECT] = "Pan";
@@ -77,6 +79,7 @@ Effect* create_effect(int effect_id, Clip* c) {
case VIDEO_CROP_EFFECT: return new CropEffect(c);
case VIDEO_FLIP_EFFECT: return new FlipEffect(c);
case VIDEO_BOXBLUR_EFFECT: return new BoxBlurEffect(c);
case VIDEO_WAVE_EFFECT: return new WaveEffect(c);
}
} else {
switch (effect_id) {
+1
View File
@@ -33,6 +33,7 @@ enum VideoEffects {
VIDEO_CROP_EFFECT,
VIDEO_FLIP_EFFECT,
VIDEO_BOXBLUR_EFFECT,
VIDEO_WAVE_EFFECT,
VIDEO_EFFECT_COUNT
};
+1
View File
@@ -6,5 +6,6 @@
<file>chromakeyeffect.frag</file>
<file>solideffect.frag</file>
<file>boxblureffect.frag</file>
<file>waveeffect.frag</file>
</qresource>
</RCC>
+27
View File
@@ -0,0 +1,27 @@
#version 110
// uniform float evolution;
uniform float frequency;
uniform float intensity;
uniform float evolution;
uniform mediump float amount_val;
uniform sampler2D myTexture;
varying vec2 vTexCoord;
void main(void) {
float offset = sin((vTexCoord.x+evolution)*frequency)*intensity;
float y = vTexCoord.y-offset;
if (y < 0.0 || y > 1.0) {
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
} else {
vec4 textureColor = texture2D(myTexture, vec2(vTexCoord.x, y));
gl_FragColor = vec4(
textureColor.r,
textureColor.g,
textureColor.b,
textureColor.a
);
}
}
+28
View File
@@ -0,0 +1,28 @@
#include "waveeffect.h"
WaveEffect::WaveEffect(Clip* c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_WAVE_EFFECT) {
enable_shader = true;
frequency_val = add_row("Frequency:")->add_field(EFFECT_FIELD_DOUBLE);
frequency_val->set_double_minimum_value(0);
frequency_val->set_double_default_value(10);
intensity_val = add_row("Intensity:")->add_field(EFFECT_FIELD_DOUBLE);
intensity_val->set_double_default_value(10);
evolution_val = add_row("Evolution:")->add_field(EFFECT_FIELD_DOUBLE);
evolution_val->set_double_default_value(0);
connect(frequency_val, SIGNAL(changed()), this, SLOT(field_changed()));
connect(intensity_val, SIGNAL(changed()), this, SLOT(field_changed()));
connect(evolution_val, SIGNAL(changed()), this, SLOT(field_changed()));
vertPath = ":/shaders/common.vert";
fragPath = ":/shaders/waveeffect.frag";
}
void WaveEffect::process_shader(double timecode) {
glslProgram->setUniformValue("frequency", (GLfloat) (frequency_val->get_double_value(timecode)));
glslProgram->setUniformValue("intensity", (GLfloat) (intensity_val->get_double_value(timecode)*0.01));
glslProgram->setUniformValue("evolution", (GLfloat) (evolution_val->get_double_value(timecode)*0.01));
}
+17
View File
@@ -0,0 +1,17 @@
#ifndef WAVEEFFECT_H
#define WAVEEFFECT_H
#include "../effect.h"
class WaveEffect : public Effect {
Q_OBJECT
public:
WaveEffect(Clip* c);
void process_shader(double timecode);
private:
EffectField* frequency_val;
EffectField* intensity_val;
EffectField* evolution_val;
};
#endif // WAVEEFFECT_H
+4 -2
View File
@@ -82,7 +82,8 @@ SOURCES += \
effects/audio/toneeffect.cpp \
project/marker.cpp \
dialogs/speeddialog.cpp \
dialogs/mediapropertiesdialog.cpp
dialogs/mediapropertiesdialog.cpp \
effects/video/waveeffect.cpp
HEADERS += \
mainwindow.h \
@@ -143,7 +144,8 @@ HEADERS += \
project/selection.h \
dialogs/speeddialog.h \
dialogs/speeddialog.h \
dialogs/mediapropertiesdialog.h
dialogs/mediapropertiesdialog.h \
effects/video/waveeffect.h
FORMS += \
mainwindow.ui \