Linux系统下的OpenGL图形程序框架
说到图形界面编程,想到的大多是Windows下的多种多样的应用程序。Linux是一个基于命令行的操作系统,在Linux下的工作大多是在命令行里完成的,而并非像Windows那样。图形界面虽然并不是Linux的一部分,我们通过一些工具,依然可以编写一些在Linux下的图形应用程序。
OpenGL是一个工业标准的三维计算机图形软件接口,它由SGI公司发布并广泛应用于Unix、OS/2、Windows/NT等多种平台,这其中当然也包括Linux。
X11也叫做X Window系统,X Window系统 (X11或X)是一种位图显示的 视窗系统 。它是在 Unix 和 类Unix操作系统,以及 OpenVMS 上建立图形用户界面的标准工具包和协议。Linux就是一个类Unix的操作系统。
有了这两个工具,我们便能在Linux下进行图形界面编程了。
1.创建窗口
由于X Window系统的协议和架构 X基于 客户端-服务器 模型,首先创建一个连接,连接到X服务器。
dpy = XOpenDisplay(NULL);
if (dpy == NULL)
fatalError("could not open display");
对于X窗口系统来说,它所使用的OpenGL扩展是作为OpenGL的一个附件提供的,所以还需要检测X服务器是否是支持OpenGL扩展。
if(!glXQueryExtension(dpy, &dummy, &dummy))
fatalError("X server has no OpenGL GLX extension");
接下来就是给窗口找到一个合适的视觉样式。比如有些支持双缓冲,有些不支持,etc。
vi = glXChooseVisual(dpy, DefaultScreen(dpy), dblBuf);
if (vi == NULL)
{
vi = glXChooseVisual(dpy, DefaultScreen(dpy), snglBuf);
if (vi == NULL) fatalError("no RGB visual with depth buffer");
glf_DoubleBuffer = GL_FALSE;
}
if(vi->class != TrueColor)
fatalError("TrueColor visual required for this program");