Skip to content

Commit

Permalink
adding transitions
Browse files Browse the repository at this point in the history
  • Loading branch information
rectalogic committed Apr 25, 2024
1 parent a7aa80e commit 78fe3e8
Show file tree
Hide file tree
Showing 10 changed files with 301 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/MediaFX/Transition/GL/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ endfunction()
process_gltransition_shader(SHADERS
gl-transitions/transitions/doorway.glsl
gl-transitions/transitions/ripple.glsl
gl-transitions/transitions/windowslice.glsl
gl-transitions/transitions/SimpleZoom.glsl
gl-transitions/transitions/LinearBlur.glsl
gl-transitions/transitions/WaterDrop.glsl
gl-transitions/transitions/GlitchMemories.glsl
gl-transitions/transitions/PolkaDotsCurtain.glsl
)

# https://bugreports.qt.io/browse/QTBUG-103723
Expand All @@ -31,10 +37,22 @@ qt_add_shaders(gltransition "gltransitionshaders"
FILES
${CMAKE_CURRENT_BINARY_DIR}/doorway.glsl.frag
${CMAKE_CURRENT_BINARY_DIR}/ripple.glsl.frag
${CMAKE_CURRENT_BINARY_DIR}/windowslice.glsl.frag
${CMAKE_CURRENT_BINARY_DIR}/SimpleZoom.glsl.frag
${CMAKE_CURRENT_BINARY_DIR}/LinearBlur.glsl.frag
${CMAKE_CURRENT_BINARY_DIR}/WaterDrop.glsl.frag
${CMAKE_CURRENT_BINARY_DIR}/GlitchMemories.glsl.frag
${CMAKE_CURRENT_BINARY_DIR}/PolkaDotsCurtain.glsl.frag
gltransition.vert
OUTPUTS
doorway.frag.qsb
ripple.frag.qsb
windowslice.frag.qsb
SimpleZoom.frag.qsb
LinearBlur.frag.qsb
WaterDrop.frag.qsb
GlitchMemories.frag.qsb
PolkaDotsCurtain.frag.qsb
gltransition.vert.qsb
OUTPUT_TARGETS gltransitionshader_output_targets
)
Expand All @@ -49,4 +67,10 @@ qt_add_qml_module(gltransition
TransitionShaderEffect.qml
Doorway.qml
Ripple.qml
WindowSlice.qml
SimpleZoom.qml
LinearBlur.qml
WaterDrop.qml
GlitchMemories.qml
PolkaDotsCurtain.qml
)
24 changes: 24 additions & 0 deletions src/MediaFX/Transition/GL/GlitchMemories.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (C) 2024 Andrew Wason
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick
import MediaFX.Transition as T
import MediaFX.Viewer

/*!
\qmltype GlitchMemories
\inherits MediaTransition
\inqmlmodule MediaFX.Transition.GL
\brief Implements gl-transitions \l {https://gl-transitions.com/editor/GlitchMemories} {GlitchMemories}.
*/
T.MediaTransition {
id: root

TransitionShaderEffect {
sourceItem: root.source
destItem: root.dest
progress: root.time

fragmentShader: "qrc:/shaders/gltransition/GlitchMemories.frag.qsb"
}
}
41 changes: 41 additions & 0 deletions src/MediaFX/Transition/GL/LinearBlur.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright (C) 2024 Andrew Wason
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick
import MediaFX.Transition as T
import MediaFX.Viewer

/*!
\qmltype LinearBlur
\inherits MediaTransition
\inqmlmodule MediaFX.Transition.GL
\brief Implements gl-transitions \l {https://gl-transitions.com/editor/LinearBlur} {LinearBlur}.
*/
T.MediaTransition {
id: root

/*! XXX */
property alias intensity: shader.intensity

TransitionShaderEffect {
id: shader
property real intensity: 0.1

sourceItem: root.source
destItem: root.dest
progress: root.time

fragmentShader: "qrc:/shaders/gltransition/LinearBlur.frag.qsb"
}
ui: Component {
Column {
spacing: 2
UIRealSpinBox {
label: "intensity"
initialValue: 0.1
stepSize: 0.1
Component.onCompleted: shader.intensity = Qt.binding(() => value)
}
}
}
}
59 changes: 59 additions & 0 deletions src/MediaFX/Transition/GL/PolkaDotsCurtain.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright (C) 2024 Andrew Wason
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick
import MediaFX.Transition as T
import MediaFX.Viewer

/*!
\qmltype PolkaDotsCurtain
\inherits MediaTransition
\inqmlmodule MediaFX.Transition.GL
\brief Implements gl-transitions \l {https://gl-transitions.com/editor/PolkaDotsCurtain} {PolkaDotsCurtain}.
*/
T.MediaTransition {
id: root

/*! XXX */
property alias dots: shader.dots
/*! XXX */
property alias center: shader.center

TransitionShaderEffect {
id: shader
property real dots: 20.0
property point center: Qt.point(0, 0)

sourceItem: root.source
destItem: root.dest
progress: root.time

fragmentShader: "qrc:/shaders/gltransition/PolkaDotsCurtain.frag.qsb"
}
ui: Component {
Column {
spacing: 2
UIRealSpinBox {
label: "dots"
initialValue: 20.0
Component.onCompleted: shader.dots = Qt.binding(() => value)
}
UIRealSpinBox {
label: "center.x"
initialValue: 0
Component.onCompleted: shader.center.x = Qt.binding(() => value)
stepSize: 0.1
from: -1.0
to: 1.0
}
UIRealSpinBox {
label: "center.y"
initialValue: 0
Component.onCompleted: shader.center.y = Qt.binding(() => value)
stepSize: 0.1
from: -1.0
to: 1.0
}
}
}
}
41 changes: 41 additions & 0 deletions src/MediaFX/Transition/GL/SimpleZoom.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright (C) 2024 Andrew Wason
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick
import MediaFX.Transition as T
import MediaFX.Viewer

/*!
\qmltype SimpleZoom
\inherits MediaTransition
\inqmlmodule MediaFX.Transition.GL
\brief Implements gl-transitions \l {https://gl-transitions.com/editor/SimpleZoom} {SimpleZoom}.
*/
T.MediaTransition {
id: root

/*! XXX */
property alias zoom_quickness: shader.zoom_quickness

TransitionShaderEffect {
id: shader
property real zoom_quickness: 0.8

sourceItem: root.source
destItem: root.dest
progress: root.time

fragmentShader: "qrc:/shaders/gltransition/SimpleZoom.frag.qsb"
}
ui: Component {
Column {
spacing: 2
UIRealSpinBox {
label: "zoom_quickness"
initialValue: 0.8
stepSize: 0.1
Component.onCompleted: shader.zoom_quickness = Qt.binding(() => value)
}
}
}
}
48 changes: 48 additions & 0 deletions src/MediaFX/Transition/GL/WaterDrop.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Copyright (C) 2024 Andrew Wason
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick
import MediaFX.Transition as T
import MediaFX.Viewer

/*!
\qmltype WaterDrop
\inherits MediaTransition
\inqmlmodule MediaFX.Transition.GL
\brief Implements gl-transitions \l {https://gl-transitions.com/editor/WaterDrop} {WaterDrop}.
*/
T.MediaTransition {
id: root

/*! XXX */
property alias amplitude: shader.amplitude
/*! XXX */
property alias speed: shader.speed

TransitionShaderEffect {
id: shader
property real amplitude: 30
property real speed: 30

sourceItem: root.source
destItem: root.dest
progress: root.time

fragmentShader: "qrc:/shaders/gltransition/WaterDrop.frag.qsb"
}
ui: Component {
Column {
spacing: 2
UIRealSpinBox {
label: "amplitude"
initialValue: 30
Component.onCompleted: shader.amplitude = Qt.binding(() => value)
}
UIRealSpinBox {
label: "speed"
initialValue: 30
Component.onCompleted: shader.speed = Qt.binding(() => value)
}
}
}
}
50 changes: 50 additions & 0 deletions src/MediaFX/Transition/GL/WindowSlice.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright (C) 2024 Andrew Wason
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick
import MediaFX.Transition as T
import MediaFX.Viewer

/*!
\qmltype WindowSlice
\inherits MediaTransition
\inqmlmodule MediaFX.Transition.GL
\brief Implements gl-transitions \l {https://gl-transitions.com/editor/windowslice} {WindowSlice}.
*/
T.MediaTransition {
id: root

/*! XXX */
property alias count: shader.count
/*! XXX */
property alias smoothness: shader.smoothness

TransitionShaderEffect {
id: shader
property real count: 10.0
property real smoothness: 0.5

sourceItem: root.source
destItem: root.dest
progress: root.time

fragmentShader: "qrc:/shaders/gltransition/windowslice.frag.qsb"
}
ui: Component {
Column {
spacing: 2
UIRealSpinBox {
label: "count"
initialValue: 10.0
Component.onCompleted: shader.count = Qt.binding(() => value)
}
UIRealSpinBox {
label: "smoothness"
initialValue: 0.5
Component.onCompleted: shader.smoothness = Qt.binding(() => value)
stepSize: 0.1
to: 1.0
}
}
}
}
5 changes: 5 additions & 0 deletions src/MediaFX/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ int viewer(QGuiApplication& app, QCommandLineParser& parser)
qCritical() << "Must specify transition name or QML path.";
parser.showHelp(1);
}
if (component.isError()) {
for (auto& error : component.errors())
qCritical() << error;
exit(1);
}
engine.rootContext()->setContextProperty(u"transitionComponent"_s, &component);

QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed, &app, &QCoreApplication::quit, Qt::QueuedConnection);
Expand Down
6 changes: 6 additions & 0 deletions src/MediaFX/render_session.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ void RenderSession::componentComplete()
m_outputAudioFormat.setSampleRate(sampleRate());

QQmlComponent component(qmlEngine(this), m_sourceUrl);
if (component.isError()) {
for (auto& error : component.errors())
qmlWarning(this) << error;
fatalError();
return;
}
QQmlContext* creationContext = component.creationContext();
if (!creationContext)
creationContext = qmlContext(this);
Expand Down
3 changes: 3 additions & 0 deletions tests/qml/gl-transitions.qml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ MediaSequence {
},
Component {
Ripple { }
},
Component {
PolkaDotCurtains { }
}
]

Expand Down

0 comments on commit 78fe3e8

Please sign in to comment.