QOpenGLWidget在Qt中设置OpenGL
Setting Up OpenGL in Qt for QOpenGLWidget
我用GLEW创建了一些旧的OpenGL代码。我正试图将此代码移植到Qt 5.4中,旧代码包含Mesh
, Shader
和Texture
类。
我在Qt到目前为止,是默认的主窗口和Visualizer
类,从QOpenGLWidget
和QOpenGLFunctions
继承。通过将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()
?
我想到了一个有趣的解决方案。也许这是显而易见的,但我一开始并没有看到。我基本上在一个虚拟类GL
中创建了一个QOpenGLFunctions_3_3_Core
类型的静态变量,并在需要OpenGL函数时在整个代码中使用它。
class GL{
public:
static QOpenGLFunctions_3_3_Core funcs;
}
...
class Visualizer : public QOpenGLWidget{
...
void initializeGL(){
GL::funcs.initializeOpenGLFunctions();
}
...
}
...
// Example usage
GL::funcs.glGenVertexArrays(1, &id);
GL::funcs.glClearColor(1.f, 1.f, 1.f, 1.f);
相关文章:
- 如何在glfw中为OpenGL设置核心配置文件上下文?
- 了解现代OpenGL中的代码绘图.OBJ并设置不同的位置
- 使用Visual Studio Code和CMake调试OpenGL(使用GLEW&GLFW),无法设置断点
- 在Visual Studio 2017中设置OpenGL
- 设置OpenGL FBO以渲染Cubemap深度纹理时,为什么我会得到不完整的附件
- 在 Mac OS X 上使用 CGL 设置 OpenGL 上下文
- 如何设置 OpenGL 版本
- 在 Windows 上设置 OpenGL 库
- 在闪存驱动器上为 Windows C++ Code blocks设置 OpenGL
- 在窗口中的 NetBeans 上设置 OpenGL
- 如何在c++中使用XCode 4.2设置OpenGL项目?
- 为多个显示器设置OpenGL
- 设置 OpenGL - 它不起作用
- 设置OpenGL绘图的坐标系统
- 设置OpenGL中窗口的大小
- 设置opengl视图和投影转换
- 设置OpenGL时遇到问题
- 如何使用GLM设置OpenGL/C++项目
- QOpenGLWidget在Qt中设置OpenGL
- 在Ubuntu上使用GLFW设置OpenGL NetBeans项目