Linux Graphics

简介

Linux Graphics 主要是指 Linux 是如何在屏幕上显示内容的,可以分为两部分:

  • 一部分是显示服务器,比如X11或者Wayland,它们负责定义系统的窗口,允许第三方开发者使用它们提供的client库来开发Linux GUI程序,也就是负责程序的窗口部分;
  • 另一部分是这些GUI程序内容的渲染,也就是负责窗口中的内容部分。

关于X11或者Wayland部分也可以参考 1.Linux Window System框架介绍

Linux Graphics 发展历史

阶段一

下图是最简单的X11程序架构,X11客户端程序通过X协议和X server通信,从而在屏幕上显示X11程序,这种情况下X11程序的所有绘制都要通过Xserver来进行,Xserver通过调用厂家提供的2D驱动程序来使用GPU。这种情况下客户端无法使用OpenGL来绘制程序内容。

阶段二

为了能让客户端程序使用其它非X11提供的2D绘图方式,因此X11的GLX扩展产生了,它允许客户端使用自己的绘图库来进行程序内容的绘制,比如使用OpenGL来进行3D绘制。但是这种方式所有的OpenGL调用都要先发给Xserver进行中转,性能较低。这种绘制方式称为非直接渲染(Indirect Rendering)。

图中还显示了Framebuffer程序,它可以不依赖Xserver来开发GUI程序。这是因为在内核中针对显示抽象出了Framebuffer设备,通过直接对它进行基于像素的操作就可以直接将内容显示在屏幕上,很多字符界面的终端是用这种方式来显示界面的。目前Linux内核依然支持这种方式。

阶段三

这个时候Linux推出了DRI(Direct Rendering Infrastructure.)框架,它允许客户端不使用root权限,不经过DisplayServer,通过直接调用厂家提供的DRI驱动就可以使用GPU进行绘制。这种方式称为直接渲染(Direct Rendering)。

DRI (Direct Rendering Infrastructure)

DRI是一套框架,一个思想,它提供一种让客户端程序可以绕过DS直接使用GPU的方法,它的实现分散在各个库中,比如DS的client库,Mesa3D,GPU厂家的驱动程序,以及DRM内核子系统中。

阶段四

这里是使用Wayland取代X11之后的结构图,注意这里的EGL并不是Wayland客户端程序可选的,它是默认的,所有的Wayland客户端程序都会通过Wayland-client库间接的使用EGL。关于EGL可以参考这里2.OpenGL介绍的EGL部分。

Linux Graphics 实现

下图展示了Linux Graphics的更多细节。

从这个图里面我们得到以下信息:

  1. 红色字体的Mesa部分提供了很多的lib,其中主要的有实现各种GL协议的libGL,和实现EGL协议的libEGL。
  2. 全屏独占屏幕,不需要窗口管理器的3D游戏可以直接使用各种GL来进行画面显示,图中各种GL的实现是由Mesa提供的libGL库提供(详情见3.Mesa (Linux Graphics Driver)),当然游戏引擎也可以直接调用厂家提供的GL库而避免Mesa的转发,不过这样会导致游戏需要自行适配各个厂家的GL驱动;
  3. Wayland客户端程序通过libwayland-client库(也可以是其它实现了wayland协议的库,比如chromium中的exo模块实现了wayland协议)和Wayland Compositor进行通信,主要是窗口管理部分的功能,其它部分,比如内容渲染是通过直接使用EGL(和其它GL协议)来实现的。
  4. X11客户端程序通过libX或者libXCB库和Xserver进行通信。图中没有画出来GLX,其实X11客户端程序通过GLX也同样实现了让X11客户端可以使用EGL和其它GL协议来绘制X11客户端程序的内容。在Xserver中的2D绘图部分使用GPU厂商提供DDX驱动和libDRM库直接调用。
  5. Wayland和Xserver都要使用KMS(Kernel Model Setting,用来设置显卡的模式以及参数)。

如果

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值