Qt 5.6,Windows 7 - OpenGL错误1286(“不支持的帧缓冲格式”),1280 in qopenglframebufferobject

时间:2016-08-07 13:28:27

标签: c++ qt opengl

我是OpenGL的新手,在解决以下错误方面让我有点瘫痪。

以下是重现问题的最小代码:

#include <GL/glew.h>

#include <QtWidgets/QApplication>

#include <QOpenGLWidget>
#include <QSurfaceFormat>

#include <GL/GLU.h>

#include <iostream>

using namespace std;

class OGLErrorTest : public QOpenGLWidget
{
public:
    OGLErrorTest(QWidget *p = nullptr) : QOpenGLWidget(p) 
    {
        QSurfaceFormat sformat;
        sformat.setProfile(QSurfaceFormat::CompatibilityProfile);
        sformat.setMajorVersion(2);
        sformat.setMinorVersion(1);
        sformat.setDepthBufferSize(0);
        sformat.setAlphaBufferSize(0);
        sformat.setRedBufferSize(8);
        sformat.setGreenBufferSize(8);
        sformat.setBlueBufferSize(8);
        sformat.setStencilBufferSize(0);
        sformat.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
        sformat.setStereo(false);

        setFormat(sformat);
    }

    ~OGLErrorTest() {}

protected:

    void initializeGL() 
    {
        glewExperimental = GL_TRUE;
        GLenum err = glewInit();

        if (err != GLEW_OK) {
            cout << "Failed to initialize GLEW" << endl;
            exit(-1);
        }

        const char *glv = (const char *)glGetString(GL_VERSION);
        glv = glv ? glv : "(unable to get OpenGL version)";
        cout << glv << endl;
    }

    void resizeGL(int w, int h) {}

    void paintGL() 
    {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0, 100, 0, 100);

        glColor3f(1.0f, 1.0f, 1.0f);
        glBegin(GL_LINES);
        glVertex2d(0, 0);
        glVertex2d(100, 100);
        glEnd();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    const char *qt_version = qVersion();
    qt_version = qt_version ? qt_version : "(unable to get qt version)";
    cout << qt_version << endl;

    OGLErrorTest w;
    w.show();
    return a.exec();
}

上述程序的控制台输出是:

5.6.0
2.1.0 - Build 8.15.10.2104
[opengl\qopenglframebufferobject.cpp line 538] OpenGL Error: 1286
QOpenGLFramebufferObject: Unsupported framebuffer format.
QOpenGLFramebufferObject: Unsupported framebuffer format.
[opengl\qopenglframebufferobject.cpp line 730] OpenGL Error: 1280

我的Qt版本是5.6.0,而OpenGL版本是2.1.0(我理解这是相当古老的)。我通过Visual Studio 2015在Windows 7上编译程序。如果您正在运行该程序,则必须与控制台子系统链接并在调试模式下编译它以使错误可见。

图像显示正确。没问题。

然而,我的问题是:我怎样才能摆脱两个OpenGL错误(1286,1280)?它看起来像Qt问题,还是看起来它可以通过(比如说)正确配置OpenGL上下文来消除?我认为Qt正在尝试使用我的硬件不支持的一些功能。如果是这种情况,我的问题是,我怎么能告诉Qt不要指望这些功能可用?

我尝试查看源代码(qopenglframebufferobject.cpp),但无法弄清楚可以采取哪些措施来修复错误。

0 个答案:

没有答案