Android图形-架构2

目录

引言

组件概述

底层组件:

上层组件:


引言

Android图形架构主要涉及些什么呢?

1)Android 系统级图形架构的基本元素?

2)应用框架和多媒体系统如何使用这些元素?

3)图形数据的缓冲区是如何在系统中移动的?

  1. Surface 和 EGLSurface 的交互方式?

  2. SurfaceView 和 TextureView 的区别?

6)合成和显示机制是怎样的?

7)合成器提供数据的更高级别的机制?

组件概述

底层组件:

BufferQueue 和 Gralloc:

1)Bufferqueue 连接 图像流的生产者和消费者

2)通过HAL层接口实现gralloc内存分配器用于执行缓冲区分配任务

SurfaceFlinger、Hardware Composer、Vertual Displays:

1)SurfaceFlinger接受来自多个源的数据缓冲区,然后将它们进行合成

2)HWC 使用硬件合成缓冲区

3)虚拟显示屏使合成输出可在系统内部使用(录屏或者通过网络发送屏幕)

Surface、Canvas、SurfaceHolder:

1)Surface可生成一个缓冲区队列,通常是给Surfaceflinger使用的。可以渲染到Surface上,最终传给消费者缓冲区

2)Canvas API提供一种软件实现方法(支持硬件加速)直接在Surface上绘图。是OpneGLES方式绘图的底层替代方案。

3)SurfaceHolder的API可以用于获取和设置Surface的参数(大小和格式)

EGLSurface、OpenGLES:

1)OpenGL ES(GLES)旨在与EGL结合使用的图形渲染API,

2)EGL是一个通过操作系统创建和访问窗口的库。

3)要绘制纹理多边形,请使用 GLES 调用,要将渲染应用到屏幕上,请使用 EGL 调用

4)ANativeWindow,它是 Java Surface 类的 C/C++ 等价类,用于通过原生代码创建 EGL 窗口Surface。

Vulkan:

1)Vulkan 是一种用于高性能 3D 图形的低开销、跨平台 API。

2)与 OpenGL ES 一样,Vulkan 提供用于在应用中创建高质量实时图形的工具。

3)Vulkan 的优势包括降低 CPU 开销以及支持 SPIR-V 二进制中间语言。

上层组件:

SurfaceView、GLSurfaceView:

1)SurfaceView 结合了 Surface 和 View。就是缓冲区队列和View。

2)SurfaceView 的 View 组件由 SurfaceFlinger(而不是应用)合成,从而可以通过单独的线程/进程渲染,并与应用界面渲染隔离。

3)GLSurfaceView 提供了用于管理 EGL 上下文、线程间通信以及与 activity 生命周期的交互的帮助程序类(但不是必须使用 GLES)

SurfaceTexture:

1)SurfaceTexture 将 Surface 和 GLES 纹理相结合来创建 BufferQueue,而您的应用是 BufferQueue 的消费者。

2)当生产者将新的缓冲区排入队列时,它会通知您的应用。您的应用会依次释放先前占用的缓冲区,从队列中获取新缓冲区并执行 EGL 调用,从而使 GLES 可将此缓冲区作为外部纹理使用。

3)Android 7.0 添加了对安全纹理视频播放的支持,以便对受保护的视频内容进行 GPU 后处理。

TextureView:

1)TextureView 结合了 View 和 SurfaceTexture。

2)TextureView 对 SurfaceTexture 进行包装,并负责响应回调以及获取新的缓冲区。

3)在绘图时,TextureView 使用最近收到的缓冲区的内容作为其数据源,根据 View 状态指示,在它应该渲染的任何位置和以它应该采用的任何渲染方式进行渲染。

4)View 合成始终通过 GLES 来执行,这意味着内容更新可能会导致其他 View 元素重绘。

相关推荐
Lei活在当下18 小时前
【项目踩坑实录】并发环境下,Glide缓存引起的图片加载异常
android·debug·glide
西陵18 小时前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
国科安芯19 小时前
AS32S601型MCU芯片电源管理(PMU)模块详解
单片机·嵌入式硬件·性能优化·架构·risc-v
六行神算API-天璇20 小时前
架构思考:大模型作为医疗科研的“智能中间件”
人工智能·中间件·架构·数据挖掘·ar
济南壹软网络科技有限公司20 小时前
企业级盲盒系统:Java高并发架构在多元化抽奖电商中的设计与实践
java·架构·开源源码·盲盒源码·盲盒h5·盲盒app
my_power52020 小时前
检出git项目到android studio该如何配置
android·git·android studio
鹏说大数据1 天前
数据治理项目实战系列6-数据治理架构设计实战,流程 + 工具双架构拆解
大数据·数据库·架构
一水鉴天1 天前
整体设计 定稿 之26 重构和改造现有程序结构 之2 (codebuddy)
开发语言·人工智能·重构·架构
隐语SecretFlow1 天前
【隐语Secreflow】如何配置 Kuscia 对请求进行 Path Rewrit
架构·开源
小二·1 天前
MyBatis基础入门《十四》多租户架构实战:基于 MyBatis 实现 SaaS 系统的动态数据隔离
数据库·架构·mybatis