diff options
-rw-r--r-- | src/quick/scenegraph/qsgwindowsrenderloop.cpp | 13 |
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. |