1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-05-23 18:52:28 -04:00

OpenGL modernization: GLScope: enhance openGL context checking and debugging at initializeGL time

This commit is contained in:
f4exb 2016-03-06 10:48:34 +01:00
parent 264022d2ca
commit 92a588b060
2 changed files with 27 additions and 2 deletions

View File

@ -19,6 +19,7 @@
#define INCLUDE_GUI_GLSHADERSIMPLE_H_ #define INCLUDE_GUI_GLSHADERSIMPLE_H_
#include <QString> #include <QString>
#include <QOpenGLFunctions>
class QOpenGLShaderProgram; class QOpenGLShaderProgram;
class QMatrix4x4; class QMatrix4x4;

View File

@ -21,6 +21,7 @@
#include <QMouseEvent> #include <QMouseEvent>
#include <QOpenGLContext> #include <QOpenGLContext>
#include <QOpenGLFunctions> #include <QOpenGLFunctions>
#include <QSurface>
#include "gui/glscope.h" #include "gui/glscope.h"
#include "dsp/dspengine.h" #include "dsp/dspengine.h"
@ -239,6 +240,7 @@ void GLScope::newTrace(const std::vector<Complex>& trace, int sampleRate)
void GLScope::initializeGL() void GLScope::initializeGL()
{ {
QOpenGLContext *glCurrentContext = QOpenGLContext::currentContext(); QOpenGLContext *glCurrentContext = QOpenGLContext::currentContext();
//QOpenGLContext *glCurrentContext = context();
if (glCurrentContext) { if (glCurrentContext) {
if (QOpenGLContext::currentContext()->isValid()) { if (QOpenGLContext::currentContext()->isValid()) {
@ -255,6 +257,28 @@ void GLScope::initializeGL()
return; return;
} }
QSurface *surface = glCurrentContext->surface();
if (surface == 0)
{
qCritical() << "GLScope::initializeGL: no surface attached";
return;
}
else
{
if (surface->surfaceType() != QSurface::OpenGLSurface)
{
qCritical() << "GLScope::initializeGL: surface is not an OpenGLSurface: " << surface->surfaceType()
<< " cannot use an OpenGL context";
return;
}
else
{
qDebug() << "GLScope::initializeGL: OpenGL surface:"
<< " class: " << (surface->surfaceClass() == QSurface::Window ? "Window" : "Offscreen");
}
}
connect(glCurrentContext, &QOpenGLContext::aboutToBeDestroyed, this, &GLScope::cleanup); // TODO: when migrating to QOpenGLWidget connect(glCurrentContext, &QOpenGLContext::aboutToBeDestroyed, this, &GLScope::cleanup); // TODO: when migrating to QOpenGLWidget
QOpenGLFunctions *glFunctions = QOpenGLContext::currentContext()->functions(); QOpenGLFunctions *glFunctions = QOpenGLContext::currentContext()->functions();
@ -2825,12 +2849,12 @@ void GLScope::connectTimer(const QTimer& timer)
void GLScope::cleanup() void GLScope::cleanup()
{ {
makeCurrent(); //makeCurrent();
m_glShaderSimple.cleanup(); m_glShaderSimple.cleanup();
m_glShaderBottom1Scale.cleanup(); m_glShaderBottom1Scale.cleanup();
m_glShaderBottom2Scale.cleanup(); m_glShaderBottom2Scale.cleanup();
m_glShaderLeft1Scale.cleanup(); m_glShaderLeft1Scale.cleanup();
m_glShaderPowerOverlay.cleanup(); m_glShaderPowerOverlay.cleanup();
doneCurrent(); //doneCurrent();
} }