diff --git a/src/waveform/waveformwidgetfactory.cpp b/src/waveform/waveformwidgetfactory.cpp index b92ffd16d08..8c4289da832 100644 --- a/src/waveform/waveformwidgetfactory.cpp +++ b/src/waveform/waveformwidgetfactory.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -71,6 +72,8 @@ bool shouldRenderWaveform(WaveformWidgetAbstract* pWaveformWidget) { return glw->shouldRender(); } + +const QRegularExpression openGLVersionRegex(QStringLiteral("^(\\d+)\\.(\\d+).*$")); } // anonymous namespace /////////////////////////////////////////// @@ -142,13 +145,27 @@ WaveformWidgetFactory::WaveformWidgetFactory() reinterpret_cast(glFunctions->glGetString(GL_VENDOR)))); QString rendererString = QString(QLatin1String( reinterpret_cast(glFunctions->glGetString(GL_RENDERER)))); - qDebug() << versionString << vendorString << rendererString; - - // note: the requested version has been set in WGLWidget's OpenGLWindow constructor - const int majorVersion = context->surface()->format().majorVersion(); - const int minorVersion = context->surface()->format().minorVersion(); + qDebug().noquote() << QStringLiteral( + "OpenGL driver version string \"%1\", vendor \"%2\", " + "renderer \"%3\"") + .arg(versionString, vendorString, rendererString); + + GLint majorVersion, minorVersion = GL_INVALID_ENUM; + glFunctions->glGetIntegerv(GL_MAJOR_VERSION, &majorVersion); + glFunctions->glGetIntegerv(GL_MINOR_VERSION, &minorVersion); + if (majorVersion == GL_INVALID_ENUM || minorVersion == GL_INVALID_ENUM) { + // GL_MAJOR/MINOR_VERSION are not supported below OpenGL 3.0, so + // parse GL_VERSION string as a fallback. + // https://www.khronos.org/opengl/wiki/OpenGL_Context#OpenGL_version_number + auto match = openGLVersionRegex.match(versionString); + DEBUG_ASSERT(match.hasMatch()); + majorVersion = match.captured(1).toInt(); + minorVersion = match.captured(2).toInt(); + } - qDebug() << "QOpenGLContext surface format version:" << majorVersion << minorVersion; + qDebug().noquote() + << QStringLiteral("Supported OpenGL version: %1.%2") + .arg(QString::number(majorVersion), QString::number(minorVersion)); m_openGLShaderAvailable = QOpenGLShaderProgram::hasOpenGLShaderPrograms(context);