0

我知道要正确初始化和使用任何 Qt OpenGL 便利类,必须使用有效的当前上下文调用它们。因此,我将我的类设计为从我的重载QOpenGLWidget::initializeGL()函数初始化,其中文档说明上下文已创建并成为当前的(尽管没有帧缓冲区)。

但是,当initializeGL()尝试初始化我的一个子类MeshObject,特别是调用函数QOpenGLVertexArrayObject::create()时,程序崩溃并显示消息

Read access violation at 0x0 通过调试器,注意调用堆栈:

在此处输入图像描述

有对 QPainter::drawImage 的调用,这肯定会失败,因为没有帧缓冲区存在。

但是为什么QPainter::drawImage当我尝试创建一个 vertexArrayObject 时会发生调用?当然,这个功能不应该涉及到屏幕上的绘画。

虽然文档还指出 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  
4

0 回答 0