我目前在Windows上使用Qt 5.8获取调试上下文时遇到问题。

我正在使用Qt 5.8编写一个小的OpenGL应用程序,使用声明为这样的查看器类

class GLViewer3DModel : public QOpenGLWidget, protected QOpenGLFunctions
{
    //...
};

在QApplication初始化之前,我的main.cpp文件使用以下代码:
 QSurfaceFormat format;
 format.setOption(QSurfaceFormat::DebugContext);
 format.setProfile(QSurfaceFormat::CoreProfile);
 QSurfaceFormat::setDefaultFormat(format);

在3D查看器的构造函数中,QSurfaceFormat::DebugContext选项似乎已正确设置。但是,如果我在initializeGL覆盖中再次测试了此代码,则以下代码
void GLViewer3DModel::initializeGL()
{
    initializeOpenGLFunctions();

    QSurfaceFormat fmt = format();
    bool hasDebug = fmt.testOption(QSurfaceFormat::DebugContext);
    std::cout << "STILL DEBUG? " << hasDebug << std::endl;
}

打印“STILL DEBUG?0”,因此由于某种原因格式已更改。
我可以做些什么来使调试上下文起作用?我很乐意使用QOpenGLDebugLogger查看可能出问题的地方。

FWIW,我的系统支持GL_KHR_debug扩展名。

最佳答案

尝试将OpenGL版本设置为大于4.1,因为我认为这是调试的核心。默认构造的QSurfaceFormat请求不支持调试的GL 2.0。看看你得到什么。

另外,尝试初始化记录器,看看它会吐出什么来

07-24 14:31