IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android显示系统学习回顾 -> 正文阅读

[移动开发]Android显示系统学习回顾

看Android的显示系统相关资料有一段时间了,内容很多,很杂,一直没有贯穿起来。很多资料写的比较难懂。太多的概念,太多的浮云,正所谓“总为浮云能蔽日,长安不见使人愁”。

再看到开发者网站的简介时,似乎有所顿悟,

图形 ?|? Android 开源项目 ?|? Android Open Source Project

曾经通过获取surfaceFlinger中保存的各应用的GraphicBuffer来保存为图片,理解了GraphicBuffer的传送和使用,GraphicBuffer贯穿了上图的显示过程,status bar这些应用通过GPU渲染(使用OpenGL)把画面写到GraphicBuffer中,就是上图的蓝色方块BUFFER QUEUE(buffer queue是对GraphicBuffer使用的封装),然后,SurfaceFlinger中进行画面的合成,这个时候可以使用GPU合成(client),也可以使用HWC合成(device),具体的信息可以看HWC合成。

这样,初步的流程就打通了。然后就可以去看各处理细节。

之前有个疑问:SurfaceFlinger中已经有了各应用(layer)的GraphicBuffer画面,直接叠加计算得到新的内存数据不就行了么,为什么要搞那么复杂?

悟的太迟:叠加计算各坐标的像素值是CPU操作,这个处理太慢。所以就需要GPU和HWC方式。

以下HWC合成的介绍内容来自android官网资料 硬件混合渲染器 HAL ?|? Android 开源项目 ?|? Android Open Source Project

当您考虑使用叠加平面时,很容易发现这种方法的好处,它会在显示硬件(而不是 GPU)中合成多个缓冲区。例如,假设有一部普通 Android 手机,其屏幕方向为纵向,状态栏在顶部,导航栏在底部,其他区域显示应用内容。每个层的内容都在单独的缓冲区中。您可以使用以下任一方法处理合成:

  • 将应用内容渲染到暂存缓冲区中,然后在其上渲染状态栏,再在其上渲染导航栏,最后将暂存缓冲区传送到显示硬件。
  • 将三个缓冲区全部传送到显示硬件,并指示它从不同的缓冲区读取屏幕不同部分的数据。

后一种方法可以显著提高效率。

显示处理器功能差异很大。叠加层的数量(无论层是否可以旋转或混合)以及对定位和重叠的限制很难通过 API 表达。为了适应这些选项,HWC 会执行以下计算:

  1. SurfaceFlinger HWC 提供一个完整的层列表,并询问您希望如何处理这些层?
  2. HWC 的响应方式是将每个层标记为设备或客户端合成。
  3. SurfaceFlinger 会处理所有客户端,将输出缓冲区传送到 HWC,并让 HWC 处理其余部分。

一些比较好的资料:

Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)

Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)_jxt1234and2010的专栏-CSDN博客

还有一位大牛的分享

https://windrunnerlihuan.com/page/2/

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:23:14  更:2021-09-13 09:23:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:13:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码