这几天,终于对glx有一些概念,虽然对于整个架构还不是特别明晰,却也能基本清楚一些层次结构。
首先,从opengl说起。opengl是工业标准,是一套2d, 3d的图形库,一般的显卡都提供这套库,这套库来实现基本的图形绘制。这套库可能是纯软件的实现,图形放大缩小,旋转等完全由cpu来计算。也可以是有专门的图形芯片gpu来计算,这就是所谓的图形硬件加速。
本来,通过opengl,已经可以实现图形的绘制,为什么还需要glx呢?这是问题的关键。glx从某一个方面来讲。是为了支持本地窗口系统。也就是说,如果使用纯opengl编程,是没法让窗口管理器对其进行管理的。比如说linux上的窗口管理器是x的一个客户端,它管理的只是x的顶极窗口。
那这又是怎么实现的呢?这就要牵涉到一个画布的概念。每个应用程序都有一个或者多个顶极x窗口,其实这个窗口就相当于一个画布,应用程序可以在这个画布上,调用一些画线画点等的api,来这个画布上进行绘制。所谓画线,其实也就是在图形缓冲区里填充一些像素值,当然如果是cpu来运算的话,就是一个点一个点的填充,而如果用到gpu硬件加速的话,就可以由gpu来做这中运算,而把cpu解放出来了。
最后回到glx话题,glx作为x server的一个后端,通过调用opengl的库来实现gl窗口,最后应用程序不再直接调用opengl的api函数,而是调用glx的api函数,通过glx,再调用opengl,opengl再操作显卡来绘制图形。