Framebuffer,Xorg,directFB,openGL,QT,GTK关系

本文探讨了Linux图形系统中Xserver与Framebuffer的关系,特别是Xorg如何根据配置使用fbdev驱动。GLX作为连接X Window、OpenGL与3D硬件加速的桥梁,支持直接和间接渲染。Nvidia和ATI提供了不同的驱动策略。同时,文章提到了直接渲染、Linux Framebuffer设备及其在XFree86和其他应用中的使用,以及QT在Linux上的图形引擎实现。
摘要由CSDN通过智能技术生成

本文待整理!!!

问:Xserver使用的是Framebuffer吗?

答:Xserver有多种实现,如Xfree86、Xorg等,Xfree86默认不采用Framebuffer;而对于Xorg,可以根据xorg.conf里的配置判断


-Section "Device"                                                           
-        Identifier      "Configured Video Device"                          
-        Driver          "fbdev"                 
-EndSection

其中的fbdev表示使用Framebuffer画图,需要内核的支持(2.2以上内核)和相应的framebuffer驱动, framebuffer驱动与硬件相关,可由显卡硬件厂商提供(如vpmfbDrv.ko),也可用xorg提供的通用的FB驱动:xserver-xorg-video-fbdev,它是基于内核里的fbdevhw(fbdevhw - os-specific submodule for framebuffer device access,将显卡的硬件相关操作已经封装了,它也可以被其他的video drivers使用)

   http://www.linuxgraphics.cn/xwindow/xorg_hardware_accelerate_cont.html   Xorg 嶄新的硬體加速與效能提昇機制(续)    非常好的图!!!opengl、xorg、直接渲染、间接渲染  、总图!!!




http://liyanrui.is-programmer.com/2009/2/8/glx-notes.7061.html

直接渲染、本地渲染:





相关好文章记录:

http://lp007819.wordpress.com/2010/11/19/%E5%85%B3%E4%BA%8Eglx-direct%E5%92%8Cindirect-rendering/     是否支持3D图形和direct ,indirect rendering 没有任何关系。事实上它与3D硬件加速也没有关系。  有图    这里的硬件加速应该是2d的情况,对于3d的情况,必须是直接渲染才行!(个人猜想)

http://liyanrui.is-programmer.com/2009/2/8/glx-notes.7061.html   

GLX 与显卡驱动

为了取得广泛的平台支持,OpenGL 是不依赖任何窗口系统的,但是我们使用 OpenGL 绘制的三维场景却需要嵌入在某种窗口程序中才可以为人所见。似乎也是约好了的,目前主流的窗口系统(X Window, MS Windows, Mac OS)只是提供了完善的二维图形交互环境,而将复杂的三维图形渲染任务交给 OpenGL (MS Windows 更热衷于用 Direct3D 来取代 OpenGL)。当 OpenGL 与窗口系统们达成了相互依存的默契之后,便出现了用于衔接 OpenGL 与窗口系统的扩展库,这些扩展库的主要目标就是实现 OpenGL 图形与对应窗口画面之间的转换。GLX 库解决了 X Window 中的 OpenGL 图形渲染问题。同样的,WGL 和 AGL 库分别解决了 MS Windows 和 Mac OS 窗口系统中的 OpenGL 图形渲染问题。

GLX 像胶水一样,建立了 X Window、OpenGL 以及 3D 硬件加速驱动之间的联系。在 Linux 中,如果未有安装相应的支持 3D 加速的显卡驱动,那么 GLX 可以调用 Mesa (Unix-like 系统中应用最为广泛的 OpenGL 实现) 的 3D 软件加速来取得 X Window 与 OpenGL 的集成;当然,这种做法所实现的 3D 渲染效率就要大打折扣,并且也会累的 CPU 气喘。多了解一下 X Window 是如何驱动硬件 3D 加速,可以更加深刻的理解 GLX 的工作机理。不过,目前这方面的文档实在太少了,下面文字是我个人的一些猜测,未必正确。

目前,Nvidia 和 ATI 这两大主流显卡均面向 Linux 提供了驱动程序,但是它们的做法不相同。Nvidia 驱动提供了自己的 GLX 库,在安装驱动时,会替换掉 X Window 的标准 GLX 库,另外也会将 Mesa 提供的并且只具备 3D 软件加速支持的 libGL 库替换为自己的 libGL 库。Nvidia 驱动还会提供一个 Linux 内核模块,这样可以让 X Window 通过内核访问显卡的帧缓冲区。与 Nvidia 驱动相比, ATI 则显得比较规范(此处不论其驱动的质量优劣),它利用 DRI + Mesa 来实现 3D 硬件加速,而不是像 Nvidia 驱动那样,什么都是自己去实现。最近,ATI 的开源 3D 加速驱动也渐渐浮出水面,以后买显卡,得多考证考证 ATI 了。

直接渲染与间接渲染

GLX 所支持的 OpenGL 三维图形渲染分为直接渲染与间接渲染,其区别如下图所示:

这里,勿将直接渲染与“硬件加速”的概念混淆了。无论是直接渲染还是间接渲染,都可以利用硬件加速,当然前提是显卡驱动要提供硬件加速支持。同样,也不要将间接渲染与“软件加速”的概念混淆。直接渲染,可以简单理解为本地渲染,即在同一台机器上的 X Client/Server 环境中实现三维图形渲染;相应地,间接渲染可以理解为远程渲染,也就是在网络环境中实现三维图形硬件加速渲染。



http://wiki.linuxquestions.org/wiki/Framebuffer

A framebuffer is a block of memory that holds one frame (one whole display or picture) of pixel data.

In the Linux kernel, there is a framebuffer device available. This device provides a hardware independent API for graphics devices. Applications see a framebuffer and can manipulate it though this API. It is accessed through a special device, normally /dev/fb* (e.g. /dev/fb0). It behaves much like othermemory devices in linux, in that you can also read and write it with normal tools. For example copying the framebuffer to a file (effectively making a raw screenshot) can be done with:

cat /dev/fb0 > somefile

The main application of this in the Linux kernel is allowing the Tux logo at boot and a high resolution text console (a "Framebuffer console" -- the module for this is called fbcon). It's also for use on 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值