【chromium】 渲染显示相关概念
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,它的主要功能如下:
- 和本地窗口系统(native windowing system)通讯;
- 查询可用的配置;
- 创建OpenGL ES可用的“绘图表面”(drawing surface);
- 同步不同类别的API之间的渲染,比如在OpenGL ES和OpenVG之间同步,或者在OpenGL和本地窗口的绘图命令之间;
- 管理“渲染资源”,比如纹理映射(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。
【chromium】 渲染显示相关概念的更多相关文章
- Chromium如何显示Web页面
Displaying A Web Page In Chrome 概念化的应用分层 参见原文档:http://goo.gl/MsEJX 每一个box代表一个抽象层.下层不依赖于上层. WebKit:渲染 ...
- 浏览器-07 chromium 渲染1
Chromium 软件渲染 软件渲染就是利用CPU,根据一定的算法来计算生成网页的内容; Chromium都是用软件渲染的技术来完成页面的绘制工作(除非强行打开硬件加速绘制); 软件渲染基础和架构 R ...
- 浏览器-08 chromium 渲染2
Chromium 硬件加速合成 一个网页通常可以包
- chromium截图实现
声明:本blog是我自己写的,假设要转载,请注明:come from blog of niba! chromium终于显示是在ContentView上.但通过硬件加速.渲染合成的网页之前是在surfa ...
- 【Chromium中文文档】沙箱FAQ
沙箱FAQ 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox ...
- Chromium Graphics: Android L平台上WebView的变化及其对浏览器厂商的影响分析
原创文章.转载请以链接形式注明原始出处为http://blog.csdn.net/hongbomin/article/details/40799167. 摘要:Google近期公布的Android L ...
- iOS 事件处理机制与图像渲染过程(转)
iOS 事件处理机制与图像渲染过程 iOS RunLoop都干了什么 iOS 为什么必须在主线程中操作UI 事件响应 CALayer CADisplayLink 和 NSTimer iOS 渲染过程 ...
- iOS 事件处理机制与图像渲染过程
Peter在开发公众号功能时触发了一个bug,导致群发错误.对此我们深表歉意,并果断开除了Peter.以下交回给正文时间: iOS 事件处理机制与图像渲染过程 iOS RunLoop都干了什么 iOS ...
- 自定义HTTP错误页太小,导致显示默认友好错误页问题
一 . 问题描述: chrome 向服务器发送构造字符串,返回错误页面如下 <html> <head> <title>404 Not Found</title ...
随机推荐
- Node.js自动本地重启服务器
node.js在本地项目中,更新 了代码 是不会自动刷新 的,要重启才能生效,每次更改代码又手动重启这样很麻烦. 可以安装 个supervisor.全局安装supervisor npm install ...
- FPM十:FORM Repeater
1.创建feeder class:ZCL_FPM_FORM_REP_DEMO 添加接口类: 2.新建全局内表: DATA:GT_QPGT TYPE TABLE OF QPGT. 3.实列化get_da ...
- 彻底搞懂JVM类加载器:基本概念
本文阅读时间大约9分钟. 写在前面 在Java面试中,在考察完项目经验.基础技术后,我会根据候选人的特点进行知识深度的考察,如果候选人简历上有写JVM(Java虚拟机)相关的东西,那么我常常会问一些J ...
- 简单mvc---模拟Springmvc
1.注解篇 Auwowrited package org.aaron.mvc.annaotation; import java.lang.annotation.Documented; import j ...
- SELECT语句基础
列的查询 语法1-1 基本的SELECT语句 SELECT <列名>,... FROM <表名>; 语法1-2 查询出表中所有的列 SELECT * FROM <表名& ...
- Linux shell简单创建用户脚本
前面介绍简单的shell编写规则. 现在开始编写一个简单的shell脚本. Linux shell介绍 编写shell脚本 1.创建脚本文件 2.根据需求,编写脚本 3.测试执行脚本 ...
- Android Studio总结
课程背景 相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,G ...
- phpcms网站迁移无法更新内容提示Table 'led_com.lz_' doesn't exist的解决方法
新接的一位客户说要把旧phpcms网站迁移到新的服务器并更换新域名,这对ytkah是小菜一碟,但往往事与愿违,忽略了一些细节会很惨的.进入新站后台怎么都无法生成内容,提示Table 'led_com. ...
- python--协程知识初识
线程和进程的操作是由程序触发系统接口,最后的执行者是系统:协程的操作则是程序员. 协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续).协程 ...
- Pandas | 14 统计函数
统计方法有助于理解和分析数据的行为.可以将这些统计函数应用到Pandas的对象上. pct_change()函数 系列,DatFrames和Panel都有pct_change()函数.此函数将每个元素 ...