0

我们正在将我们的项目从 Qt 4.8 迁移到 5.4。我们在多个线程中使用多个上下文。为此,我们使用 GLEW MX(我们将所需的上下文设为当前上下文,然后在 GLEWContextStruct 的本地实例上调用 glewInit())。

我正在尝试将 QGLWidget 和 QGLContext 更改为 QOpenGLWidget 和 QOpenGLContext 但我最终无法再初始化 glew。GLEW 不会返回错误,但 glGetError() 会。

我确实安装了带有 OpenGL 版本的 Qt 5.4 64。

这是减少到最低限度的代码:

#include <QtWidgets/QApplication>

#define GLEW_MX
#define GLEW_STATIC
#include <GL/glew.h>

#include <qopenglcontext.h>
#include <qwindow.h>

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

    bool errQt;
    int errGlew;
    GLenum errorGL;

    QSurfaceFormat requestedFormat;
    requestedFormat.setVersion(3, 3);
    requestedFormat.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);

    //Creates the QGLWidget using the current context:
    QWindow window;
    window.setSurfaceType(QSurface::OpenGLSurface);
    window.setFormat(requestedFormat);
    window.create();

    //Create context
    QOpenGLContext context;
    context.setFormat(requestedFormat);
    errQt = context.create(); //true

    //Bind context
    context.makeCurrent(&window);

    //Glew context creation
    GLEWContext* pCtx = new GLEWContext; //All forwards undefined

    //Release context
    context.doneCurrent();

    return 1;
}

有什么建议吗?GLEW 可以使用 Qt5.4 吗?

编辑 1:

看来问题与Qt无关。创建的 GLEWContext 没有任何前向定义的函数(所有函数指针都未定义)。代码已更新,以帮助审阅者不会失去焦点。

4

2 回答 2

0

I use glewInit() with Qt 5.4 in my project, but I'm using QWindow as my base class, not QOpenGLWidget.

In my ctor I do this:

QRiftWindow::QRiftWindow() {
 setSurfaceType(QSurface::OpenGLSurface);
 QSurfaceFormat format;
 format.setDepthBufferSize(16);
 format.setStencilBufferSize(8);
 format.setVersion(4, 3);
 format.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);
 setFormat(format);

 m_context = new QOpenGLContext;
 m_context->setFormat(format);
 m_context->create();
 ...

I execute my OpenGL work on a separate thread. Once the thread has started I call an setup method on my class

m_context->makeCurrent(this);
glewExperimental = true;
glewInit();
glGetError();

I've previously done this exact same setup with OpenGL 3.3 and had no issues.

于 2015-01-24T00:28:47.183 回答
0

你实际上应该得到一个警告:

#warning qopenglfunctions.h 与 GLEW 不兼容,GLEW 定义将未定义

#warning 要将 GLEW 与 Qt 一起使用,请不要包含 glew.h 或在 glew.h 之后

您的“qopenglcontext.h”包括 . 要回答您的问题,您可以使用 Qt + GLEW,但您不能轻易地将 Qt-opengl 与 GLEW 混淆。

于 2015-03-18T13:42:10.287 回答