From b2835b77df5b7fec149b88feabf0ceaccd16fb5a Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 3 May 2021 13:54:13 +1000 Subject: [PATCH] viewer: fixed crash caused by setting interlace mode before opengl instance was initialized --- app/widget/viewer/viewerdisplay.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/widget/viewer/viewerdisplay.cpp b/app/widget/viewer/viewerdisplay.cpp index 752ec0738..6ae5460a4 100644 --- a/app/widget/viewer/viewerdisplay.cpp +++ b/app/widget/viewer/viewerdisplay.cpp @@ -126,10 +126,11 @@ void ViewerDisplayWidget::SetDeinterlacing(bool e) { deinterlace_ = e; - if (deinterlace_) { - deinterlace_shader_ = renderer()->CreateNativeShader(ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/deinterlace.frag")))); - } else { - renderer()->DestroyNativeShader(deinterlace_shader_); + if (!deinterlace_) { + if (!deinterlace_shader_.isNull()) { + renderer()->DestroyNativeShader(deinterlace_shader_); + deinterlace_shader_.clear(); + } deinterlace_texture_ = nullptr; } @@ -340,6 +341,10 @@ void ViewerDisplayWidget::OnPaint() TexturePtr texture_to_draw = texture_; if (deinterlace_) { + if (deinterlace_shader_.isNull()) { + deinterlace_shader_ = renderer()->CreateNativeShader(ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/deinterlace.frag")))); + } + if (!deinterlace_texture_ || deinterlace_texture_->params() != texture_to_draw->params()) { // (Re)create texture