diff options
author | Gunnar Sletta <gunnar.sletta@digia.com> | 2013-11-12 16:53:47 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-03 08:42:49 +0100 |
commit | d05671788d2a87ef93c7e368754b5106c5dbe733 (patch) | |
tree | 6dc9875cdbfb0136e3decaea15a2f2547afdc86e /src | |
parent | 17da877909a4a926ca3df764c3486568464f6bc4 (diff) |
Safely abort when we don't succeed in creating a GL context.
Task-number: QTBUG-33363
(cherry-picked from commit 12eab9162781)
Change-Id: Ia2b0c329157786cb4ec703989f12d2fdb1ce6bc8
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/scenegraph/qsgrenderloop.cpp | 1 | ||||
-rw-r--r-- | src/quick/scenegraph/qsgwindowsrenderloop.cpp | 13 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp index 9c39ef65f9..aa0d7b5a6c 100644 --- a/src/quick/scenegraph/qsgrenderloop.cpp +++ b/src/quick/scenegraph/qsgrenderloop.cpp @@ -277,6 +277,7 @@ void QSGGuiThreadRenderLoop::renderWindow(QQuickWindow *window) if (QSGContext::sharedOpenGLContext()) gl->setShareContext(QSGContext::sharedOpenGLContext()); if (!gl->create()) { + qWarning("QtQuick: failed to create OpenGL context"); delete gl; gl = 0; } else { diff --git a/src/quick/scenegraph/qsgwindowsrenderloop.cpp b/src/quick/scenegraph/qsgwindowsrenderloop.cpp index 03ee4992bc..0c128d5cae 100644 --- a/src/quick/scenegraph/qsgwindowsrenderloop.cpp +++ b/src/quick/scenegraph/qsgwindowsrenderloop.cpp @@ -180,13 +180,20 @@ void QSGWindowsRenderLoop::show(QQuickWindow *window) m_gl->setFormat(window->requestedFormat()); if (QSGContext::sharedOpenGLContext()) m_gl->setShareContext(QSGContext::sharedOpenGLContext()); - m_gl->create(); + bool created = m_gl->create(); + if (!created) { + qWarning("QtQuick: failed to create OpenGL context"); + delete m_gl; + m_gl = 0; + return; + } QSG_RENDER_TIMING_SAMPLE(time_created); RLDEBUG(" - making current"); - m_gl->makeCurrent(window); + bool current = m_gl->makeCurrent(window); RLDEBUG(" - initializing SG"); QSG_RENDER_TIMING_SAMPLE(time_current); - QQuickWindowPrivate::get(window)->context->initialize(m_gl); + if (current) + m_rc->initialize(m_gl); #ifndef QSG_NO_RENDER_TIMING if (qsg_render_timing) { |