From 490677fbca1492f38717bacc15be5a356f4084c8 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Sun, 25 Sep 2022 10:37:02 -0700 Subject: [PATCH] chromakey: add invert mask option --- app/node/keying/chromakey/chromakey.cpp | 4 ++++ app/node/keying/chromakey/chromakey.h | 1 + app/shaders/chromakey.frag | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/app/node/keying/chromakey/chromakey.cpp b/app/node/keying/chromakey/chromakey.cpp index f78d4db9a..cfbea289b 100644 --- a/app/node/keying/chromakey/chromakey.cpp +++ b/app/node/keying/chromakey/chromakey.cpp @@ -24,6 +24,7 @@ namespace olive { const QString ChromaKeyNode::kColorInput = QStringLiteral("color_key"); const QString ChromaKeyNode::kMaskOnlyInput = QStringLiteral("mask_only_in"); +const QString ChromaKeyNode::kInvertInput = QStringLiteral("invert_in"); const QString ChromaKeyNode::kUpperToleranceInput = QStringLiteral("upper_tolerence_in"); const QString ChromaKeyNode::kLowerToleranceInput = QStringLiteral("lower_tolerence_in"); const QString ChromaKeyNode::kGarbageMatteInput = QStringLiteral("garbage_in"); @@ -59,6 +60,8 @@ ChromaKeyNode::ChromaKeyNode() SetInputProperty(kShadowsInput, QStringLiteral("min"), 0.0); SetInputProperty(kShadowsInput, QStringLiteral("base"), 0.1); + AddInput(kInvertInput, NodeValue::kBoolean, false); + AddInput(kMaskOnlyInput, NodeValue::kBoolean, false); } @@ -93,6 +96,7 @@ void ChromaKeyNode::Retranslate() SetInputName(kHighlightsInput, tr("Highlights")); SetInputName(kUpperToleranceInput, tr("Upper Tolerance")); SetInputName(kLowerToleranceInput, tr("Lower Tolerance")); + SetInputName(kInvertInput, tr("Invert Mask")); SetInputName(kMaskOnlyInput, tr("Show Mask Only")); } diff --git a/app/node/keying/chromakey/chromakey.h b/app/node/keying/chromakey/chromakey.h index 653d31c87..5082dc32f 100644 --- a/app/node/keying/chromakey/chromakey.h +++ b/app/node/keying/chromakey/chromakey.h @@ -42,6 +42,7 @@ class ChromaKeyNode : public OCIOBaseNode { virtual void ConfigChanged() override; static const QString kColorInput; + static const QString kInvertInput; static const QString kMaskOnlyInput; static const QString kUpperToleranceInput; static const QString kLowerToleranceInput; diff --git a/app/shaders/chromakey.frag b/app/shaders/chromakey.frag index 8c707e644..dc665b2e4 100644 --- a/app/shaders/chromakey.frag +++ b/app/shaders/chromakey.frag @@ -9,6 +9,7 @@ uniform sampler2D garbage_in; uniform sampler2D core_in; uniform bool garbage_in_enabled; uniform bool core_in_enabled; +uniform bool invert_in; uniform float highlights_in; uniform float shadows_in; @@ -94,6 +95,11 @@ void main() { mask = shadows_in * 0.01 * (highlights_in * 0.01 * mask - 1.0) + 1.0; mask = clamp(mask, 0.0, 1.0); + // Invert + if (invert_in) { + mask = 1.0 - mask; + } + col.rgb *= mask; col.w = mask;