diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2012-05-29 15:23:25 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-05 18:48:00 +0200 |
commit | e1774d202912b5d053872f242c61d964a5d69450 (patch) | |
tree | 2db13710c7d5979e5b49639b9ed5ef3f566a2beb /src/plugins | |
parent | 7d28f7772cd8f5aad63359ed0b9c57c12923dc85 (diff) |
Verify the surfaceType before activating the GL context
Verify that the surfaceType() of the QPlatformContext is of type
OpenGLSurface before making the context active. Make it possible
to get the QSurface from a QPlatformSurface, make QPlatformWindow
use that to access the QWindow. Remove the setSurfaceType call from
the eglfs plugin as this hiding a problem.
Change-Id: I08906da052e066bb1f1f042030643c6389ab17d7
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaglcontext.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmscontext.cpp | 2 | ||||
-rw-r--r-- | src/plugins/platforms/openwfd/qopenwfdglcontext.cpp | 2 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxglcontext.cpp | 2 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsglcontext.cpp | 3 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qglxintegration.cpp | 2 |
6 files changed, 12 insertions, 1 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm index 637678c19e..0292e02ff1 100644 --- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm +++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm @@ -86,6 +86,8 @@ void QCocoaGLContext::swapBuffers(QPlatformSurface *surface) bool QCocoaGLContext::makeCurrent(QPlatformSurface *surface) { + Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface); + QCocoaAutoReleasePool pool; QWindow *window = static_cast<QCocoaWindow *>(surface)->window(); diff --git a/src/plugins/platforms/kms/qkmscontext.cpp b/src/plugins/platforms/kms/qkmscontext.cpp index e5fd10af64..85e0edeed7 100644 --- a/src/plugins/platforms/kms/qkmscontext.cpp +++ b/src/plugins/platforms/kms/qkmscontext.cpp @@ -80,6 +80,8 @@ bool QKmsContext::isValid() const bool QKmsContext::makeCurrent(QPlatformSurface *surface) { + Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface); + EGLDisplay display = m_device->eglDisplay(); QPlatformWindow *window = static_cast<QPlatformWindow *>(surface); diff --git a/src/plugins/platforms/openwfd/qopenwfdglcontext.cpp b/src/plugins/platforms/openwfd/qopenwfdglcontext.cpp index 1304b9aad8..a7a6b11f2c 100644 --- a/src/plugins/platforms/openwfd/qopenwfdglcontext.cpp +++ b/src/plugins/platforms/openwfd/qopenwfdglcontext.cpp @@ -57,6 +57,8 @@ QSurfaceFormat QOpenWFDGLContext::format() const bool QOpenWFDGLContext::makeCurrent(QPlatformSurface *surface) { + Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface); + EGLDisplay display = mWfdDevice->eglDisplay(); EGLContext context = mWfdDevice->eglContext(); if (!eglMakeCurrent(display,EGL_NO_SURFACE,EGL_NO_SURFACE,context)) { diff --git a/src/plugins/platforms/qnx/qqnxglcontext.cpp b/src/plugins/platforms/qnx/qqnxglcontext.cpp index 593180019d..0b030bd5fe 100644 --- a/src/plugins/platforms/qnx/qqnxglcontext.cpp +++ b/src/plugins/platforms/qnx/qqnxglcontext.cpp @@ -205,6 +205,8 @@ bool QQnxGLContext::makeCurrent(QPlatformSurface *surface) { qGLContextDebug() << Q_FUNC_INFO; + Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface); + // Set current rendering API EGLBoolean eglResult = eglBindAPI(EGL_OPENGL_ES_API); if (eglResult != EGL_TRUE) { diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp index 2528ad949f..cabc5974eb 100644 --- a/src/plugins/platforms/windows/qwindowsglcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp @@ -1042,6 +1042,9 @@ bool QWindowsGLContext::makeCurrent(QPlatformSurface *surface) if (QWindowsContext::verboseGL > 1) qDebug("%s context=%p contexts=%d", __FUNCTION__, this, m_windowContexts.size()); #endif // DEBUG_GL + + Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface); + // Do we already have a DC entry for that window? QWindowsWindow *window = static_cast<QWindowsWindow *>(surface); const HWND hwnd = window->handle(); diff --git a/src/plugins/platforms/xcb/qglxintegration.cpp b/src/plugins/platforms/xcb/qglxintegration.cpp index 0144caae3d..cac7018e47 100644 --- a/src/plugins/platforms/xcb/qglxintegration.cpp +++ b/src/plugins/platforms/xcb/qglxintegration.cpp @@ -103,7 +103,7 @@ QGLXContext::~QGLXContext() bool QGLXContext::makeCurrent(QPlatformSurface *surface) { - Q_ASSERT(surface); + Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface); GLXDrawable glxDrawable = static_cast<QXcbWindow *>(surface)->xcb_window(); |