答案将取决于您的用户应用程序。如果一切都是裸机并且您的应用程序团队正在编写一切,那么可以按照 Fredrik 的建议使用DirectFB API 。如果您使用 GTK 的帧缓冲版本,这可能会特别有趣。
但是,如果您使用的是 Qt,那么这不是最好的方法。Qt5.0 取消了 QWS(Qt 嵌入式加速)。Qt 正在迁移到LightHouse,现在称为QPA。如果您编写的QPA插件通过您公开的任何内核机制使用图形加速,那么您已经 加速了Qt 图形。同样令人感兴趣的可能是Wayland 架构;Wayland有QPA插件。Qt4.8+ 和 Qt5.0+ 中 存在对QPA的支持。Skia也是一个有趣的图形 API,支持 OpenGL 后端;安卓设备使用 Skia。
获得图形加速很容易。你要合成吗?你的记忆脚印是多少?谁是你的开发者受众,他们会为API编程?您需要对象功能还是只需要绘制图元?SKIA、PegUI、WindML和成熟的图形框架(Gtk、Qt)之间存在很大差异,这些框架具有人们今天所期望的所有小部件和动态效果。对OpenGL ES API进行编程乍一看似乎很好,但如果您的应用程序有任何复杂性,您将需要更丰富的图形框架;主要是重复Mats Petersson 的评论。
编辑:来自Qt 嵌入式加速链接,
- CPU blitter - 最慢
- 硬件 blitter - 例如,directFB。快速内存移动通常使用位操作而不是机器字,例如 DMA。
- 2D 矢量 - OpenVG,简图绘图,带有位操作。
- 3D 绘图 - OpenGL(ES) 具有多边形填充等。
这是您希望执行的绘图类型。像Qt和Gtk这样的框架,提供了一个 API 来在屏幕上放置单选按钮、复选框、编辑框等。它还具有文本样式以及与键盘、鼠标和/或触摸屏和其他元素的交互。框架使用绘图引擎将对象放在屏幕上。
图形加速只是将Bresenham 算法之类的算法放在单独的 CPU 或专用硬件中。如果您选择的框架不支持3D对象,则这些框架不太可能需要 OpenGL 支持,并且性能可能不会更好。
最后一块拼图是窗口管理器。许多嵌入式设备不需要这个。然而,许多手机正在使用合成和alpha值来创建透明窗口并允许同时看到多个应用程序。这也可能会影响您的图形 API。
此外:没有 X 的 DRI给出了一些令人信服的理由,说明这可能不是一件好事;对于单个用户任务的情况,甚至不需要DRI 。
下面是Wayland博客上的一个Wayland图形堆栈图。