Qt 5.5 и OpenGL: QVertexArrayObject::create() вызывает QPainter::drawimage()?
Я понимаю, что для того, чтобы любой из удобных классов 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