From abe28f81bf82b76d8e6ae8d5f075c259eb558289 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 8 Apr 2021 18:59:04 +1000 Subject: [PATCH] makeCurrent when destroying ManagedDisplayWidgets Fixes #1555 --- app/widget/manageddisplay/manageddisplay.cpp | 2 +- app/widget/manageddisplay/manageddisplay.h | 5 +++++ app/widget/scope/histogram/histogram.cpp | 13 +++++-------- app/widget/scope/histogram/histogram.h | 2 +- app/widget/scope/scopebase/scopebase.cpp | 15 ++++++--------- app/widget/scope/scopebase/scopebase.h | 2 +- app/widget/scope/waveform/waveform.cpp | 9 +++------ app/widget/scope/waveform/waveform.h | 2 +- app/widget/viewer/viewerdisplay.cpp | 5 ----- app/widget/viewer/viewerdisplay.h | 2 +- 10 files changed, 24 insertions(+), 33 deletions(-) diff --git a/app/widget/manageddisplay/manageddisplay.cpp b/app/widget/manageddisplay/manageddisplay.cpp index 3d5e674a7..c79790194 100644 --- a/app/widget/manageddisplay/manageddisplay.cpp +++ b/app/widget/manageddisplay/manageddisplay.cpp @@ -70,7 +70,7 @@ ManagedDisplayWidget::ManagedDisplayWidget(QWidget *parent) : ManagedDisplayWidget::~ManagedDisplayWidget() { - OnDestroy(); + MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR_INNER; if (RenderManager::instance()->backend() == RenderManager::kOpenGL) { disconnect(static_cast(inner_widget_), diff --git a/app/widget/manageddisplay/manageddisplay.h b/app/widget/manageddisplay/manageddisplay.h index 32b30ad58..5b39f053b 100644 --- a/app/widget/manageddisplay/manageddisplay.h +++ b/app/widget/manageddisplay/manageddisplay.h @@ -82,6 +82,11 @@ private slots: }; +#define MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR_INNER \ + makeCurrent();OnDestroy();doneCurrent() +#define MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR(x) \ + virtual ~x() override{MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR_INNER;} + class ManagedDisplayWidget : public QWidget { Q_OBJECT diff --git a/app/widget/scope/histogram/histogram.cpp b/app/widget/scope/histogram/histogram.cpp index b0aa95daf..e952beed1 100644 --- a/app/widget/scope/histogram/histogram.cpp +++ b/app/widget/scope/histogram/histogram.cpp @@ -29,19 +29,16 @@ namespace olive { -HistogramScope::HistogramScope(QWidget* parent) : - ScopeBase(parent) -{ -} +#define super ScopeBase -HistogramScope::~HistogramScope() +HistogramScope::HistogramScope(QWidget* parent) : + super(parent) { - OnDestroy(); } void HistogramScope::OnInit() { - ScopeBase::OnInit(); + super::OnInit(); ShaderCode secondary_code(FileFunctions::ReadFileAsString(":/shaders/rgbhistogram_secondary.frag"), FileFunctions::ReadFileAsString(":/shaders/rgbhistogram.vert")); @@ -50,7 +47,7 @@ void HistogramScope::OnInit() void HistogramScope::OnDestroy() { - ScopeBase::OnDestroy(); + super::OnDestroy(); pipeline_secondary_.clear(); texture_row_sums_ = nullptr; diff --git a/app/widget/scope/histogram/histogram.h b/app/widget/scope/histogram/histogram.h index 756a40d54..89607a95d 100644 --- a/app/widget/scope/histogram/histogram.h +++ b/app/widget/scope/histogram/histogram.h @@ -31,7 +31,7 @@ class HistogramScope : public ScopeBase public: HistogramScope(QWidget* parent = nullptr); - virtual ~HistogramScope() override; + MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR(HistogramScope) protected slots: virtual void OnInit() override; diff --git a/app/widget/scope/scopebase/scopebase.cpp b/app/widget/scope/scopebase/scopebase.cpp index 3ae2ce669..74b1ff57d 100644 --- a/app/widget/scope/scopebase/scopebase.cpp +++ b/app/widget/scope/scopebase/scopebase.cpp @@ -24,18 +24,15 @@ namespace olive { +#define super ManagedDisplayWidget + ScopeBase::ScopeBase(QWidget* parent) : - ManagedDisplayWidget(parent), + super(parent), buffer_(nullptr) { EnableDefaultContextMenu(); } -ScopeBase::~ScopeBase() -{ - OnDestroy(); -} - void ScopeBase::SetBuffer(Frame *frame) { buffer_ = frame; @@ -45,7 +42,7 @@ void ScopeBase::SetBuffer(Frame *frame) void ScopeBase::showEvent(QShowEvent* e) { - ManagedDisplayWidget::showEvent(e); + super::showEvent(e); UploadTextureFromBuffer(); } @@ -92,7 +89,7 @@ void ScopeBase::UploadTextureFromBuffer() void ScopeBase::OnInit() { - ManagedDisplayWidget::OnInit(); + super::OnInit(); UploadTextureFromBuffer(); @@ -114,7 +111,7 @@ void ScopeBase::OnPaint() void ScopeBase::OnDestroy() { - ManagedDisplayWidget::OnDestroy(); + super::OnDestroy(); managed_tex_ = nullptr; texture_ = nullptr; diff --git a/app/widget/scope/scopebase/scopebase.h b/app/widget/scope/scopebase/scopebase.h index 4e7d852f9..893a796b6 100644 --- a/app/widget/scope/scopebase/scopebase.h +++ b/app/widget/scope/scopebase/scopebase.h @@ -32,7 +32,7 @@ class ScopeBase : public ManagedDisplayWidget public: ScopeBase(QWidget* parent = nullptr); - virtual ~ScopeBase() override; + MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR(ScopeBase) public slots: void SetBuffer(Frame* frame); diff --git a/app/widget/scope/waveform/waveform.cpp b/app/widget/scope/waveform/waveform.cpp index d4f6e283e..09243ccaf 100644 --- a/app/widget/scope/waveform/waveform.cpp +++ b/app/widget/scope/waveform/waveform.cpp @@ -33,14 +33,11 @@ namespace olive { -WaveformScope::WaveformScope(QWidget* parent) : - ScopeBase(parent) -{ -} +#define super ScopeBase -WaveformScope::~WaveformScope() +WaveformScope::WaveformScope(QWidget* parent) : + super(parent) { - OnDestroy(); } ShaderCode WaveformScope::GenerateShaderCode() diff --git a/app/widget/scope/waveform/waveform.h b/app/widget/scope/waveform/waveform.h index 743d3de5c..1041dcee1 100644 --- a/app/widget/scope/waveform/waveform.h +++ b/app/widget/scope/waveform/waveform.h @@ -31,7 +31,7 @@ class WaveformScope : public ScopeBase public: WaveformScope(QWidget* parent = nullptr); - virtual ~WaveformScope() override; + MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR(WaveformScope) protected: virtual ShaderCode GenerateShaderCode() override; diff --git a/app/widget/viewer/viewerdisplay.cpp b/app/widget/viewer/viewerdisplay.cpp index e9374c44e..d7524c3e3 100644 --- a/app/widget/viewer/viewerdisplay.cpp +++ b/app/widget/viewer/viewerdisplay.cpp @@ -62,11 +62,6 @@ ViewerDisplayWidget::ViewerDisplayWidget(QWidget *parent) : frame_rate_averages_.resize(kFrameRateAverageCount); } -ViewerDisplayWidget::~ViewerDisplayWidget() -{ - OnDestroy(); -} - void ViewerDisplayWidget::SetMatrixTranslate(const QMatrix4x4 &mat) { translate_matrix_ = mat; diff --git a/app/widget/viewer/viewerdisplay.h b/app/widget/viewer/viewerdisplay.h index 40215def3..811c8a8d7 100644 --- a/app/widget/viewer/viewerdisplay.h +++ b/app/widget/viewer/viewerdisplay.h @@ -62,7 +62,7 @@ public: */ ViewerDisplayWidget(QWidget* parent = nullptr); - virtual ~ViewerDisplayWidget() override; + MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR(ViewerDisplayWidget) const ViewerSafeMarginInfo& GetSafeMargin() const; void SetSafeMargins(const ViewerSafeMarginInfo& safe_margin);