• 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的一个重要特性,是独立于操作系统和窗口系统而存在的,
      具体可以参考后面软件框架相关的章节。

     

  • 相关阅读:
    如何判断 DataRow 中是否存在某列????
    jquery操作table中的tr,td的方法双击dblclick attr parent id原创
    oracle 取当天日期减一天 应该如何写
    走出“搜索引擎营销”三个误区
    解决方案是什么
    强制远程连接 命令
    ORACLE 异常错误处理
    HttpClient是否有默认并发数限制?
    多线程下载程序的功能需求
    STL线程库简介
  • 原文地址:https://www.cnblogs.com/xzpin/p/11074290.html
Copyright © 2020-2023  润新知