我们正在将我们的项目从 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 没有任何前向定义的函数(所有函数指针都未定义)。代码已更新,以帮助审阅者不会失去焦点。