diff options
author | Michal Klocek <michal.klocek@qt.io> | 2018-09-13 10:54:18 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2019-02-12 12:57:26 +0000 |
commit | 3fe9f245e8fb5fa9a2336fecaabd8d677f55c5db (patch) | |
tree | bdc2d324f50ff6cfaee8340eafe911d721d30afc /src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp | |
parent | 7472415f3f331ccd415cc644cc210d2457ef690c (diff) |
Add platform native interface to offscreen plugin
Adds trival support for querying "display" and "glxconfig" in case
offscreen plugin is compiled with xlib support.
This is required so this plugin could work with webengine.
Taks-number: QTBUG-63346
Change-Id: Ie0f29385cb44429ddf383ad459e0c9f3263ccffe
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp')
-rw-r--r-- | src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp | 77 |
1 files changed, 53 insertions, 24 deletions
diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp index 93566220e8..06a9bd2a4c 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp @@ -52,6 +52,30 @@ QT_BEGIN_NAMESPACE +class QOffscreenX11Info +{ +public: + QOffscreenX11Info(QOffscreenX11Connection *connection) + : m_connection(connection) + { + } + + Display *display() const { + return (Display *)m_connection->display(); + } + + Window root() const { + return DefaultRootWindow(display()); + } + + int screenNumber() const { + return m_connection->screenNumber(); + } + +private: + QOffscreenX11Connection *m_connection; +}; + QOffscreenIntegration *QOffscreenIntegration::createOffscreenIntegration() { return new QOffscreenX11Integration; @@ -77,6 +101,35 @@ QPlatformOpenGLContext *QOffscreenX11Integration::createPlatformOpenGLContext(QO return new QOffscreenX11GLXContext(m_connection->x11Info(), context); } +QPlatformNativeInterface *QOffscreenX11Integration::nativeInterface() const +{ + return const_cast<QOffscreenX11Integration *>(this); +} + +void *QOffscreenX11Integration::nativeResourceForScreen(const QByteArray &resource, QScreen *screen) +{ + Q_UNUSED(screen) + if (resource.toLower() == QByteArrayLiteral("display") ) { + if (!m_connection) + m_connection.reset(new QOffscreenX11Connection); + return m_connection->display(); + } + return nullptr; +} + +#ifndef QT_NO_OPENGL +void *QOffscreenX11Integration::nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) { + if (resource.toLower() == QByteArrayLiteral("glxconfig") ) { + if (!m_connection) + m_connection.reset(new QOffscreenX11Connection); + QOffscreenX11Info *x11 = m_connection->x11Info(); + GLXFBConfig config = qglx_findConfig(x11->display(), x11->screenNumber(), context->format()); + return config; + } + return nullptr; +} +#endif + QOffscreenX11Connection::QOffscreenX11Connection() { XInitThreads(); @@ -93,30 +146,6 @@ QOffscreenX11Connection::~QOffscreenX11Connection() XCloseDisplay((Display *)m_display); } -class QOffscreenX11Info -{ -public: - QOffscreenX11Info(QOffscreenX11Connection *connection) - : m_connection(connection) - { - } - - Display *display() const { - return (Display *)m_connection->display(); - } - - Window root() const { - return DefaultRootWindow(display()); - } - - int screenNumber() const { - return m_connection->screenNumber(); - } - -private: - QOffscreenX11Connection *m_connection; -}; - QOffscreenX11Info *QOffscreenX11Connection::x11Info() { if (!m_x11Info) |