說到圖形界面編程,想到的大多是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");