【发布时间】:2015-06-01 00:36:31
【问题描述】:
我有一些用 GLEW 创建的旧 OpenGL 代码。我正在尝试将此代码移植到 Qt 5.4 中,旧代码包含 Mesh、Shader 和 Texture 类。
到目前为止,我在 Qt 中拥有的是默认主窗口和一个从 QOpenGLWidget 和 QOpenGLFunctions 继承的 Visualizer 类。通过将MainWindow 设置为Visualizer 的父级,我可以将小部件显示为黑框。
为了编译使用 glGenVertexArrays(); 之类的函数的旧 OpenGL 代码,我让这些类继承自 QOpenGLFunctions_3_3_Core。我还会在必要时调用initializeOpenGLFunctions(),例如在Visualizer 类的initializeGL() 内部以及Mesh、Shader 和Texture 的构造函数中。
这一切都编译得很好。但是,当我运行该程序时,它会在尝试创建 Mesh 对象时调用函数 glGenVertexArrays(); 时崩溃。
我猜有某种形式的内存违规。我是否必须在 Qt 中为 QOpenGLWidget 手动设置 OpenGL 上下文?
如何使用 Qt 正确设置 OpenGL 3.3,以便我可以使用 QOpenGLWidget 来渲染 OpenGL 内容并使用所有这些 OpenGL 函数,例如 glGenVertexArrays()?
【问题讨论】: