diff -Nru qtubuntu-0.53+14.04.20140304/debian/changelog qtubuntu-0.53+14.04.20140318/debian/changelog --- qtubuntu-0.53+14.04.20140304/debian/changelog 2014-03-18 20:25:14.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/debian/changelog 2014-03-18 20:25:15.000000000 +0000 @@ -1,3 +1,13 @@ +qtubuntu (0.53+14.04.20140318-0ubuntu1) trusty; urgency=low + + [ Chris Coulson ] + * Pass the EGL share context to eglCreateContext (lp: #1278470) (LP: + #1278470) + * Implement QPlatformNativeInterface::nativeResourceForScreen() for + accessing the native display handle (lp: #1278868) (LP: #1278868) + + -- Ubuntu daily release Tue, 18 Mar 2014 20:20:51 +0000 + qtubuntu (0.53+14.04.20140304-0ubuntu1) trusty; urgency=low * New rebuild forced diff -Nru qtubuntu-0.53+14.04.20140304/src/platforms/base/context.cc qtubuntu-0.53+14.04.20140318/src/platforms/base/context.cc --- qtubuntu-0.53+14.04.20140304/src/platforms/base/context.cc 2014-03-04 12:50:34.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/src/platforms/base/context.cc 2014-03-18 20:20:34.000000000 +0000 @@ -46,7 +46,8 @@ #endif } -QUbuntuBaseContext::QUbuntuBaseContext(QUbuntuBaseScreen* screen) { +QUbuntuBaseContext::QUbuntuBaseContext(QUbuntuBaseScreen* screen, + QUbuntuBaseContext* share) { DASSERT(screen != NULL); eglDisplay_ = screen->eglDisplay(); screen_ = screen; @@ -58,7 +59,8 @@ attribs.append(EGL_NONE); ASSERT(eglBindAPI(api_in_use()) == EGL_TRUE); ASSERT((eglContext_ = eglCreateContext( - eglDisplay_, screen->eglConfig(), EGL_NO_CONTEXT, attribs.constData())) != EGL_NO_CONTEXT); + eglDisplay_, screen->eglConfig(), share ? share->eglContext() : EGL_NO_CONTEXT, + attribs.constData())) != EGL_NO_CONTEXT); DLOG("QUbuntuBaseContext::QUbuntuBaseContext (this=%p, screen=%p)", this, screen); } diff -Nru qtubuntu-0.53+14.04.20140304/src/platforms/base/context.h qtubuntu-0.53+14.04.20140318/src/platforms/base/context.h --- qtubuntu-0.53+14.04.20140304/src/platforms/base/context.h 2014-03-04 12:50:34.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/src/platforms/base/context.h 2014-03-18 20:20:34.000000000 +0000 @@ -21,7 +21,8 @@ class QUbuntuBaseContext : public QPlatformOpenGLContext { public: - QUbuntuBaseContext(QUbuntuBaseScreen* screen); + QUbuntuBaseContext(QUbuntuBaseScreen* screen, + QUbuntuBaseContext* share); ~QUbuntuBaseContext(); // QPlatformOpenGLContext methods. diff -Nru qtubuntu-0.53+14.04.20140304/src/platforms/base/integration.cc qtubuntu-0.53+14.04.20140318/src/platforms/base/integration.cc --- qtubuntu-0.53+14.04.20140304/src/platforms/base/integration.cc 2014-03-04 12:50:34.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/src/platforms/base/integration.cc 2014-03-18 20:20:34.000000000 +0000 @@ -88,7 +88,9 @@ QPlatformOpenGLContext* QUbuntuBaseIntegration::createPlatformOpenGLContext( QOpenGLContext* context) { DLOG("QUbuntuBaseIntegration::createPlatformOpenGLContext (this=%p, context=%p)", this, context); - return new QUbuntuBaseContext(static_cast(context->screen()->handle())); + return new QUbuntuBaseContext( + static_cast(context->screen()->handle()), + static_cast(context->shareHandle())); } QStringList QUbuntuBaseIntegration::themeNames() const { diff -Nru qtubuntu-0.53+14.04.20140304/src/platforms/base/native_interface.cc qtubuntu-0.53+14.04.20140318/src/platforms/base/native_interface.cc --- qtubuntu-0.53+14.04.20140304/src/platforms/base/native_interface.cc 2014-03-04 12:50:34.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/src/platforms/base/native_interface.cc 2014-03-18 20:20:42.000000000 +0000 @@ -35,6 +35,7 @@ insert("egldisplay", QUbuntuBaseNativeInterface::EglDisplay); insert("eglcontext", QUbuntuBaseNativeInterface::EglContext); insert("nativeorientation", QUbuntuBaseNativeInterface::NativeOrientation); + insert("display", QUbuntuBaseNativeInterface::Display); } }; @@ -68,6 +69,22 @@ return NULL; } +void* QUbuntuBaseNativeInterface::nativeResourceForScreen( + const QByteArray& resourceString, QScreen* screen) { + DLOG("QUbuntuBaseNativeInterface::nativeResourceForScreen (this=%p, resourceString=%s, " + "screen=%p)", this, resourceString.constData(), screen); + const QByteArray kLowerCaseResource = resourceString.toLower(); + if (!ubuntuResourceMap()->contains(kLowerCaseResource)) + return NULL; + const ResourceType kResourceType = ubuntuResourceMap()->value(kLowerCaseResource); + if (kResourceType == QUbuntuBaseNativeInterface::Display) { + if (!screen) + screen = QGuiApplication::primaryScreen(); + return static_cast(screen->handle())->nativeDisplay(); + } else + return NULL; +} + void* QUbuntuBaseNativeInterface::nativeResourceForWindow( const QByteArray& resourceString, QWindow* window) { DLOG("QUbuntuBaseNativeInterface::nativeResourceForWindow (this=%p, resourceString=%s, " diff -Nru qtubuntu-0.53+14.04.20140304/src/platforms/base/native_interface.h qtubuntu-0.53+14.04.20140318/src/platforms/base/native_interface.h --- qtubuntu-0.53+14.04.20140304/src/platforms/base/native_interface.h 2014-03-04 12:50:34.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/src/platforms/base/native_interface.h 2014-03-18 20:20:42.000000000 +0000 @@ -20,13 +20,14 @@ class QUbuntuBaseNativeInterface : public QPlatformNativeInterface { public: - enum ResourceType { EglDisplay, EglContext, NativeOrientation }; + enum ResourceType { EglDisplay, EglContext, NativeOrientation, Display }; QUbuntuBaseNativeInterface(); ~QUbuntuBaseNativeInterface(); // QPlatformNativeInterface methods. void* nativeResourceForContext(const QByteArray& resourceString, QOpenGLContext* context); + void* nativeResourceForScreen(const QByteArray& resourceString, QScreen* screen); void* nativeResourceForWindow(const QByteArray& resourceString, QWindow* window); // New methods. diff -Nru qtubuntu-0.53+14.04.20140304/src/platforms/base/screen.cc qtubuntu-0.53+14.04.20140318/src/platforms/base/screen.cc --- qtubuntu-0.53+14.04.20140304/src/platforms/base/screen.cc 2014-03-04 12:50:34.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/src/platforms/base/screen.cc 2014-03-18 20:20:42.000000000 +0000 @@ -80,7 +80,8 @@ ASSERT(eglBindAPI(EGL_OPENGL_ES_API) == EGL_TRUE); UAUiDisplay* u_display = ua_ui_display_new_with_index(0); - ASSERT((eglDisplay_ = eglGetDisplay(ua_ui_display_get_native_type(u_display))) != EGL_NO_DISPLAY); + nativeDisplay_ = ua_ui_display_get_native_type(u_display); + ASSERT((eglDisplay_ = eglGetDisplay(nativeDisplay_)) != EGL_NO_DISPLAY); ua_ui_display_destroy(u_display); ASSERT(eglInitialize(eglDisplay_, NULL, NULL) == EGL_TRUE); diff -Nru qtubuntu-0.53+14.04.20140304/src/platforms/base/screen.h qtubuntu-0.53+14.04.20140318/src/platforms/base/screen.h --- qtubuntu-0.53+14.04.20140304/src/platforms/base/screen.h 2014-03-04 12:50:34.000000000 +0000 +++ qtubuntu-0.53+14.04.20140318/src/platforms/base/screen.h 2014-03-18 20:20:42.000000000 +0000 @@ -31,6 +31,7 @@ // New methods. QSurfaceFormat surfaceFormat() const { return surfaceFormat_; } + EGLNativeDisplayType nativeDisplay() const { return nativeDisplay_; } EGLDisplay eglDisplay() const { return eglDisplay_; } EGLConfig eglConfig() const { return eglConfig_; } @@ -38,6 +39,7 @@ QImage::Format format_; int depth_; QSurfaceFormat surfaceFormat_; + EGLNativeDisplayType nativeDisplay_; EGLDisplay eglDisplay_; EGLConfig eglConfig_; };