关于2D/3D图形API的简介
扫描二维码
随时随地手机看文章
xserver提供X服务,X server 不是指某台机器,而是指一个进程,它负责接受客户的要求,在屏幕上显示客户请求的图形,并且把消息(键盘,鼠标,窗口消息)通知客户程序。xclient是X应用终端。
X 视窗系统(X Window System)是一个分布式的、网络透明的、设备独立的、多任务的 windowing 和制图系统,它提供标准工具箱和协议来构建图形用户界面 (GUI), 在 Unix,类 Unix 系统和 OpenVMS-几乎所有的现代操作系统都支持它。X 为 GUI 环境提供基本的架构:绘制和移动屏幕上的视窗和能与鼠标和/或键盘相交互。
OpenGL、OpenGL ES、OpenVG
OpenGL是行业领域中最为广泛接纳的2D/3D图形API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。(既然是API, 那就说明各家都有不同的实现,在性能方面会有差异)OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。OpenGL帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
OpenGL ES是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,它针对多种嵌入式系统专门设计。它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。 OpenGL ES包含浮点运算和定点运算系统描述以及EGL,针对便携设备的本地视窗系统规范。
OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。说白了,就是OpenGL的子集、可以应用于ES上。
OpenVG是针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API。OpenVG现仍处于发展阶段,其初始目标主要面向需要高质量矢量图形算法加速技术的便携手持设备,用以在小屏幕设备上实现动人心弦的用户界面和文本显示效果,并支持硬件加速以在极低的处理器功率级别下实现流畅的交互性能。
2. GLX、EGL:
GLX是OpenGL Extension to the X Window System的缩写。它作为x的扩展,是x协议和X server的一部分,已经包含在X server的代码中了。GLX提供了x window system使用的OpenGL接口,允许通过x调用OpenGL库。OpenGL 在使用时,需要与一个实际的窗口系统关联起来。在不同平台上有不同的机制以关联窗口系统,在Windows上是WGL,在Linux上是GLX,在 Apple OS上是AGL等。
EGL则是OpenGL ES在嵌入式平台上(WGL,GLX,AGL)的等价物。EGL假设OS会提供窗口系统,但EGL与平台无关,并不局限于任何特定的窗口系统,所有用到本地窗口系统的地方都用屏蔽指针来处理。我觉得这就是它易于移植的关键。
3.其它:
Mesa 3D是OpenGL的一个开源本的实现,支持3D硬件加速,X.Org和DRI都使用它作为OpenGL驱动。 DRI是Direct Rendering Infrastructure的缩写。DRI是一个安全且有效率的直接对显示硬件存取的方法。它包含对X server,一些client函数库、以及对内核的变更。DRI的一个主要目的就是提供高效能的OpenGL支持。XGL项目由Novell发起,是一个X server架构,其设计意图在于通过OpenGL驱动充分发挥最新显卡的功能,支持所有X、OpenGL和XVideo的硬件加速。该项目最初于 2006年1月在X.org中发布,但随后由于AIGLX的出现,在2008年1月被X.org抛弃。Xgl可以使用Xglx和Xegl作为后台的 server。作为其衍生品,compiz和Xgl是完全兼容的。
AIGLX是Accelerated Indirect GLX的缩写。该项目由Red Hat和Fedora社区发起。此处Indirect的含义在于:client端应用程序的OpenGL命令首先送给X server,再通过X server调用显卡驱动层的OpenGL接口,这里X协议走的是GLX。Xgl则是另外一种方式:建立一个OpenGL窗口,由OpenGL库直接调用显卡驱动。X.Org 7.1开始,已经加入了AIGLX。
Xglx是Xgl框架的一个后台 server,但他仍然需要一个现有的x server,Xglx通过x server的GLX创建OpenGL窗口,然后使用它,类似于Xnest;同时,Xglx还对x server做一些使用OpenGL显示和绘图的初始化操作。尽管使用另外一个x server显得多余,Xglx却避免了和不同的图形硬件直接打交道。
Xegl是Xgl框架的另一个后台server,继承了Xglx中绘图相关的代码,但它对OpenGL环境的初始化部分,调用的是EGL接口(而非Xglx使用的GLX)。由于一些硬件的闭源驱动不提供支持EGL的接口,Xegl的开发有些停滞。