Introduce new platform capability ThreadedOpenGL.
authorSamuel Rødal <samuel.rodal@nokia.com>
Thu, 25 Aug 2011 18:19:44 +0000 (20:19 +0200)
committerLars Knoll <lars.knoll@nokia.com>
Fri, 26 Aug 2011 07:19:09 +0000 (09:19 +0200)
Lets the platform plugin advertise whether it's safe to use OpenGL from
a different thread. With XCB we only advertise this if we have a
reasonably new XCB libary, as older versions suffer from the
xcb_wait_for_reply() blocking bug, which cause GL rendering in a
separate to stall when using Mesa drivers.

Change-Id: I4829df7e583a1c8aed218ae13a159d21266cc594
Reviewed-on: http://codereview.qt.nokia.com/3613
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
src/gui/kernel/qplatformintegration_qpa.h
src/plugins/platforms/cocoa/qcocoaintegration.mm
src/plugins/platforms/eglfs/qeglfsintegration.cpp
src/plugins/platforms/kms/qkmsintegration.cpp
src/plugins/platforms/wayland/qwaylandintegration.cpp
src/plugins/platforms/windows/qwindowsintegration.cpp
src/plugins/platforms/xcb/qxcbintegration.cpp

index 3c90360..97811d4 100644 (file)
@@ -69,7 +69,8 @@ class Q_GUI_EXPORT QPlatformIntegration
 public:
     enum Capability {
         ThreadedPixmaps = 1,
-        OpenGL = 2
+        OpenGL = 2,
+        ThreadedOpenGL = 3
     };
 
     virtual ~QPlatformIntegration() { }
index 3e03b1a..1ea4561 100644 (file)
@@ -103,6 +103,7 @@ bool QCocoaIntegration::hasCapability(QPlatformIntegration::Capability cap) cons
     switch (cap) {
     case ThreadedPixmaps: return true;
     case OpenGL : return true;
+    case ThreadedOpenGL : return true;
     default: return QPlatformIntegration::hasCapability(cap);
     }
 }
index 442acdf..8b2346b 100644 (file)
@@ -70,6 +70,8 @@ bool QEglFSIntegration::hasCapability(QPlatformIntegration::Capability cap) cons
 {
     switch (cap) {
     case ThreadedPixmaps: return true;
+    case OpenGL: return true;
+    case ThreadedOpenGL: return true;
     default: return QPlatformIntegration::hasCapability(cap);
     }
 }
index 18e305d..e67f0ec 100644 (file)
@@ -86,6 +86,7 @@ bool QKmsIntegration::hasCapability(QPlatformIntegration::Capability cap) const
     switch (cap) {
     case ThreadedPixmaps: return true;
     case OpenGL: return true;
+    case ThreadedOpenGL: return true;
     default: return QPlatformIntegration::hasCapability(cap);
     }
 }
index eefd86d..3ed5f16 100644 (file)
@@ -89,6 +89,8 @@ bool QWaylandIntegration::hasCapability(QPlatformIntegration::Capability cap) co
 #else
         return false;
 #endif
+    case ThreadedOpenGL:
+        return hasCapability(OpenGL);
     default: return QPlatformIntegration::hasCapability(cap);
     }
 }
index 70c6c0b..fdcc05a 100644 (file)
@@ -167,6 +167,10 @@ bool QWindowsIntegration::hasCapability(QPlatformIntegration::Capability cap) co
     switch (cap) {
     case ThreadedPixmaps:
         return true;
+    case OpenGL:
+        return true;
+    case ThreadedOpenGL:
+        return true;
     default:
         return QPlatformIntegration::hasCapability(cap);
     }
index 75936b2..54394c9 100644 (file)
@@ -159,6 +159,12 @@ bool QXcbIntegration::hasCapability(QPlatformIntegration::Capability cap) const
     switch (cap) {
     case ThreadedPixmaps: return true;
     case OpenGL: return true;
+    case ThreadedOpenGL:
+#ifdef XCB_POLL_FOR_QUEUED_EVENT
+        return true;
+#else
+        return false;
+#endif
     default: return QPlatformIntegration::hasCapability(cap);
     }
 }