Abort rendering when QOpenGLContext::create/makeCurrent fails.
authorGunnar Sletta <gunnar.sletta@digia.com>
Wed, 13 Mar 2013 06:36:30 +0000 (07:36 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 13 Mar 2013 11:07:36 +0000 (12:07 +0100)
Task-number: QTBUG-30158
Change-Id: Ic8239fe6f074c989e4474d46042e1a82796b4908
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>

src/quick/scenegraph/qsgrenderloop.cpp

index 85ef549..a55658b 100644 (file)
@@ -245,20 +245,28 @@ void QSGGuiThreadRenderLoop::renderWindow(QQuickWindow *window)
         return;
     }
 
+    bool current = false;
+
     if (!gl) {
         gl = new QOpenGLContext();
         gl->setFormat(masterWindow->requestedFormat());
-        gl->create();
-        if (!gl->makeCurrent(masterWindow))
-            qWarning("QQuickWindow: makeCurrent() failed...");
-        sg->initialize(gl);
+        if (!gl->create()) {
+            delete gl;
+            gl = 0;
+        }
+        current = gl->makeCurrent(masterWindow);
+        if (current)
+            sg->initialize(gl);
     } else {
-        gl->makeCurrent(masterWindow);
+        current = gl->makeCurrent(masterWindow);
     }
 
     bool alsoSwap = data.updatePending;
     data.updatePending = false;
 
+    if (!current)
+        return;
+
     QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window);
     cd->polishItems();