【发布时间】:2020-11-09 01:38:22
【问题描述】:
我正在尝试将QOpenGLWidget 添加到我的QGraphicsScene,但是当我调用initializeOpenGLFunctions() 时应用程序崩溃了。我很确定OpenGLView 的上下文为空,这就是为什么它崩溃(不提供日志)的原因有两个:
- 当我打印它时,它输出
0x0 - 当我尝试启用
QOpenGLDebugLogger时,它会输出没有当前上下文。
我认为 QOpenGLWidget 会有一个开箱即用的 OpenGLContext。知道为什么没有设置上下文吗?我在初始化过程中遗漏了什么吗?
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setVersion(3, 2);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setOption(QSurfaceFormat::DebugContext);
QSurfaceFormat::setDefaultFormat(format);
OpenGLView view = new OpenGLView();
标题
class OpenGLView : public QOpenGLWidget, protected QOpenGLFunctions
{
}
#include "OpenGLView.h"
OpenGLView::OpenGLView(QWidget *parent) : QOpenGLWidget(parent) {
initializeGL();
}
void OpenGLView::initializeGL() {
initializeOpenGLFunctions(); // crashes
// ...
}
void OpenGLView::paintGL() {
// ...
}
void OpenGLView::resizeGL(int w, int h) {
// ...
}
【问题讨论】:
-
可能是很多事情,比如不支持 GL 3.2
-
我确实支持 GL 3.2。除了 QT 之外,该版本一直在使用 OpenGL。
-
OpenGLView不继承QOpenGLFunctions。initializeOpenGLFunctions()函数在哪里? -
确实如此,我更新了我的代码