|
发表于 2009-5-15 18:06:43
|
显示全部楼层
frame buffer 设备只提供了非常有限的用户接口, 比如将一段显存映射到用户空间, 比如获取/设置调色板...
用 frame buffer 设备接口写过程序的人就会知道, 唯一能操作的单位就是点, 比如绘制一个矩形区域并填充为红色, 就是手工计算这个范围对应的所有的点的地址, 再将这些点全都设置为红点. 这样的绘制过程完全是由软件指令来实现的.
显示的硬件加速用直白的话来描述就是提供更多高级别的可操作单位. 比如很多显示加速器都会提供 fillrect, blit 之类的操作, 它们是以矩形为单位进行处理, 从上层应用的角度来看, 大体上只要发送一个指定格式的请求就可以完成这样一个矩形级别的单位的处理. 显示加速设备通过硬件来实现这种批量化的操作其效率自然可以比软件实现高几个数量级.
矩形只是一个简单而常用的例子, 像多边形之类也是非常常见的硬件显示单位.
除了扩大显示操作的单位, 为这些单位提供更复杂的操作也是显示加速的一种方法. 以矩形的搬移为例, 有可能硬件直接提供了透明色, alpha 混合, 甚至剪切域等支持, 这些复杂操作通过软件实现会非常慢.
回到楼主的话题, 在 frame buffer 设备的概念下是没有办法使用 opengl 之类的加速接口的, 同样也不能使用 X 的显示加速驱动. 但是假如楼主的目的只是想绕过 X 来使用显示加速功能, 那倒并非不可能, 比如 SDL, DirectFB, MiniGUI 等都对一些显示设备提供了加速接口的支持. 不过这些与基本的 frame buffer 设备是有着本质的不同的. |
|