linuxfb
直接往FrameBuffer写数据
只支持软件渲染(software-rendered),所以没有gpu的片子选这个
某些配置会使显示性能受到抑制
命令行可使用命令QT_QPA_PLATFORM=linuxfb:fb=/dev/fb1 和 -platform linuxfb使qt程序运行在该plugin上
另外指定fb用fb=/dev/fbN,分配显示区大小size=<width>x<height>,物理大小mmSize=<width>x<height>,设定便宜offset=<width>x<height>,有关于屏幕消影(blinking cursor)和闪烁光标(screen blanking)的控制nographicsmodeswitch
directfb
eglfs
EGL是OpenGL与本机窗口系统之间的接口。Qt可以将EGL用于上下文和表面管理,但是API不包含特定于平台的内容。创建本机窗口(不一定是屏幕上的实际窗口),仍然必须通过特定于平台的方式来完成。这就是为什么我们需要主板或GPU专用的适配代码的原因。通常,这些改编提供为:
- EGLFS挂钩 -编译到平台插件中的单个源文件
- EGL设备集成 -动态加载的插件
EGLFS是一个平台插件,用于在EGL和OpenGL ES 2.0之上运行Qt5应用程序,而没有像X11或Wayland这样的实际窗口系统。除了Qt Quick 2和本机OpenGL应用程序之外,EGLFS还支持软件渲染的窗口,例如QWidget。对于QWidget,小部件的内容使用CPU渲染为图像,然后将其上载为纹理并由插件进行合成。
对于包含GPU的现代嵌入式Linux设备,推荐使用EGLFS插件。
EGLFS迫使第一顶层窗口-无论是QWidget的或QQuickView -成为全屏。该窗口也被选择为所有其他顶级窗口小部件都合并到其中的根窗口小部件窗口。例如,对话框,弹出菜单或组合框。此行为是必需的,因为使用EGLFS时,总是只有一个本机窗口和一个EGL窗口表面;这些属于首先创建的小部件或窗口。当存在显示应用程序生命周期的主窗口并且所有其他小部件不是非顶级窗口部件或随后创建时,此方法将很好地工作。
KMS
一个试验性的平台plugin,利用内核的 modesetting 和 drm(Direct Rendering Manager)机制,配合egl-device实现的带有GPU加速模式。依赖内核的配置和 drm
XCB
用于平常的桌面linux平台
一些嵌入式平台使用该plugin需要提供一些必要的开发文件
在x桌面下,有些设备不支持egl和 opengl因为EGL的实现不适配Xlib,这种情况下编译出来的XCB plugin将不支持EGL,也意味着 Qt Quick 2 和其他以 OpenGL 为基础的应用程序将不能在该这个平台上成功运行(这就是我们的程序为什么没有在imx6ul的xcb平台下运行成功的原因)。此时,他能支持那些以软件渲染(software-rendered)的程序运行,例如 QWidget。
作为一个通用的规则,XCB是不建议在嵌入式平台上使用的,eglfs能更好的展现较高的性能和支持硬件加速能力。
wayland
轻量级的视窗系统
一个关于client可以与显示server连通的协议
Qt 提供了Wayland的相关插件使得Qt 应用程序与wayland显示进行连通。
Wayland是一种显示服务器协议,可以帮助您创建多进程系统。多个客户端应用程序(“客户端”)可以将其自己的内容呈现到屏幕外缓冲区。然后,使用Wayland协议将这些缓冲区传递到通常称为合成器的显示服务器。最后,合成器将内容合成并放置在物理显示器上。
X11是80年代的桌面协议,如今已不再适合图形硬件的工作方式。它很大,很复杂,并且缺乏可定制性。实际上,使用X11流畅地运行客户端并达到60 fps而不会撕裂是很困难的。相比之下,Wayland更易于实现,具有更好的性能,并包含在现代图形硬件上有效运行的所有必要部件。对于Linux上的嵌入式多进程系统,Wayland是标准配置。
但是,如果您使用的是旧硬件或旧应用程序,那么Wayland可能不是一个好的选择。Wayland协议在设计时考虑了安全性和隔离性,并且严格/保守地向客户提供了哪些信息和功能。尽管这样可以使界面更清洁,更安全,但是旧版应用程序期望的某些功能可能不再在Wayland上可用。
参考:
https://doc.qt.io/qt-5/embedded-linux.html
https://doc.qt.io/qt-5/wayland-and-qt.html#