Точный сбой при отладке:
Низший остановился, потому что вызвал исключение. Остановлен в потоке 0 из-за: исключения на 0x7fed96c6cda, код: 0x0000005: нарушение прав доступа на чтение: 0x0, flags=0x0.
Затем исключение указывает на эту строку в приведенном ниже коде:
if(QOpenGLContext::currentContext()->isValid())
Приведенного ниже кода достаточно, чтобы воспроизвести исключение для меня. Создание подкласса класса QOpenGLWidget и вызов инициализации GL() подкласса один раз перед попыткой доступа к контексту не решает проблему.
#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLContext>
#include <QDebug>
void initialize(QOpenGLWidget * renderArea)
{
renderArea->makeCurrent();
if(QOpenGLContext::currentContext()->isValid())
{
qInfo() << "Valid.";
}
}
int main(int argc, char *argv[])
{
QSurfaceFormat format;
format.setVersion(3,3);
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);
QApplication a(argc, argv);
QOpenGLWidget * glw = new QOpenGLWidget;
initialize(glw);
return a.exec();
}