55QEglFSDeviceIntegration *QEglFSDeviceIntegrationFactory::create(
const QString &key)
57 QEglFSDeviceIntegration *integration =
nullptr;
59 integration = qLoadPlugin<QEglFSDeviceIntegration, QEglFSDeviceIntegrationPlugin>(loader(), key);
61 qCDebug(qLcEglDevDebug) <<
"Using EGL device integration" << key;
63 qCWarning(qLcEglDevDebug) <<
"Failed to load EGL device integration" << key;
83int QEglFSDeviceIntegration::framebufferIndex()
const
86#if QT_CONFIG(regularexpression)
87 QRegularExpression fbIndexRx(
"fb(\\d+)"_L1);
88 QFileInfo fbinfo(QString::fromLocal8Bit(fbDeviceName()));
89 QRegularExpressionMatch match;
90 if (fbinfo.isSymLink())
91 match = fbIndexRx.match(fbinfo.symLinkTarget());
93 match = fbIndexRx.match(fbinfo.fileName());
95 fbIndex = match.captured(1).toInt();
100void QEglFSDeviceIntegration::platformInit()
102#if defined(Q_OS_LINUX) || defined(Q_OS_VXWORKS)
103 QByteArray fbDev = fbDeviceName();
105 framebuffer = qt_safe_open(fbDev, O_RDONLY);
107 if (Q_UNLIKELY(framebuffer == -1)) {
108 qWarning(
"EGLFS: Failed to open %s", fbDev.constData());
109 qFatal(
"EGLFS: Can't continue without a display");
113 ioctl(framebuffer, FBIOBLANK, VESA_NO_BLANKING);
205QSurfaceFormat QEglFSDeviceIntegration::surfaceFormatFor(
const QSurfaceFormat &inputFormat)
const
207 QSurfaceFormat format = inputFormat;
209 static const bool force888 = qEnvironmentVariableIntValue(
"QT_QPA_EGLFS_FORCE888");
211 format.setRedBufferSize(8);
212 format.setGreenBufferSize(8);
213 format.setBlueBufferSize(8);
266void QEglFSDeviceIntegration::waitForVSync(QPlatformSurface *surface)
const
270#if defined(Q_OS_LINUX) && defined(FBIO_WAITFORVSYNC)
271 static const bool forceSync = qEnvironmentVariableIntValue(
"QT_QPA_EGLFS_FORCEVSYNC");
272 if (forceSync && framebuffer != -1) {
274 if (ioctl(framebuffer, FBIO_WAITFORVSYNC, &arg) == -1)
275 qWarning(
"Could not wait for vsync.");
277#elif defined(Q_OS_VXWORKS) && defined(FB_IOCTL_VSYNC)
278 static const bool forceSync = qEnvironmentVariableIntValue(
"QT_QPA_EGLFS_FORCEVSYNC");
279 if (forceSync && framebuffer != -1) {
281 if (ioctl(framebuffer, FB_IOCTL_VSYNC, &arg) == -1)
282 qWarning(
"Could not wait for vsync.");
326EGLConfig QEglFSDeviceIntegration::chooseConfig(EGLDisplay display,
const QSurfaceFormat &format)
328 class Chooser :
public QEglConfigChooser {
330 Chooser(EGLDisplay display)
331 : QEglConfigChooser(display) { }
332 bool filterConfig(EGLConfig config)
const override {
333 return qt_egl_device_integration()->filterConfig(display(), config)
334 && QEglConfigChooser::filterConfig(config);
338 Chooser chooser(display);
339 chooser.setSurfaceType(qt_egl_device_integration()->surfaceType());
340 chooser.setSurfaceFormat(format);
341 return chooser.chooseConfig();