我想知道是否有可能在没有Xorg及其DDX驱动程序的情况下获得图形硬件加速,只有内核模块和其他用户空间驱动程序.我问这个是因为我开始在嵌入式平台上开发(比如beagleboard或更像是一个带有集成GPU的德州仪器ARM芯片),我会得到硬件加速,而不需要图形服务器的开销(不是需要).
如果有,怎么样?我在考虑OpenGL或OpengGLES实现,或者Qt嵌入式http://harmattan-dev.nokia.com/docs/library/html/qt4/qt-embeddedlinux-accel.html
TI提供了大量文档,但对我来说仍然不清楚
http://processors.wiki.ti.com/index.php/Sitara_Linux_Software_Developer%E2%80%99s_Guide
谢谢.
解决方法:
答案取决于您的用户应用程序.如果一切都是裸机,而您的应用团队正在编写所有内容,那么DirectFB API可以用作Fredrik的建议.如果您使用GTK的帧缓冲版本,这可能会特别有趣.
但是,如果您使用Qt,那么这不是最好的前进方式. Qt5.0取消了QWS(Qt embedded acceleration). Qt正在迁移到LightHouse,现在称为QPA.如果您编写的QPA插件通过您公开的任何内核机制使用图形加速,那么您已经加速了Qt图形.也感兴趣的可能是Wayland architecture;还有适用于Wayland的QPA插件.在Qt4.8和Qt5.0中支持QPA. Skia也是一个有趣的图形API,支持OpenGL后端; Android设备使用Skia.
获得图形加速很容易.你想要合成吗?你的记忆足迹是什么?谁是您的API开发人员?您需要对象功能还是只需绘制图元? SKIA,PegUI,WindML和完整的图形框架(Gtk,Qt)之间存在很大差异,具有人们期望的所有小部件和动态效果.初看起来,编程到OpenGL ES API似乎很好,但如果您的应用程序有任何复杂性,您将需要更丰富的图形框架;主要是重复Mats Petersson的评论.
编辑:从Qt embedded acceleration链接,
> CPU阻击 – 最慢
> Hardware blitter – 例如,directFB.快速内存移动通常使用位操作而不是机器字,如DMA.
> 2D矢量 – OpenVG,棒图绘制,带位操作.
> 3D绘图 – OpenGL(ES)具有多边形填充等.
这是您希望执行的绘图类型.像Qt和Gtk这样的框架,提供了一个API,可以在屏幕上放置单选按钮,复选框,编辑框等.它还具有文本样式和与键盘,鼠标和/或触摸屏和其他元素的交互.框架使用绘图引擎将对象放在屏幕上.
图形加速只是将像Bresenham algorithm这样的算法放在单独的CPU或专用硬件中.如果您选择的框架不支持3D对象,则框架不太可能需要OpenGL支持,并且可能无法更好地执行.
最后一块拼图是window manager.许多嵌入式设备不需要这个.然而,许多手机正在使用合成和alpha值来创建透明窗口,并允许同时看到多个应用程序.这也可能会影响您的图形API.
另外:DRI without X给出了一些令人信服的理由,说明为什么这可能不是一件好事;对于单个用户任务的情况,甚至不需要DRI.
以下是Wayland图形堆栈blog on Wayland的示意图.