首页 理论教育 Linux系统编程:图形编程简介

Linux系统编程:图形编程简介

时间:2023-11-16 理论教育 版权反馈
【摘要】:在Linux 图形编程中,基于控制台的图形库主要有:1.SVGALibSVGALib是Linux下的底层图形库,也是Linux系统中最早出现的非X图形支持库,它支持标准的VGA图形模式和一些其他的模式,SVGALib的缺点是程序必须以root权限登录,并且它是基于图形卡的,所以不是所有的硬件都支持它。最初的Allegro运行在DOS环境下,而目前可运行在Linux FrameBuffer控制台、Linux SVGALib、X Window等系统上。

Linux系统编程:图形编程简介

在Linux 图形编程中,基于控制台的图形库主要有:

1.SVGALib

SVGALib是Linux下的底层图形库,也是Linux系统中最早出现的非X图形支持库,它支持标准的VGA图形模式和一些其他的模式,SVGALib的缺点是程序必须以root权限登录,并且它是基于图形卡的,所以不是所有的硬件都支持它。

自从framebuffer这个孪生姐妹诞生后,许多软件由只支持SVGALib变为同时支持两者,甚至一些流行的高层函数库(如QT和GTK)只支持Framebuffer,作为一个老的图形支持库,SVGALib目前的应用范围越来越小,尤其是在Linux内核增加了FrameBuffer驱动支持之后。

2.FrameBuffer

FrameBuffer是出现在Linux 2.2.xx内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接对显存进行读写操作,而写操作可以立即反映在屏幕上。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。

在应用程序中,一般通过将FrameBuffer设备映射到进程地址空间的方式来使用。FrameBuffer设备还提供了若干ioctl命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存大小),与显示模式相关的可变信息(比如分辨率像素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等。

FrameBuffer 实际上只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备。所以,对于应用程序而言,如果希望在 FrameBuf之上进行图形编程,还需要完成其他许多工作。FrameBuffer 就像一张画布,用什么样子的画笔,如何画画,还需要用户自己动手完成。

3.LibGGI

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

4.SDL

SDL(Simple DirectMedia Layer)是一个跨平台的多媒体游戏支持库,其中包含了对图形、声音、游戏杆、线程等的支持,目前可以运行在许多平台上,包括 X Window、X Window with DGA、Linux FrameBuffer控制台、Linux SVGALib,以及Windows DirectX、BeOS等。

因为SDL是专门为游戏和多媒体应用而设计开发的,所以它对图形的支持非常优秀,尤其是高级图形能力,比如Alpha混和、透明处理、YUV覆盖、Gamma校正等。而且在SDL环境中能够非常方便地加载支持OpenGL的Mesa库,从而提供对二维和三维图形的支持。

可以说,SDL是编写跨平台游戏和多媒体应用的最佳平台,也的确得到了广泛应用。相关信息,可参阅http://www.libsdl.org/。

5.Allegro

Allegro是一个专门为x86平台设计的游戏图形库。最初的Allegro运行在DOS环境下,而目前可运行在Linux FrameBuffer控制台、Linux SVGALib、X Window等系统上。Allegro提供了一些丰富的图形功能,包括矩形填充和样条曲线生成等,而且具有较好的三维图形显示能力。由于Allegro的许多关键代码是采用汇编编写的,所以该函数库具有运行速度快、资源占用少的特点。然而,Allegro也存在如下缺点:

(1)对线程的支持较差。Allegro的许多函数是非线程安全的,不能同时在两个以上的线程中使用。

(2)对硬件加速能力的支持不足,在设计上没有为硬件加速提供接口。

有关Allegro的进一步信息,可参阅http://www.allegro.cc/。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈