据我所知,要正确初始化和使用任何Qt OpenGL便捷类,必须使用有效的当前上下文调用它们。所以,我设计的类是从我重载的QOpenGLWidget::initializeGL()
函数初始化的,其中文档声明上下文已创建并且是最新的(尽管没有帧缓冲)。
但是,当initializeGL()
尝试初始化我的一个子类MeshObject
,特别是调用函数QOpenGLVertexArrayObject::create()
时,程序会崩溃并显示消息
Read access violation at 0x0
使用调试器,请注意调用堆栈:
正在调用QPainter :: drawImage,由于没有帧缓冲存在,因此肯定会失败。
但是当我尝试创建vertexArrayObject时,为什么会发生QPainter::drawImage
调用?当然,这个功能应该不涉及到画面的绘画。
尽管文档还指出QOpenGLVertexArrayObjects只能在某些OpenGL ES 2.0平台上运行,vbuffer.create()
会导致完全相同的情况发生,并且我已经在这台机器上使用了QOpenGLVertexArrayObjects
在以前的项目上完全没有问题。
完成堆栈跟踪:
0 QPainter::drawImage Qt5Guid 0x58292a56
1 QPainter::drawImage Qt5Guid 0x5829203c
2 MeshState::initBuffers meshobject.cpp 71 0x2fb793
3 SceneObject::setupObjects sceneobject.cpp 18 0x2fa1eb
4 SceneObject::initialize sceneobject.cpp 12 0x2fa12f
5 OpenGLWidget::initializeGL openglwidget.cpp 34 0x2f8ecf
6 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x587a9859
7 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x587a86da
8 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x58770104
9 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x587a8850
10 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5872548e
11 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x587235f5
12 QSortFilterProxyModel::mapToSource Qt5Cored 0x591b6b47
13 QSortFilterProxyModel::mapToSource Qt5Cored 0x591bf379
14 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5877a3a3
15 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5877a618
16 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5876be41
17 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5876c0bb
18 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x58779441
19 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5877a62e
20 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5876be41
21 QAbstractScrollArea::setHorizontalScrollBar Qt5Widgetsd 0x5876c0bb
22 main main.cpp 10 0x2f3419
23 WinMain qtmain_win.cpp 113 0x2fdcdd
24 __tmainCRTStartup crtexe.c 618 0x2fd0bf
25 WinMainCRTStartup crtexe.c 466 0x2fce7d
26 BaseThreadInitThunk KERNEL32 0x772e38f4
27 __RtlUserThreadStart ntdll 0x77865de3
28 _RtlUserThreadStart ntdll 0x77865dae