From ca49e2d990d5bbb4cd1b2cb6db93664098637810 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 6 Mar 2016 09:33:10 +0100 Subject: [PATCH] OpenGL modernization: various fixes --- include/gui/glscope.h | 1 + include/gui/glspectrum.h | 3 +-- sdrbase/gui/glscope.cpp | 36 ++++++++++++++++++++++++++++++++---- sdrbase/gui/glspectrum.cpp | 4 ++++ 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/include/gui/glscope.h b/include/gui/glscope.h index b945cf71b..24c54ba58 100644 --- a/include/gui/glscope.h +++ b/include/gui/glscope.h @@ -200,6 +200,7 @@ private: void drawPowerOverlay(); protected slots: + void cleanup(); void tick(); }; diff --git a/include/gui/glspectrum.h b/include/gui/glspectrum.h index eb09863db..a13dfc900 100644 --- a/include/gui/glspectrum.h +++ b/include/gui/glspectrum.h @@ -209,9 +209,8 @@ private: void enterEvent(QEvent* event); void leaveEvent(QEvent* event); - void cleanup(); - private slots: + void cleanup(); void tick(); void channelMarkerChanged(); void channelMarkerDestroyed(QObject* object); diff --git a/sdrbase/gui/glscope.cpp b/sdrbase/gui/glscope.cpp index 042983267..1ac963890 100644 --- a/sdrbase/gui/glscope.cpp +++ b/sdrbase/gui/glscope.cpp @@ -19,16 +19,13 @@ #include #include +#include #include "gui/glscope.h" #include "dsp/dspengine.h" #include #include -#ifdef GL_ANDROID -#include "util/gleshelp.h" -#endif - /* #ifdef _WIN32 static double log2f(double n) @@ -237,6 +234,25 @@ void GLScope::newTrace(const std::vector& trace, int sampleRate) void GLScope::initializeGL() { + QOpenGLContext *glCurrentContext = QOpenGLContext::currentContext(); + + if (glCurrentContext) { + if (QOpenGLContext::currentContext()->isValid()) { + qDebug() << "GLScope::initializeGL: context:" + << " major: " << (QOpenGLContext::currentContext()->format()).majorVersion() + << " minor: " << (QOpenGLContext::currentContext()->format()).minorVersion() + << " ES: " << (QOpenGLContext::currentContext()->isOpenGLES() ? "yes" : "no"); + } + else { + qDebug() << "GLScope::initializeGL: current context is invalid"; + } + } else { + qCritical() << "GLScope::initializeGL: no current context"; + return; + } + + connect(glCurrentContext, &QOpenGLContext::aboutToBeDestroyed, this, &GLScope::cleanup); // TODO: when migrating to QOpenGLWidget + glDisable(GL_DEPTH_TEST); m_glShaderSimple.initializeGL(); m_glShaderLeft1Scale.initializeGL(); @@ -2797,3 +2813,15 @@ void GLScope::connectTimer(const QTimer& timer) connect(&timer, SIGNAL(timeout()), this, SLOT(tick())); m_timer.stop(); } + +void GLScope::cleanup() +{ + makeCurrent(); + m_glShaderSimple.cleanup(); + m_glShaderBottom1Scale.cleanup(); + m_glShaderBottom2Scale.cleanup(); + m_glShaderLeft1Scale.cleanup(); + m_glShaderPowerOverlay.cleanup(); + doneCurrent(); +} + diff --git a/sdrbase/gui/glspectrum.cpp b/sdrbase/gui/glspectrum.cpp index e76a76b3f..b705fd935 100644 --- a/sdrbase/gui/glspectrum.cpp +++ b/sdrbase/gui/glspectrum.cpp @@ -2274,5 +2274,9 @@ void GLSpectrum::cleanup() { makeCurrent(); m_glShaderSimple.cleanup(); + m_glShaderFrequencyScale.cleanup(); + m_glShaderHistogram.cleanup(); + m_glShaderLeftScale.cleanup(); + m_glShaderWaterfall.cleanup(); doneCurrent(); }