参考文档:
http://www.opengpu.org/forum.php?mod=viewthread&tid=1427
http://liyanrui.is-programmer.com/2009/2/8/glx-notes.7061.htmlhttp://quanminchaoren.iteye.com/blog/919052,(讲解egl的文档)
1. OpenGL与窗口系统之间的图形渲染
OpenGL是操作系统独立的和窗口系统独立的。为了将它结合到各种窗口系统中,需要利用附加库,为此每个窗口系统有它自己的特定的库和函数。
在Linux上,X Windows系统和OpenGL之间的“桥梁”是GLX,
在微软的Windows上则是WGL,
Mac OS 窗口系统中使用的是AGL 来解决OpenGL与窗口系统之间的图形渲染问题。
EGL 是 OpenGL ES 和底层 Native 平台视窗系统之间的接口,EGL 是为 OpenGL ES 提供平台独立性而设计。
OpenGL ES 为附加功能和可能的平台特性开发提供了扩展机制,但仍然需要一个可以让 OpenGL ES 和本地视窗系统交互且平台无关的层。 OpenGL ES 本质上是一个图形渲染管线的状态机,而 EGL 则是用于监控这些状态以及维护 Frame buffer 和其他渲染 Surface 的外部层。
下面是一个典型的 EGL 系统布局图。
OpenGL ES是一个平台中立的图形库,在它能够工作之前,需要与一个实际的窗口系统关联起来,这与OpenGL是一样的。但不一样的是,这部份工作有标准,这个标 准就是EGL。而OpenGL时代在不同平台上有不同的机制以关联窗口系统,在Windows上是wgl,在X-Window上是xgl,在Apple OS上是agl等。EGL的工作方式和部份术语都接近于xgl。
2. OpenGL工作原理
实现模式
OpenGL的实现有两种模式:泛型实现和硬件实现。
泛型实现即软件实现,也就是对OpenGL函数调用做出响应创建三维图像的软件函数库。
OpenGL的硬件实现又称为加速实现,通常采用图形卡驱动程序的形式。
一般来说,如果安装系统时使用操作系统自带的显卡驱动程序,那么OpenGL程序就会运行在泛型实现模式下,而安装显卡驱动程序之后,OpenGL就会运行在硬件实现模式下。
Linux上通常使用直接渲染结构(Direct Rendering Infrastructure, DRI)提供加速的OpenGL实现。Mesa是一个开源的OpenGL实现,通常它是作为DRI的核心与DRI一起完成OpenGL硬件实现,而当3D图形硬件不在Mesa支持或使用的范围内时,Mesa完成OpenGL的泛型实现。一般来说,Linux上3D图形硬件驱动是基于DRI的,但是也有一些例外,