QNX: Recreate EGL surface when the window geometry changes
authorKevin Ottens <kevin.ottens.qnx@kdab.com>
Tue, 22 May 2012 11:08:27 +0000 (13:08 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 24 May 2012 12:47:20 +0000 (14:47 +0200)
Change-Id: Ic578e9c3f4d8f70bcac0d95f59942cd2724aee51
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
src/plugins/platforms/qnx/qqnxwindow.cpp

index dd5d0c4..6387193 100644 (file)
@@ -188,6 +188,22 @@ void QQnxWindow::setGeometry(const QRect &rect)
         qFatal("QQnxWindow: failed to set window source size, errno=%d", errno);
     }
 
+    if (m_platformOpenGLContext != 0 && bufferSize() != rect.size()) {
+        bool restoreCurrent = false;
+
+        if (m_platformOpenGLContext->isCurrent()) {
+            m_platformOpenGLContext->doneCurrent();
+            restoreCurrent = true;
+        }
+
+        m_platformOpenGLContext->destroySurface();
+        setBufferSize(rect.size());
+        m_platformOpenGLContext->createSurface(this);
+
+        if (restoreCurrent)
+            m_platformOpenGLContext->makeCurrent(this);
+    }
+
     QWindowSystemInterface::handleGeometryChange(window(), rect);
 
     // Now move all children.