带有Qt5的glewInit返回丢失的GL版本



我一直试图使用Qt5给我一个OpenGL上下文,我相信它是这样做的,但是当我尝试从initializeGL函数内调用glewInit()时,错误返回"丢失的GL版本",我被引导相信表明没有有效的上下文。我看到的解决方案是从initializeGL内部调用glewInit()…但是我已经在做了。

我将clear颜色和clear设置为暗红色,以验证gl调用正在工作,它们看起来是。

有什么建议吗?

c

#define QT_NO_OPENGL_ES_2
#include <QApplication>
#include "glwidget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    GLWidget w;
    w.show();
    return a.exec();
}

glwidget.h

#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <GL/glew.h>
#define QT_NO_OPENGL_ES_2
#include <QGLWidget>
class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit GLWidget(QGLWidget *parent = 0);
    ~GLWidget();
    QSize minimumSizeHint() const;
    QSize sizeHint() const;
protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);
};
#endif // GLWIDGET_H

glwidget.cpp

#include "glwidget.h"
GLWidget::GLWidget(QGLWidget *parent) :
    QGLWidget(parent)
{
}
GLWidget::~GLWidget() {}
QSize GLWidget::minimumSizeHint() const {
    return QSize(640, 480);
}
QSize GLWidget::sizeHint() const {
    return QSize(800, 600);
}
void GLWidget::initializeGL() {
    GLenum err = glewInit();
    if (GLEW_OK != err) {
        printf("GLEW error: %sn", glewGetErrorString(err));
    } else {
        printf("Glew loaded; using version %sn", glewGetString(GLEW_VERSION));
    }
    glClearColor(0.2f, 0, 0, 1.0f);
}
void GLWidget::resizeGL(int w, int h) {
}
void GLWidget::paintGL() {
    glClear( GL_COLOR_BUFFER_BIT );
}

有些东西告诉我这是因为QGLWidget的默认QGLFormat使用OpenGL 1.0版本(通过GLEW的更改日志,似乎他们声称完全支持的最早版本是1.5)。请尝试重写需要QGLFormat的QGLWidget构造函数,并向其传递一个使用目标版本的QGLFormat实例。

对小部件的调用应该看起来像这样:

QGLFormat format;
format.setVersion(3,3); // or whatever version you are targeting.
format.setDoubleBuffer(true);
GLWidget * widget = new GLWidget(format);

相关内容

  • 没有找到相关文章

最新更新