From 12eab91627816d2f59a53f01dc33a5577b61db31 Mon Sep 17 00:00:00 2001
From: Gunnar Sletta <gunnar.sletta@digia.com>
Date: Tue, 12 Nov 2013 16:53:47 +0100
Subject: [PATCH] Safely abort when we don't succeed in creating a GL context.

Task-number: QTBUG-33363

Change-Id: Ia2b0c329157786cb4ec703989f12d2fdb1ce6bc8
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
---
 src/quick/scenegraph/qsgrenderloop.cpp        |  1 +
 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 0cc2a15c51..06a112b0a4 100644
--- a/src/quick/scenegraph/qsgrenderloop.cpp
+++ b/src/quick/scenegraph/qsgrenderloop.cpp
@@ -275,6 +275,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 d5d12bd138..bcd4f390b4 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) {
-- 
GitLab