summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/eglfs/qeglfshooks.h
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-10-10 16:03:36 +0200
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2014-12-08 14:16:41 +0100
commitb7f0583f3157da5cb8a6d86af5a4b4f410847556 (patch)
treed99b9b8924d771a82f73d95ad0e86e52ca57f271 /src/plugins/platforms/eglfs/qeglfshooks.h
parentfec53bf5edb3ac8b847a52c486eae4ea166b09bd (diff)
Pluginize the eglfs hooks
Following the principle of device integrations in QtWayland and soon xcb, a plugin interface is being introduced to gradually replace the statically compiled-in hooks. The interface is same as before for the time being, for compatibility with the existing device-specific hooks. QEglFSHooks is now just a dummy subclass for QEGLDeviceIntegration to support the legacy, compiled-in, device-specific hooks. When -device is not used with configure and so there is no hook active, the new plugin-based approach kicks in. The environment variable QT_QPA_EGLFS_INTEGRATION can be set to indicate the preferred integration name (e.g. eglfs_x11, eglfs_kms). It can also be set to "none", indicating that no plugins should be considered and the default, non-specialized integration is to be used. (this is for devices, like Beagleboard|bone, that do not need any special code to set up EGL) Device makespecs can set EGLFS_DEVICE_INTEGRATION. The value is then used as the default, preferred plugin name when QT_QPA_EGLFS_INTEGRATION is not set. In the future device makespecs are expected to set a plugin name instead of relying on the traditional EGLFS_PLATFORM_HOOKS_*. When neither the QT_QPA_EGLFS_INTEGRATION nor EGLFS_DEVICE_INTEGRATION are set, all plugins will be tried in an unspecified order. The first one that succeeds to load is used. If all fails or there are no plugins, the built-in, non-specialized integration is used. To debug what integration is being used, enable the logging category qt.qpa.egldeviceintegration. There is some built-in logic for desktop/Mesa based systems: Under X, eglfs_x11 is preferred, otherwise eglfs_kms is prioritized. This, assuming sufficient permissions to video and input devices, allows simply launching apps with -platform eglfs. No more editing of eglfs.pri. [ChangeLog][QtGui] Added support for device-specific backend plugins in eglfs. Change-Id: Ia2ddcddac014c25817171dc140cd8cf913784ac6 Reviewed-by: Louai Al-Khanji <louai.al-khanji@theqtcompany.com>
Diffstat (limited to 'src/plugins/platforms/eglfs/qeglfshooks.h')
-rw-r--r--src/plugins/platforms/eglfs/qeglfshooks.h56
1 files changed, 5 insertions, 51 deletions
diff --git a/src/plugins/platforms/eglfs/qeglfshooks.h b/src/plugins/platforms/eglfs/qeglfshooks.h
index b2b8d46741..1fcfc5bd08 100644
--- a/src/plugins/platforms/eglfs/qeglfshooks.h
+++ b/src/plugins/platforms/eglfs/qeglfshooks.h
@@ -34,63 +34,17 @@
#ifndef QEGLFSHOOKS_H
#define QEGLFSHOOKS_H
-#include <qpa/qplatformintegration.h>
-#include <qpa/qplatformscreen.h>
-#include <QtGui/QSurfaceFormat>
-#include <QtGui/QImage>
-#include <EGL/egl.h>
+#include "qeglfsdeviceintegration.h"
+#include "qeglfsglobal.h"
QT_BEGIN_NAMESPACE
-class QEglFSScreen;
-class QEglFSIntegration;
-class QPlatformSurface;
-
-class QEglFSHooks
+class QEglFSHooks : public QEGLDeviceIntegration
{
-public:
- virtual ~QEglFSHooks() {}
- virtual void platformInit();
- virtual void platformDestroy();
- virtual EGLNativeDisplayType platformDisplay() const;
- virtual void screenInit();
- virtual void screenDestroy();
- virtual QSizeF physicalScreenSize() const;
- virtual QSize screenSize() const;
- virtual QDpi logicalDpi() const;
- virtual Qt::ScreenOrientation nativeOrientation() const;
- virtual Qt::ScreenOrientation orientation() const;
- virtual int screenDepth() const;
- virtual QImage::Format screenFormat() const;
- virtual QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const;
- virtual EGLNativeWindowType createNativeWindow(QPlatformWindow *platformWindow,
- const QSize &size,
- const QSurfaceFormat &format);
- virtual EGLNativeWindowType createNativeOffscreenWindow(const QSurfaceFormat &format);
- virtual void destroyNativeWindow(EGLNativeWindowType window);
- virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
- virtual QPlatformCursor *createCursor(QPlatformScreen *screen) const;
- virtual bool filterConfig(EGLDisplay display, EGLConfig config) const;
- virtual void waitForVSync(QPlatformSurface *surface) const;
- virtual void presentBuffer(QPlatformSurface *surface);
-
- virtual QByteArray fbDeviceName() const;
- virtual int framebufferIndex() const;
-
- virtual bool supportsPBuffers() const;
-
- static QEglFSHooks *hooks()
- {
-#ifdef EGLFS_PLATFORM_HOOKS
- extern QEglFSHooks *platformHooks;
- return platformHooks;
-#else
- extern QEglFSHooks stubHooks;
- return &stubHooks;
-#endif
- }
};
+Q_EGLFS_EXPORT QEGLDeviceIntegration *qt_egl_device_integration();
+
QT_END_NAMESPACE
#endif // QEGLFSHOOKS_H