ddd010 发表于 2012-05-17 20:14

谁能告诉我基于framebuffer和不基于framebuffer的gui区别!

如题:
         最近一直在纠结这个问题。麻烦哪位大神告诉我下。。

MMMIX 发表于 2012-05-17 21:50

回复 1# ddd010


    為什麼不先了解下什麼是 Framebuffer?

ddd010 发表于 2012-05-18 08:51

回复 2# MMMIX


   
有去了解过哦,只是了解不深,也没有找到我想要的答案。其实我想知道是,基于framebuffer的gui我比较好理解。像Qt他不是使用framebuffer来做gui(在嵌入式方面他又有使用framebuffer)?那这个图形 是怎么显出来的?

难道是直接调用驱动相关接口?

如果是直接调用显示接口那么和使用framebuffer有什么区别? framebuffer和他比起来有啥好处?

MMMIX 发表于 2012-05-20 18:51

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

kprc 发表于 2012-05-21 08:30

不懂,帮顶

atz0001 发表于 2012-05-21 15:46

不是大神,以下写点个人偏见,猜测、谬误和错误融为一炉,建议不要相信。

显示卡刚发明出来的那个年代,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 是后浪,明白了?

ddd010 发表于 2012-05-21 21:34

回复 6# atz0001

非常感谢你的回复,我想我要知道的就是这些了。

你这不仅帮我解惑还给我指明了方向,谢谢!


   

ddd010 发表于 2012-05-21 21:41

回复 4# MMMIX

感谢,我会去看看的。

   

ddd010 发表于 2012-05-21 21:54

回复 5# kprc


    :wink:

ulovko 发表于 2012-05-21 22:04

MMMIX 发表于 2012-05-20 18:51 static/image/common/back.gif
使用 X

BTW,看看這兩個 Wiki 條目吧:


好东西哦
页: [1] 2
查看完整版本: 谁能告诉我基于framebuffer和不基于framebuffer的gui区别!