From 232fd689d4a310b18b41b4abfa630b3ec6432e14 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 18 Mar 2022 19:15:17 +0100 Subject: [PATCH] Fixed cleanup method on shader classes. Fixes #1179 --- sdrgui/gui/glscope.cpp | 1 + sdrgui/gui/glshadercolors.cpp | 4 ++++ sdrgui/gui/glshadersimple.cpp | 4 ++-- sdrgui/gui/glshadertextured.cpp | 4 ++++ sdrgui/gui/glshadertvarray.cpp | 4 ++++ sdrgui/gui/tvscreenanalog.cpp | 4 ++++ 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/sdrgui/gui/glscope.cpp b/sdrgui/gui/glscope.cpp index 9373ff3db..f8608af91 100644 --- a/sdrgui/gui/glscope.cpp +++ b/sdrgui/gui/glscope.cpp @@ -2074,6 +2074,7 @@ void GLScope::cleanup() { //makeCurrent(); m_glShaderSimple.cleanup(); + m_glShaderColors.cleanup(); m_glShaderBottom1Scale.cleanup(); m_glShaderBottom2Scale.cleanup(); m_glShaderLeft1Scale.cleanup(); diff --git a/sdrgui/gui/glshadercolors.cpp b/sdrgui/gui/glshadercolors.cpp index d64b2b69a..3bf3e47ff 100644 --- a/sdrgui/gui/glshadercolors.cpp +++ b/sdrgui/gui/glshadercolors.cpp @@ -107,6 +107,10 @@ void GLShaderColors::draw(unsigned int mode, const QMatrix4x4& transformMatrix, void GLShaderColors::cleanup() { + if (!QOpenGLContext::currentContext()) { + return; + } + if (m_program) { delete m_program; diff --git a/sdrgui/gui/glshadersimple.cpp b/sdrgui/gui/glshadersimple.cpp index 52b1e94ba..29f1fcf74 100644 --- a/sdrgui/gui/glshadersimple.cpp +++ b/sdrgui/gui/glshadersimple.cpp @@ -103,10 +103,10 @@ void GLShaderSimple::draw(unsigned int mode, const QMatrix4x4& transformMatrix, void GLShaderSimple::cleanup() { - if (m_program) + if (QOpenGLContext::currentContext() && m_program) { delete m_program; - m_program = 0; + m_program = nullptr; } } diff --git a/sdrgui/gui/glshadertextured.cpp b/sdrgui/gui/glshadertextured.cpp index f07e48756..4c1c28751 100644 --- a/sdrgui/gui/glshadertextured.cpp +++ b/sdrgui/gui/glshadertextured.cpp @@ -198,6 +198,10 @@ void GLShaderTextured::drawMutable(unsigned int mode, const QMatrix4x4& transfor void GLShaderTextured::cleanup() { + if (!QOpenGLContext::currentContext()) { + return; + } + if (m_program) { delete m_program; diff --git a/sdrgui/gui/glshadertvarray.cpp b/sdrgui/gui/glshadertvarray.cpp index 8159417fb..5a8f4602c 100644 --- a/sdrgui/gui/glshadertvarray.cpp +++ b/sdrgui/gui/glshadertvarray.cpp @@ -272,6 +272,10 @@ void GLShaderTVArray::cleanup() m_objCurrentRow = nullptr; + if (!QOpenGLContext::currentContext()) { + return; + } + if (m_objProgram) { delete m_objProgram; diff --git a/sdrgui/gui/tvscreenanalog.cpp b/sdrgui/gui/tvscreenanalog.cpp index 7fdbf24ae..28c2d9506 100644 --- a/sdrgui/gui/tvscreenanalog.cpp +++ b/sdrgui/gui/tvscreenanalog.cpp @@ -86,6 +86,10 @@ TVScreenAnalog::~TVScreenAnalog() void TVScreenAnalog::cleanup() { + if (!QOpenGLContext::currentContext()) { + return; + } + if (m_shader) { delete m_shader;