51QEglFSDeviceIntegration *QEglFSDeviceIntegrationFactory::create(
const QString &key)
53 QEglFSDeviceIntegration *integration =
nullptr;
55 integration = qLoadPlugin<QEglFSDeviceIntegration, QEglFSDeviceIntegrationPlugin>(loader(), key);
57 qCDebug(qLcEglDevDebug) <<
"Using EGL device integration" << key;
59 qCWarning(qLcEglDevDebug) <<
"Failed to load EGL device integration" << key;
79int QEglFSDeviceIntegration::framebufferIndex()
const
82#if QT_CONFIG(regularexpression)
83 QRegularExpression fbIndexRx(
"fb(\\d+)"_L1);
84 QFileInfo fbinfo(QString::fromLocal8Bit(fbDeviceName()));
85 QRegularExpressionMatch match;
86 if (fbinfo.isSymLink())
87 match = fbIndexRx.match(fbinfo.symLinkTarget());
89 match = fbIndexRx.match(fbinfo.fileName());
91 fbIndex = match.captured(1).toInt();
96void QEglFSDeviceIntegration::platformInit()
98#if defined(Q_OS_LINUX) || defined(Q_OS_VXWORKS)
99 QByteArray fbDev = fbDeviceName();
101 framebuffer = qt_safe_open(fbDev, O_RDONLY);
103 if (Q_UNLIKELY(framebuffer == -1)) {
104 qWarning(
"EGLFS: Failed to open %s", fbDev.constData());
105 qFatal(
"EGLFS: Can't continue without a display");
109 ioctl(framebuffer, FBIOBLANK, VESA_NO_BLANKING);
201QSurfaceFormat QEglFSDeviceIntegration::surfaceFormatFor(
const QSurfaceFormat &inputFormat)
const
203 QSurfaceFormat format = inputFormat;
205 static const bool force888 = qEnvironmentVariableIntValue(
"QT_QPA_EGLFS_FORCE888");
207 format.setRedBufferSize(8);
208 format.setGreenBufferSize(8);
209 format.setBlueBufferSize(8);
262void QEglFSDeviceIntegration::waitForVSync(QPlatformSurface *surface)
const
266#if defined(Q_OS_LINUX) && defined(FBIO_WAITFORVSYNC)
267 static const bool forceSync = qEnvironmentVariableIntValue(
"QT_QPA_EGLFS_FORCEVSYNC");
268 if (forceSync && framebuffer != -1) {
270 if (ioctl(framebuffer, FBIO_WAITFORVSYNC, &arg) == -1)
271 qWarning(
"Could not wait for vsync.");
315EGLConfig QEglFSDeviceIntegration::chooseConfig(EGLDisplay display,
const QSurfaceFormat &format)
317 class Chooser :
public QEglConfigChooser {
319 Chooser(EGLDisplay display)
320 : QEglConfigChooser(display) { }
321 bool filterConfig(EGLConfig config)
const override {
322 return qt_egl_device_integration()->filterConfig(display(), config)
323 && QEglConfigChooser::filterConfig(config);
327 Chooser chooser(display);
328 chooser.setSurfaceType(qt_egl_device_integration()->surfaceType());
329 chooser.setSurfaceFormat(format);
330 return chooser.chooseConfig();