当前位置: 首页 > news >正文

Android图形-架构2

目录

引言

组件概述

底层组件:

上层组件:


引言

Android图形架构主要涉及些什么呢?
1)Android 系统级图形架构的基本元素?
2)应用框架和多媒体系统如何使用这些元素?
3)图形数据的缓冲区是如何在系统中移动的?
4) Surface 和 EGLSurface 的交互方式?
5) 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 元素重绘。

http://www.lryc.cn/news/156361.html

相关文章:

  • 文字验证码:简单有效的账号安全守卫!
  • Shell 运算符及语法结构
  • 为什么要建前缀索引?
  • vite介绍
  • 2023年软件测试常见面试题
  • 关于const指针的一个常见误区
  • @alilclowcode-engine-ext@1.0.5 不支持安装react@^16.3.0
  • Python之列表操作和内存模型
  • 实习面试记录
  • 总结/笔记-vue中的插槽(默认插槽、具名插槽、作用域插槽)
  • QTday5(QT连接TCP通信)
  • 【Docker】安装RabbitMQ
  • 【如何获取数据库表的字段并拼接】
  • Oracle中LEFT JOIN后AND与WHERE的异同
  • Flink实时计算中台Kubernates功能改造点
  • GO远程构建并调试
  • react使用hook封装一个search+input+checkbox组件
  • 【6】uniform颜色写入
  • 自然语言处理历史史诗:NLP的范式演变与Python全实现
  • 网络协议从入门到底层原理学习(二)—— Mac地址/IP地址
  • 2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆
  • WebClient vs HttpClient:异同对比
  • ES6中导入import导出export
  • 【MySQlL学习笔记】(九)内外连接
  • 敦煌https证书能做些什么
  • React笔记(六)React路由
  • 【算法系列篇】分治-归并
  • word导出为HTML格式教程,同时也导出图片
  • 事务的优化
  • VMware虚拟机安装_新虚拟机创建_CentOS镜像导入_linux指令基本操作