linux图型

来源:互联网 发布:2016年美国cpi数据 编辑:程序博客网 时间:2024/06/05 05:19

Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念:

Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。

一、Linux 图形领域的基础设施 

1.1 X Window 

X Window从逻辑上分为三层:X Server、X Client和X协议。

最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将它交给X Client(X客户端)作出反馈,而由X Client传来的输出信息也由它来负责输出;

最上层的X Client则提供一个完整的GUI界面,负责与用户的直接交互(KDE、GNOME都是一个X Client)。

X协议则是衔接X Server与X Client的通讯协议,它的任务是充当这两者的沟通管道。尽管UNIX厂商采用相同的X Window,但终端的X Client并不相同。

XFree86是X Window系统的一个开源的实现。它主要运行于Unix以及类Unix操作系统上。XFree86在显示硬件(鼠标、键盘以及显卡)与桌面环境(也就是窗口管理器)之间提供了一个Client/Server接口。

1.2 SVGALib 
SVGALib是Linux下的底层图形库,也是Linux系统中最早出现的非X图形支持库,它支持标准的VGA图形模式和一些其他的模式,SVGALib的缺点是程序必须以root权限登录,并且它是基于图形卡的,所以不是所有的硬件都支持它。
自从framebuffer这个孪生姐妹诞生后,许多软件由只支持SVGALib变为同时支持两者,甚至一些流行的高层函数库如QT 和GTK只支持Framebuffer,作为一个老的图形支持库,SVGALib目前的应用范围越来越小,尤其是在 Linux 内核增加了FrameBuffer驱动支持之后。


1.3 FrameBuffer 
FrameBuffer是出现在Linux 2.2.xx内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接对显存进行读写操作,而写操作可以立即反映在屏幕上。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1 等等。
在应用程序中,一般通过将FrameBuffer设备映射到进程地址空间的方式
来使用,比如下面的程序就打开/dev/fb0设备,并通过mmap系统调用进行地址映射,随后用memset将屏幕清空(这里假设显示模式是1024x766-8位色模式线性内存模式):

FrameBuffer设备还提供了若干ioctl命令,通过这些命令,可以获得显示
设备的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等等。
FrameBuffer 实际上只是一个提供显示内存和显示芯片寄存器从物理内存映
射到进程地址空间中的设备。所以,对于应用程序而言,如果希望在 FrameBuf
之上进行图形编程,还需要完成其他许多工作。FrameBuffer 就像一张画布,用什么样子的画笔,如何画画,还需要你自己动手完成。


1.4 LibGGI 
LibGGI试图建立一个一般性的图形接口,而这个抽象接口连同相关的输入(鼠标、键盘、游戏杆等)抽象接口一起,可以方便地运行在X Window、SVGALib、FrameBuffer等等之上。建立在LibGGI之上的应用程序,不需重新编译,就可以在上述这些底层图形接口上运行。但不知何故,LibGGI的发展几乎停滞。 


二、Linux 图形领域的高级函数库 

2.1 Xlib及其他相关函数库 
  在X Window系统中进行图形编程时,可以选择直接使用Xlib。Xlib实际上是对底层X协议的封装,可通过该函数库进行一般的图形输出。如果你的X Server支持DGA,则可以通过DGA扩展直接访问显示设备,从而获得加速支持。对一般用户而言,由于Xlib的接口太原始而且复杂,因此一般的图形程序选择其他高级一些的图形库作为基础。比如GTK、QT 等等。这两个函数库同时还是一些高级的图形用户界面的支持函数库。由于种种原因,GTK、QT等函数库存在庞大、占用系统资源多的问题

0 0
原创粉丝点击