我希望能够在MacOS上使用QOpenGLDebugLogger功能。

我知道我必须创建一个特定的QOpenGLContext,所以这是我的自定义QOpenGLWidget类构造函数中的代码:

QSurfaceFormat format;
format.setMajorVersion(3);
format.setMinorVersion(2);
format.setOption(QSurfaceFormat::DebugContext);
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);

不幸的是,它对我的​​QOpenGLWidget创建的当前上下文没有影响。我的initializeGL()重写方法中的以下代码输出false:
qDebug() << QOpenGLContext::currentContext()->hasExtension(QByteArrayLiteral("GL_KHR_debug"));

我注意到QOpenGLContext版本似乎总是2.1:
qDebug() << QOpenGLContext::currentContext()->format().majorVersion() << QOpenGLContext::currentContext()->format().minorVersion();

知道为什么在构造函数中设置格式无效吗?

最佳答案

QOpenGLWidget的构造函数请求特定OpenGL上下文版本的正确方法是调用QOpenGLWidget::setFormat(..)方法。另请注意,KHR_DEBUG是在OpenGL 4.3核心配置文件中引入的,因此在此之前可能无法使用此功能。 OpenGL 4.3调试上下文的正确设置代码为

QSurfaceFormat format;
format.setMajorVersion(4);
format.setMinorVersion(3);
format.setOption(QSurfaceFormat::DebugContext);
format.setProfile(QSurfaceFormat::CoreProfile);
setFormat(format);

关于c++ - 在MacOS上使用QOpenGLDebugLogger,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47907526/

10-12 13:07