glewInit与Qt5返回缺少GL版本
我一直在尝试使用Qt5给我一个OpenGL上下文,我相信它的确如此,但是当我尝试从initializeGL函数内调用glewInit()时,错误返回“缺少GL版本“,我被引导认为表明没有有效的上下文。我看到的解决方案是从initializeGL中调用glewInit(),但我已经这样做了。glewInit与Qt5返回缺少GL版本
我正在设置清晰的颜色并清除为暗红色,以验证gl呼叫是否正常工作,它们看起来像是。
有什么建议吗?
的main.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: %s\n", glewGetErrorString(err));
} else {
printf("Glew loaded; using version %s\n", 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);
}
东西告诉我,THI s是因为QGLWidget使用OpenGL版本1.0的默认QGLFormat(查看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);
因此,我改变构造这样: 'GLWidget :: GLWidget(QGLFormat楼QGLWidget来绘图*亲本): \t QGLWidget来绘图(父) { \t这 - > setFormat(F); }' 并按照您建议的实例化对象,但得到了相同的结果。 – AberrantWolf 2013-03-12 07:43:56
什么,当你调试到'glewInit'调用发生?它在哪里出错?另外,你使用核心OpenGL? – 2013-03-10 01:14:29
有没有找到答案呢? – jcoffland 2017-02-03 01:18:49
@jcoffland对不起,我从来没有这样做过,于是我转向该项目的非Qt解决方案(当时我认为SDL)。 – AberrantWolf 2017-02-03 05:13:53