From 4e6da87585130aa7e9d9534da71b58dea9fd8e3d Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 17 Dec 2019 15:58:16 +1100 Subject: [PATCH] ported crossdissolve to external shader --- app/node/block/block.cpp | 3 ++ app/node/block/transition/CMakeLists.txt | 1 - .../transition/crossdissolve/CMakeLists.txt | 22 ------------ .../crossdissolve/crossdissolve.cpp | 35 ------------------- .../transition/crossdissolve/crossdissolve.h | 21 ----------- .../block/transition/externaltransition.cpp | 6 +++- app/node/block/transition/transition.cpp | 3 ++ app/node/factory.cpp | 6 ++-- app/node/factory.h | 1 - app/shaders/crossdissolve.xml | 16 +++++++++ app/shaders/shaders.qrc | 1 + app/widget/timelinewidget/tool/transition.cpp | 6 ++-- 12 files changed, 33 insertions(+), 88 deletions(-) delete mode 100644 app/node/block/transition/crossdissolve/CMakeLists.txt delete mode 100644 app/node/block/transition/crossdissolve/crossdissolve.cpp delete mode 100644 app/node/block/transition/crossdissolve/crossdissolve.h create mode 100644 app/shaders/crossdissolve.xml diff --git a/app/node/block/block.cpp b/app/node/block/block.cpp index fde83ff7d..a48ecd2cc 100644 --- a/app/node/block/block.cpp +++ b/app/node/block/block.cpp @@ -43,6 +43,9 @@ Block::Block() : media_out_input_->SetConnectable(false); media_out_input_->set_data_type(NodeParam::kRational); AddInput(media_out_input_); + + // A block's length must be greater than 0 + set_length(1); } QString Block::Category() const diff --git a/app/node/block/transition/CMakeLists.txt b/app/node/block/transition/CMakeLists.txt index 844a4d90c..760462d82 100644 --- a/app/node/block/transition/CMakeLists.txt +++ b/app/node/block/transition/CMakeLists.txt @@ -14,7 +14,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -add_subdirectory(crossdissolve) add_subdirectory(diptoblack) set(OLIVE_SOURCES diff --git a/app/node/block/transition/crossdissolve/CMakeLists.txt b/app/node/block/transition/crossdissolve/CMakeLists.txt deleted file mode 100644 index 21e19a033..000000000 --- a/app/node/block/transition/crossdissolve/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# Olive - Non-Linear Video Editor -# Copyright (C) 2019 Olive Team -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -set(OLIVE_SOURCES - ${OLIVE_SOURCES} - node/block/transition/crossdissolve/crossdissolve.h - node/block/transition/crossdissolve/crossdissolve.cpp - PARENT_SCOPE -) diff --git a/app/node/block/transition/crossdissolve/crossdissolve.cpp b/app/node/block/transition/crossdissolve/crossdissolve.cpp deleted file mode 100644 index ea2ae9ee1..000000000 --- a/app/node/block/transition/crossdissolve/crossdissolve.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "crossdissolve.h" - -Node *CrossDissolveTransition::copy() const -{ - CrossDissolveTransition* c = new CrossDissolveTransition(); - - CopyParameters(this, c); - - return c; -} - -QString CrossDissolveTransition::Name() const -{ - return tr("Cross Dissolve"); -} - -QString CrossDissolveTransition::id() const -{ - return "org.olivevideoeditor.Olive.crossdissolve"; -} - -QString CrossDissolveTransition::Description() const -{ - return tr("A smooth fade transition from one video clip to another."); -} - -bool CrossDissolveTransition::IsAccelerated() const -{ - return true; -} - -QString CrossDissolveTransition::AcceleratedCodeFragment() const -{ - return ReadFileAsString(":/shaders/crossdissolve.frag"); -} diff --git a/app/node/block/transition/crossdissolve/crossdissolve.h b/app/node/block/transition/crossdissolve/crossdissolve.h deleted file mode 100644 index 68f4010b1..000000000 --- a/app/node/block/transition/crossdissolve/crossdissolve.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef CROSSDISSOLVETRANSITION_H -#define CROSSDISSOLVETRANSITION_H - -#include "../transition.h" - -class CrossDissolveTransition : public TransitionBlock -{ -public: - CrossDissolveTransition() = default; - - virtual Node* copy() const override; - - virtual QString Name() const override; - virtual QString id() const override; - virtual QString Description() const override; - - virtual bool IsAccelerated() const override; - virtual QString AcceleratedCodeFragment() const override; -}; - -#endif // CROSSDISSOLVETRANSITION_H diff --git a/app/node/block/transition/externaltransition.cpp b/app/node/block/transition/externaltransition.cpp index 107b47f55..cc618f1c3 100644 --- a/app/node/block/transition/externaltransition.cpp +++ b/app/node/block/transition/externaltransition.cpp @@ -10,7 +10,11 @@ ExternalTransition::ExternalTransition(const QString &xml_meta_filename) : Node *ExternalTransition::copy() const { - return new ExternalTransition(meta_.filename()); + ExternalTransition* t = new ExternalTransition(meta_.filename()); + + CopyParameters(this, t); + + return t; } QString ExternalTransition::Name() const diff --git a/app/node/block/transition/transition.cpp b/app/node/block/transition/transition.cpp index e37e4e353..0b087d4ad 100644 --- a/app/node/block/transition/transition.cpp +++ b/app/node/block/transition/transition.cpp @@ -9,6 +9,9 @@ TransitionBlock::TransitionBlock() in_block_input_ = new NodeInput("in_block_in"); in_block_input_->set_data_type(NodeParam::kBuffer); AddInput(in_block_input_); + + // A block's length must be greater than 0 + set_in_and_out_offset(1, 1); } Block::Type TransitionBlock::type() const diff --git a/app/node/factory.cpp b/app/node/factory.cpp index 4583951bd..3b57c4e14 100644 --- a/app/node/factory.cpp +++ b/app/node/factory.cpp @@ -2,7 +2,7 @@ #include "block/clip/clip.h" #include "block/gap/gap.h" -#include "block/transition/crossdissolve/crossdissolve.h" +#include "block/transition/externaltransition.h" #include "distort/transform/transform.h" #include "input/media/video/video.h" #include "input/media/audio/audio.h" @@ -26,7 +26,7 @@ void NodeFactory::Initialize() library_.append(new ExternalNode(":/shaders/boxblur.xml")); library_.append(new ExternalNode(":/shaders/opacity.xml")); library_.append(new ExternalNode(":/shaders/solid.xml")); - library_.append(new ExternalNode(":/shaders/alphaover.xml")); + library_.append(new ExternalTransition(":/shaders/crossdissolve.xml")); } void NodeFactory::Destroy() @@ -116,8 +116,6 @@ Node *NodeFactory::CreateInternal(const NodeFactory::InternalID &id) return new ClipBlock(); case kGapBlock: return new GapBlock(); - case kTransitionBlock: - return new CrossDissolveTransition(); case kTransformDistort: return new TransformDistort(); case kVideoInput: diff --git a/app/node/factory.h b/app/node/factory.h index adea970d1..b2607ed6a 100644 --- a/app/node/factory.h +++ b/app/node/factory.h @@ -15,7 +15,6 @@ public: kGapBlock, kAudioInput, kTransformDistort, - kTransitionBlock, kVideoInput, kTimelineOutput, kTrackOutput, diff --git a/app/shaders/crossdissolve.xml b/app/shaders/crossdissolve.xml new file mode 100644 index 000000000..7e7c1855f --- /dev/null +++ b/app/shaders/crossdissolve.xml @@ -0,0 +1,16 @@ + + + + Cross Dissolve + + + Transition + + + + A smooth fade transition from one video clip to another. + + + + + diff --git a/app/shaders/shaders.qrc b/app/shaders/shaders.qrc index 4c389df86..ad8cb5d88 100644 --- a/app/shaders/shaders.qrc +++ b/app/shaders/shaders.qrc @@ -5,6 +5,7 @@ boxblur.frag boxblur.xml crossdissolve.frag + crossdissolve.xml diptoblack.frag gaussianblur.frag gaussianblur.xml diff --git a/app/widget/timelinewidget/tool/transition.cpp b/app/widget/timelinewidget/tool/transition.cpp index 2699821c2..79342ba32 100644 --- a/app/widget/timelinewidget/tool/transition.cpp +++ b/app/widget/timelinewidget/tool/transition.cpp @@ -1,7 +1,7 @@ #include "widget/timelinewidget/timelinewidget.h" -#include "node/block/transition/crossdissolve/crossdissolve.h" -#include "node/block/transition/diptoblack/diptoblack.h" +#include "node/block/transition/transition.h" +#include "node/factory.h" #include "widget/nodeview/nodeviewundo.h" TimelineWidget::TransitionTool::TransitionTool(TimelineWidget *parent) : @@ -89,7 +89,7 @@ void TimelineWidget::TransitionTool::MouseRelease(TimelineViewMouseEvent *event) if (ghost_) { if (!ghost_->AdjustedLength().isNull()) { - CrossDissolveTransition* transition = new CrossDissolveTransition(); + TransitionBlock* transition = static_cast(NodeFactory::CreateFromID("org.olivevideoeditor.Olive.crossdissolve")); QUndoCommand* command = new QUndoCommand();