文档章节

【chromium】 渲染显示相关概念

o
 osc_g8254g7s
发布于 2019/08/19 20:42
字数 1055
阅读 28
收藏 0

精选30+云产品,助力企业轻松上云!>>>

DRM(Direct Rendering Manager)

DRM 由两个部分组成:一是 Kernel 的子系统,这个子系统对硬件 GPU 操作进行了一层框架封装。二是提供了一个 libdrm 库,里面封装了一系列 API,用来进行图像显示。 说到这里,其实这么理解最简单,你把你要画的东西交给DRM,DRM会把要画的东西交给GPU,然后显示。 那么DRM存在的必要性是什么呢?

DRM是Linux驱动(显卡驱动?)和显卡挨得比较近,再上层才是OpenGL,DRM是显卡驱动的一种架构。

OpenGL

OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。
OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备(显卡)厂商提供,而且非常依赖于该厂商提供的硬件(因为显卡厂商会提供一些GPU提供的API,直接使用这样的API绘图被称为硬件加速)。

开放源代码库Mesa是一个纯基于软件的图形API(即不咋支持硬件加速,毕竟不收钱),它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API(或者说是开源版本的OpenGL)。

那么OpenGL可以干什么呢?简单地举个例子,你想画一条线,这个线有一些特征,什么颜色,都能由OpenGL提供的API设置,然后绘制出来,这些API可以完全通过软件实现,但是OpenGL为大部分或者全部都使用硬件加速设计的(都由GPU提供的API来绘制的话更快)。

上面提到的软件实现是指由OpenGL内部实现在内存中绘制,然后将内存交给GPU绘制。

和其同级的还有微软的DirectX,Vulkan

另外还有专为嵌入式实现的OpenGL ES版本

EGL

EGL是由Khronos Group提供的一组平台无关的API,它的主要功能如下:

  1. 和本地窗口系统(native windowing system)通讯;
  2. 查询可用的配置;
  3. 创建OpenGL ES可用的“绘图表面”(drawing surface);
  4. 同步不同类别的API之间的渲染,比如在OpenGL ES和OpenVG之间同步,或者在OpenGL和本地窗口的绘图命令之间;
  5. 管理“渲染资源”,比如纹理映射(rendering map)。

可以看出EGL和OpenGL是有关联的,EGL能给OpenGL的使用提供一些帮助。EGL是位于OpenGL和本地平台窗口系统(例如X11或者wayland)之间的一层接口。用于帮助OpenGL绘制的图形显示在窗口系统中。

GBM(Generic Buffer Management)

了解到GBM还是在Chromium的开源项目中,它和EGL功能类似,但是比EGL功能多一些。

gbm(通用缓冲区管理),它提供了一种为Mesa绑定的图形渲染分配缓冲区的机制。GBM旨在被当做一个本地平台为了工作在DRM上的EGL或者openwfd。它创建的句柄可用于初始化EGL和创建渲染目标缓冲区。
Mesa GBM是图形驱动程序特定缓冲区管理API(例如各种libdrm_ *库)的抽象,通过调用Mesa GPU驱动程序在内部实现。
例如,Wayland合成器 Weston使用OpenGL ES 2进行渲染,它通过调用EGL进行初始化。由于服务器在“裸KMS驱动程序 ”上运行,因此它使用EGL DRM平台,它可以真正称为GBM平台,因为它依赖于Mesa GBM接口。
在XDC2014,Nvidia员工Andy Ritger提议增强EGL以取代GBM。

这么理解会比较好,EGL对于OpenGL就相当于Mesa GBM对于Mesa。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
浏览器内核-基本常识

一. 浏览器内核的概念 首先解释下什么叫做浏览器内核,英文名为Rendering Engine,我更愿意翻译为渲染引擎.虽然比较直白,但是浏览器内核的含义在我看来就是如此.它主要的职能就是负责对网页的语...

顽Shi
2014/01/21
1K
1
浏览器内核-基本常识

一. 浏览器内核的概念 首先解释下什么叫做浏览器内核,英 文名为Rendering Engine,我更愿意翻译为渲染引擎.虽然比较直白,但是浏览器内核的含义在我看来就是如此.它主要的职能就是负责对网页的...

mjhuang
2014/06/15
386
3
浏览器内核与JS引擎

一、主要概念 1,浏览器内核   最初内核的概念包括渲染引擎与JS引擎,目前习惯直接称渲染引擎为内核,JS引擎独立。 最初: 因此以前称,chrome浏览器使用Chromium内核,blink渲染引擎,V8J...

osc_hga8xu1h
2019/10/22
2
0
webkit

https://juejin.im/post/5b0b7d74518825158e173a0c 网站性能监测与优化策略12s to 1s Chrome 页面呈现原理与性能优化之公司级分享总结(内附完整ppt) 前端性能优化之自定义性能指标及上报方法...

Bigben
03/12
0
0
从“快稳省安全”看Chromium——Chromium学习系列

前言 对于不同的角色,浏览器有着不同的意义: 普通用户通过它来浏览网页,在乎的是稳定,高效和安全; 前端开发同学关心的是兼容性和性能优化。我们可以通过学习Chromium的内部机制,更好的...

发客
2019/03/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用amoeba实现mysql读写分离

转载马士兵连老师笔记 使用amoeba实现mysql读写分离 1、什么是amoeba? Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、...

兵荒马乱的青春
20分钟前
0
0
学Vue,就要学会vue JSX(二)

学习JSX,先了解一下createElement 提到JSX,不可避免的就要提到createElement,当你看完本节,你会发现,奇怪的知识又增多了。ok,我们接着上一部分继续讲。这一次的准备工作是了解createEleme...

osc_kurqu050
20分钟前
17
0
学Vue,就要学会vue JSX(三)

是时候使用JSX代替createElement了 接着上面的讲,当我们看到上面用createElement去实现组件,太麻烦了,别说工作效率提高了,就是那些嵌套可以嵌套正确就很赞了,所以我们需要用JSX去简化整...

osc_tq5hz9vv
22分钟前
13
0
protocol buffer使用

protocol buffer使用例子 protocol buffer是什么 https://developers.google.com/protocol-buffers 这是protocol buffer的官方网站,上边有详细的使用方式。 一般常见的序列和反序列方式就是...

RandomObject
23分钟前
7
0
小白的前端之路-HTMl

HTML——超文本标记语言 HTMl里面有标签,标签又分为单标签和双标签,也分为行级元素和块级元素 标签是用<>包裹起来的,而且必须要有<>,否则会直接显示在浏览器上面哦 现在介绍一下常用标签...

osc_e45irv7l
23分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部