linux-x11架构

|--reference
  https://www.cnblogs.com/newjiang/p/8414625.html

|--X Window System

1) X Window System简称X,或者X11,或者X-Windows。之所以称作X,
  是因为在字母表中X位于W之后,而W是MIT在X之前所使用的GUI系统。
  之所以称作X11,是因为在1987年的时候,X Window System已经进化到第11个版本,
  后续所有的X,都是基于X11版本发展而来的(变动不是很大) 。
  为了方便,后续我们都以X代指X Window System。

2) X最初是由X.org(XOrg Foundation) 维护,
  后来基于X11R6发展出来了最初专门给Intel X86架构PC使用的X,
  称作XFree86(提供X服务,它是自由的,它是基于Intel的PC平台) 。
  而后XFree86发展成为几乎适用于所有类UNIX操作系统的X Window系统,
  因此在相当长的一段时间里,XFree86也是X的代名词。
  再后来,从2004年的时候,XFree86不再遵从GPL许可证发行,
  导致许多发行套件不再使用XFree86,转而使用Xorg,
  再加上Xorg在X维护工作上又趋于活跃,现在Xorg由成为X的代名词
  (具体可参考“http://www.x.org/”) 。

3) X设计之初,制定了很多原则,其中一条
  ----"It is as important to decide what a system is not as to decide what it is”,
  决定了X的“性格”,即:X只提供实现GUI环境的基本框架,
  如定义protocol、在显示设备上绘制基本的图形单元(点、线、面等等) 、
  和鼠标键盘等输入设备交互、等等。
  它并没有实现UI设计所需的button、menu、window title-bar styles等元素,
  而是由第三方的应用程序提供。
  这就是Unix的哲学:只做我应该做、必须做的事情。
  这就是这么多年来,X能保持稳定的原因。
  也是Linux OS界面百花齐放(不统一) 的原因,各有利弊吧,后续文章会展开讨论。

4) X包括X server和X client,它们之间通过X protocol通信。

5) X server接收X clients的显示请求,并输出到显示设备上,
  同时,会把输入设备的输入事件,转递给相应的X client。
  X server一般以daemon进程的形式存在。

6) X protocol是网络透明(network-transparently) 的,也就是说,
  server和client可以位于同一台机器上的同一个操作系统中,
  也可以位于不同机器上的不同操作系统中(因此X是跨平台的) 。
  这为远端GUI登录提供了便利,如上面图片所示的运行于remote computer 的terminal emulator,
  但它却可以被user computer的鼠标键盘控制,以及可以输出到user computer的显示器上。
  注4:这种情况下,user computer充当server的角色,remote computer是client,有点别扭,
  需要仔细品味一下(管理输入设备和显示设备的是server) 。

7) X将protocol封装为命令原语(X command primitives) ,
  以库的形式(xlib或者xcb) 向client提供接口。X client(即应用程序) 利用这些API,
  可以向X server发起2D(或3D,通过GLX等扩展,后面会介绍) 的绘图请求。

|--3D渲染、硬件加速、OpenGL及其它

  渲染(Render) 在电脑绘图中,是指:用软件从模型生成图像的过程。
  模型是用严格定义的语言或者数据结构对于三维物体的描述,
  它包括几何、视点、纹理以及照明信息。图像是数字图像或者位图图像。
  其实我们在GUI编程中习以为常的点、线、矩形等等的绘制,
  也是渲染的过程中,只不过是2D渲染。2D渲染面临的计算复杂度和性能问题没有3D厉害,
  因此渲染一般都是指3D渲染。
  在计算机中,2D渲染一般是由CPU完成(也可以由专门的硬件模块完成) 。
  3D渲染也可以由CPU完成,但面临性能问题,因此大多数平台都会使用单独硬件模块
  (GPU或者显卡) 负责3D渲染。这种通过特定功能的硬件模块,
  来处理那些CPU不擅长的事务的方法,称作硬件加速(Hardware acceleration) ,
  相应的硬件模块,就是硬件加速模块。
  众所周知,硬件设备是多种多样的,为了方便应用程序的开发,
  需要一个稳定的、最好是跨平台的API,定义渲染有关的行为和动作。
  OpenGL(Open Graphics Library) 就是这类API的一种,也是最为广泛接纳的一种。
  虽然OpenGL只是一个API,但由于3D绘图的复杂性,它也是相当的复杂的。
  不过,归根结底,它的目的有两个:
  1) 对上,屏蔽硬件细节,为应用程序提供相对稳定的、
    平台无关的3D图像处理API(当然,也可以是2D) 。
  2) 对下,指引硬件相关的驱动软件,实现3D图像处理相关的功能。
    另外,openGL的一个重要特性,是独立于操作系统和窗口系统而存在的,
  具体可以参考后面软件框架相关的章节。

 

原文地址:https://www.cnblogs.com/xzpin/p/11074290.html