diff options
author | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2014-12-03 16:56:17 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2014-12-04 13:46:59 +0100 |
commit | 198d7a51d4fc894fca691c1f8243372e876af68a (patch) | |
tree | 48183281fe15fb053afd5f837b6d9eeb15c7f7e2 | |
parent | 6b8b6b80a1852c1e4d0a626129d4382d11423a54 (diff) | |
download | qtwayland-198d7a51d4fc894fca691c1f8243372e876af68a.tar.gz |
Enable Qt WebEngine on Wayland
The native resource getters that are supported by eglfs will have to be
supported by the wayland platform plugin too. (on wayland-egl at least)
Change-Id: Ibbab649c04785dbde177342c45b9bc6f1edd954d
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
5 files changed, 60 insertions, 1 deletions
diff --git a/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h b/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h index bbe42eb2..898ab225 100644 --- a/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h +++ b/src/client/hardwareintegration/qwaylandclientbufferintegration_p.h @@ -69,6 +69,14 @@ public: virtual QWaylandWindow *createEglWindow(QWindow *window) = 0; virtual QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const = 0; + + enum NativeResource { + EglDisplay, + EglConfig, + EglContext + }; + virtual void *nativeResource(NativeResource /*resource*/) { return Q_NULLPTR; } + virtual void *nativeResourceForContext(NativeResource /*resource*/, QPlatformOpenGLContext */*context*/) { return Q_NULLPTR; } }; QT_END_NAMESPACE diff --git a/src/client/qwaylandnativeinterface.cpp b/src/client/qwaylandnativeinterface.cpp index 3d714c2f..fca176ac 100644 --- a/src/client/qwaylandnativeinterface.cpp +++ b/src/client/qwaylandnativeinterface.cpp @@ -49,6 +49,7 @@ #include "qwaylandscreen_p.h" #include <QtGui/private/qguiapplication_p.h> #include <QtGui/QScreen> +#include <QtWaylandClient/private/qwaylandclientbufferintegration_p.h> QT_BEGIN_NAMESPACE @@ -61,13 +62,16 @@ void *QWaylandNativeInterface::nativeResourceForIntegration(const QByteArray &re { QByteArray lowerCaseResource = resourceString.toLower(); - if (lowerCaseResource == "display" || lowerCaseResource == "wl_display") + if (lowerCaseResource == "display" || lowerCaseResource == "wl_display" || lowerCaseResource == "nativedisplay") return m_integration->display()->wl_display(); if (lowerCaseResource == "compositor") return const_cast<wl_compositor *>(m_integration->display()->wl_compositor()); if (lowerCaseResource == "server_buffer_integration") return m_integration->serverBufferIntegration(); + if (lowerCaseResource == "egldisplay" && m_integration->clientBufferIntegration()) + return m_integration->clientBufferIntegration()->nativeResource(QWaylandClientBufferIntegration::EglDisplay); + return 0; } @@ -96,6 +100,22 @@ void *QWaylandNativeInterface::nativeResourceForScreen(const QByteArray &resourc return NULL; } +void *QWaylandNativeInterface::nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) +{ + QByteArray lowerCaseResource = resource.toLower(); + + if (lowerCaseResource == "eglconfig" && m_integration->clientBufferIntegration()) + return m_integration->clientBufferIntegration()->nativeResourceForContext(QWaylandClientBufferIntegration::EglConfig, context->handle()); + + if (lowerCaseResource == "eglcontext" && m_integration->clientBufferIntegration()) + return m_integration->clientBufferIntegration()->nativeResourceForContext(QWaylandClientBufferIntegration::EglContext, context->handle()); + + if (lowerCaseResource == "egldisplay" && m_integration->clientBufferIntegration()) + return m_integration->clientBufferIntegration()->nativeResourceForContext(QWaylandClientBufferIntegration::EglDisplay, context->handle()); + + return 0; +} + QVariantMap QWaylandNativeInterface::windowProperties(QPlatformWindow *window) const { QWaylandWindow *waylandWindow = static_cast<QWaylandWindow *>(window); diff --git a/src/client/qwaylandnativeinterface_p.h b/src/client/qwaylandnativeinterface_p.h index 6c0be2d3..9d0aafdd 100644 --- a/src/client/qwaylandnativeinterface_p.h +++ b/src/client/qwaylandnativeinterface_p.h @@ -61,6 +61,7 @@ public: QWindow *window); void *nativeResourceForScreen(const QByteArray &resourceString, QScreen *screen); + void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context); QVariantMap windowProperties(QPlatformWindow *window) const; QVariant windowProperty(QPlatformWindow *window, const QString &name) const; diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp index 99a32018..7457ae52 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp @@ -129,6 +129,33 @@ QPlatformOpenGLContext *QWaylandEglClientBufferIntegration::createPlatformOpenGL return new QWaylandGLContext(m_eglDisplay, m_display, glFormat, share); } +void *QWaylandEglClientBufferIntegration::nativeResource(NativeResource resource) +{ + switch (resource) { + case EglDisplay: + return m_eglDisplay; + default: + break; + } + return Q_NULLPTR; +} + +void *QWaylandEglClientBufferIntegration::nativeResourceForContext(NativeResource resource, QPlatformOpenGLContext *context) +{ + Q_ASSERT(context); + switch (resource) { + case EglConfig: + return static_cast<QWaylandGLContext *>(context)->eglConfig(); + case EglContext: + return static_cast<QWaylandGLContext *>(context)->eglContext(); + case EglDisplay: + return m_eglDisplay; + default: + break; + } + return Q_NULLPTR; +} + EGLDisplay QWaylandEglClientBufferIntegration::eglDisplay() const { return m_eglDisplay; diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h index 75053190..465ecc75 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.h @@ -65,6 +65,9 @@ public: QWaylandWindow *createEglWindow(QWindow *window) Q_DECL_OVERRIDE; QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const Q_DECL_OVERRIDE; + void *nativeResource(NativeResource resource) Q_DECL_OVERRIDE; + void *nativeResourceForContext(NativeResource resource, QPlatformOpenGLContext *context) Q_DECL_OVERRIDE; + EGLDisplay eglDisplay() const; private: |