谁能告诉我基于framebuffer和不基于framebuffer的gui区别!
如题:最近一直在纠结这个问题。麻烦哪位大神告诉我下。。 回复 1# ddd010
為什麼不先了解下什麼是 Framebuffer? 回复 2# MMMIX
有去了解过哦,只是了解不深,也没有找到我想要的答案。其实我想知道是,基于framebuffer的gui我比较好理解。像Qt他不是使用framebuffer来做gui(在嵌入式方面他又有使用framebuffer)?那这个图形 是怎么显出来的?
难道是直接调用驱动相关接口?
如果是直接调用显示接口那么和使用framebuffer有什么区别? framebuffer和他比起来有啥好处? ddd010 发表于 2012-05-18 08:51 static/image/common/back.gif
像Qt他不是使用framebuffer来做gui(在嵌入式方面他又有使用framebuffer)?那这个图形 是怎么显出来的?
使用 X
BTW,看看這兩個 Wiki 條目吧:
http://en.wikipedia.org/wiki/Linux_framebuffer
http://en.wikipedia.org/wiki/X_server 不懂,帮顶 不是大神,以下写点个人偏见,猜测、谬误和错误融为一炉,建议不要相信。
显示卡刚发明出来的那个年代,CPU 很慢,内存很少,带宽很低,没有 DMA 功
能 I/O 都是 CPU 来做,等等。
那个时候还处在混乱时期,标准很多时候不统一。以下以原理为主,其实现细节
可能差异很大。因此,领会精神!
framebuffer 是一种图形模式,在此之前,那当然就有 Text 模式。
当时显示卡是不能显示图形的,只能以一些不同的模式来显示文字,比如 24 行
80 列,那么显示卡只需要 24 x 80 = 1920 字节的显存。这是半导体工业的限
制。当你需要在 0 行 2 列显示一个 'a' 字符的时候,你就往显存的第 3 个字
节写入 'a' 的 ASCII 码。显示卡内部固化有 'a' 在这个模式下如何绘制的代
码,这样就能显示文本了。
半导体制程进步了,能用得起大显存,提供得了带宽,这时候有了直接控制屏幕上
每一个像素的能力。比如 640 x 480 像素 8 位色的显卡需要 640 x 480 个字
节的显存。
因为具体到实现,很多时候显卡有 A / B 两个 buffer。首先,显卡显示 A 的
内容,这时程序写入 B,写入完毕设置个寄存器,显卡就改为显示 B 的内容,而
程序则可以写入 A 了。所以我们称这 640 x 480 字节显存为 framebuffer。
因此 framebuffer 是很古老的一种 2D 显示技术。
后来 3D 技术出现后,显卡主要会提供 OpenGL/DirectX 这样的硬件接口,同时
保留 framebuffer 作为兼容之用。同时 framebuffer 比较简单,也可以用在
一些低级代码中,这时候 OpenGL/DirectX 还没有初始化,不可用。
所以,主要区别就是,基于 framebuffer 的 GUI 是 2D 的,比较新的 GUI 比
如 cluter / QT 直接基于 3D 绘制系统 EGL / OpenGL 之类的。
2D 比较简单,3D 比较复杂,有些嵌入式芯片只支持 framebuffer 不支持 OpenGL
之类。
2D 比较慢,3D 比较快,因为做显卡的人主要关注 3D 性能。
至于 “那这个图形 是怎么显出来的”,和平常一样,一票人设计出一个规范,比如
framebuffer / OpenGL / DirectX,做显卡的会实现硬件 + 软件驱动,应用程
序开发人员去调用这个规范提供的 API 就好了。
前面 MMMIX 说使用 X 也不算错,但个人觉得没有说到点子上。framebuffer 和
非 framebuffer 都是访问硬件的方法。X 的绘制功能可以跑在 framebuffer 上,
也可以跑在非 framebuffer 上。
现在的趋势是能跑在 3D API 上的尽量跑在 3D API 上,X 都是在往 OpenGL 迁
移的。
简单来说,framebuffer 是前浪,QT 用的 OpenGL 是后浪,明白了? 回复 6# atz0001
非常感谢你的回复,我想我要知道的就是这些了。
你这不仅帮我解惑还给我指明了方向,谢谢!
回复 4# MMMIX
感谢,我会去看看的。
回复 5# kprc
:wink: MMMIX 发表于 2012-05-20 18:51 static/image/common/back.gif
使用 X
BTW,看看這兩個 Wiki 條目吧:
好东西哦
页:
[1]
2