[Interest] Divining the opengl versions available
Boudewijn Rempt
boud at valdyas.org
Tue May 17 09:44:53 CEST 2016
Hi,
I need to know whether my users have opengl 2.1, 3.2 with compatibility profile
or 3.2 with core profile only, and I'm having a hard time getting that information
through Qt 5's opengl support. With Qt4, I used something like this:
if (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_1)
qDebug() << "OpenGL version 2.1 or higher is present.";
if (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_3_2)
qDebug() << "OpenGL version 3.1 or higher is present.";
But that module is deprecated, so I'm trying not to use it. But I cannot figure out
another way of checking the version by trying to create a vernsionfunctions object
and see if it's 0 or not:
QOpenGLContext *context = 0;
QSurfaceFormat format;
// 3.2 Compatibility
format.setMajorVersion( 3 );
format.setMinorVersion( 2 );
format.setProfile( QSurfaceFormat::CoreProfile );
setFormat( format );
// Create an OpenGL context
context = new QOpenGLContext;
context->setFormat( format );
context->create();
context->makeCurrent(this);
QOpenGLFunctions_3_2_Core *f0 = context->versionFunctions<QOpenGLFunctions_3_2_Core>();
version32Core = f0;
delete context;
// 3.2 Core
format.setProfile( QSurfaceFormat::CompatibilityProfile );
setFormat( format );
// Create an OpenGL context
context = new QOpenGLContext;
context->setFormat( format );
context->create();
context->makeCurrent(this);
QOpenGLFunctions_3_2_Compatibility *f1 = context->versionFunctions<QOpenGLFunctions_3_2_Compatibility>();
version32Compatibility = f1;
delete context;
// 2.1
format.setMajorVersion( 3 );
format.setMinorVersion( 2 );
setFormat( format );
// Create an OpenGL context
context = new QOpenGLContext;
context->setFormat( format );
context->create();
context->makeCurrent(this);
QOpenGLFunctions_2_1 *f2 = context->versionFunctions<QOpenGLFunctions_2_1>();
version32Core = f2;
delete context;
But that sometimes fails as well, on some Linux systems where I know that the system supports
3.2 + compatibility profile, I don't get the functions object either. What's the correct way
to see which version is supported?
Boudewijn
More information about the Interest
mailing list