linux开发7-图形栈

DRI

DRI是一个安全且有效率的直接对显示硬件存取的方法。它包含对X server,一些client函数库、以及对内核的变更。Direct Rendering Infrastructure 可翻译为:直接着色基础结构(基层直接渲染)。

详细说明

DRI中支持下面这三种格式图像:

  1. RGB:R/G/B分别存于不同的图层中;
  2. YUV:不同压缩格式下的YUV存储方式不一;
  3. C8:通过存储一块映射到RGB的映射表来实现图像信息存储;

DRM

DRM( Direct Rendering Manager)即直接渲染管理器。它是为了解决多个程序对 Video Card 资源的协同使用问题而产生的。它向用户空间提供了一组 API,用以访问操纵 GPU。

简单理解,DRM是Linux下的图形渲染架构,用来管理显示输出和分配buffer。应用程序可以直接操纵 DRM的 ioctl 或者是用 framebuffer 提供的接口进行显示相关操作。后来封装成了 libdrm 库,让用户可以更加方便的进行显示控制。

DRM子系统实现有内核态drm驱动和用户态libdrm库两级,drm驱动对外暴露open、close、ioctl等标准驱动接口,libdrm对drm驱动的进一步封装,向上暴露DRM Api

Linux DRM 子系统,主要提供了以下功能:

  • 操作 Frame Buffer / Plane 接口
  • Buffer 管理
  • 模式设定(分辨率、色深、刷新率等)
    image
    Linux DRM 中的概念:Frame Buffer,Plane,CRTC,Encoder 以及 Connector

1. DRM Framebuffer
它是一块内存区域,可以理解为一块画布,驱动和应用层都能访问它。绘制前需要将它格式化,设定绘制的色彩模式(例如RGB24,YUV 等)和画布的大小(分辨率)。
2. CRTC
阴极摄像管上下文。这个看名字很很难懂,但简单的来说他就是显示输出的上下文,可以理解为扫描仪。CRTC对内连接 Framebuffer 地址,对外连接 Encoder,会扫描 Framebuffer 上的内容,叠加上 Planes 的内容,最后传给Encoder。
3. Planes
平面。它和 Framebuffer 一样是内存地址。它的作用是干什么呢?打个比方,在电脑上,一边打字聊微信一边看电影,这里对立出来两个概念,打字是文字交互,是小范围更新的 Graphics 模式;看电影是全幅高速更新的 Video 模式,这两种模式将显卡的使用拉上了两个极端。

这时Planes就发挥了很好的作用,它给 Video 刷新提供了高速通道,使 Video 单独为一个图层,可以叠加在 Graphic 上或之下,并具有缩放等功能。

Planes 是可以有多个的,相当于图层叠加,因此扫描仪(CRTC)扫描的图像实际上往往是 Framebuffer 和 Planes 的组合(Blending)。
4. Encoder
编码器。它的作用就是将内存的 pixel 像素编码(转换)为显示器所需要的信号。简单理解就是,如果需要将画面显示到不同的设备(Display Device)上,需要将画面转化为不同的电信号,例如 DVID、VGA、YPbPr、CVBS、Mipi、eDP 等。

Encoder 和 CRTC 之间的交互就是我们所说的 ModeSetting,其中包含了前面提到的色彩模式、还有时序(Timing)等。
5. Connector
连接器。它常常对应于物理连接器 (例如 VGA, DVI, FPD-Link, HDMI, DisplayPort, S-Video等) ,它不是指物理线,在 DRM中,Connector 是一个抽象的数据结构,代表连接的显示设备,从Connector中可以得到当前物理连接的输出设备相关的信息 ,例如,连接状态,EDID数据,DPMS状态、支持的视频模式等。

KMS

kernel Mode Setting 内核模式设置

wayland

Wayland是一个简单的“显示服务器”(Display Server),与X Window属于同一级的事物,而不是仅仅作为X Window下X Server的替代(注:X Window下分X Server和X Client)。也就是说,Wayland不仅仅是要完全取代X Window,而且它将颠覆Linux桌面上X Client/X Server的概念,以后将没有所谓的“X Client”了,而是“Wayland Client”。

详细说明

image

image

X Window(X11)

X Window即X Window图形用户接口,是一种计算机软件系统和网络协议,提供了一个基础的图形用户界面(GUI)和丰富的输入设备能力联网计算机。其中软件编写使用广义的命令集,它创建了一个硬件抽象层,允许设备独立性和重用方案的任何计算机上实现。

X11是X window第11版。

详细说明

  • xServer:接收client(应用程序)的请求绘制窗口.并将来自鼠标、键盘等设备的输入传递绘xClient,它位之间采用X协议进行通信。
  • xClient:应用程序,与xServer进行交互通信。

wayland与x11渲染结构:
image

GEM

Graphics Execution Manager 图形管理器

  • 对图像内存(显存)的空间开辟、释放;
  • 不同硬件对同一显存资源访问下的管理;

Mesa

mesa是OpenGL、OpenGL ES、Vulkan、OpenCL的一个开源实现(Open source implementations of OpenGL, OpenGL ES, Vulkan, OpenCL, and more),mesa是基于linux内核的OS上所使用的OpenGL的标准实现。

image

libGL

其就是Mesa编译出来的库.

  • 向client app提供兼容OpenGL的API。
  • 实现GLX API。
  • 在系统中寻找合适的图形驱动。
  • 向图形驱动分发OpenGL的调用。

GLX

mesa实现的接口
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等。

详细说明

AIGLX

简接加速GLX

EGL

也是mesa实现的接口生成libGLES库。
是openGL ES渲染API和原生窗口系统之间的接口,主要用在移动和嵌入式平台。
image

2023年1月 alvin整理。

posted @   alvinlyb  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示