aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/scenegraph/qsgwindowsrenderloop.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/quick/scenegraph/qsgwindowsrenderloop.cpp b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
index 9f74e259e3..318bb28f19 100644
--- a/src/quick/scenegraph/qsgwindowsrenderloop.cpp
+++ b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
@@ -401,8 +401,17 @@ void QSGWindowsRenderLoop::renderWindow(QQuickWindow *window)
if (!d->isRenderable())
return;
- if (!m_gl->makeCurrent(window))
- return;
+ if (!m_gl->makeCurrent(window)) {
+ // Check for context loss.
+ if (!m_gl->isValid()) {
+ d->cleanupNodesOnShutdown();
+ m_rc->invalidate();
+ if (m_gl->create() && m_gl->makeCurrent(window))
+ m_rc->initialize(m_gl);
+ else
+ return;
+ }
+ }
d->flushDelayedTouchEvent();
// Event delivery or processing has caused the window to stop rendering.