Linux 下的图形库介绍在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念:Framebuffer, X11, SDL,DFB,miniGUI,OpenGL,QT,GTK,KDE,GNOME等等。一、Linux 图形领域的基础设施1.1X WindowX Window从逻辑上分为三层:X Server、X Client 和 X 协议。最底层的X Server(X 服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将它交给 X Client(X 客户端)作出反馈,而由 XClient传来的输出信息也由它来负责输出;最上层的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.2SVGALibSVGALib是 Linux 下的底层图形库,也是 Linux 系统中最早出现的非 X 图形支持库,它支持标准的VGA图形模式和一些其他的模式,SVGALib的缺点是程序必须以root权限登录,并且它是基于图形卡的,所以不是所有的硬件都支持它。自从 framebuffer这个孪生姐妹诞生后,许多软件由只支持 SVGALib变为同时支持两者,甚至一些流行的高层函数库如 QT和 GTK只支持 Framebuffer,作为一个老的图形支持库,SVGALib目前的应用范围越来越小,尤其是在Linux 内核增加了 FrameBuffer驱动支持之后。1.3FrameBufferFrameBuffer是出现在Linux 2.2.xx内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接对显存进行读写操作,而写操作可以立即反映在屏幕上。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等等。在应用程序中,一般通过将FrameBuffer设备映射到进程地址空间的方式来使用,比如下面的程序就打开/dev/fb0设备,并通过 mmap 系统调用进行地址映射,随后用 memset将屏幕清空(这里假设显示模式是1024x766-8位色模式线性内存模式):FrameBuffer设备还提供了若干ioctl命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描...