电信200m宽带做网站卡吗,wordpress免费企业主题网站,黄岛网站建设哪家权威,百度收录率高的网站目录
引言
Android图形的关键组件#xff1a;
Android图形的pipeline数据流
BufferQueue是啥#xff1f; 引言
Android提供用于2D和3D图形渲染的API#xff0c;可与制造商的驱动程序实现代码交互#xff0c;下面梳理一下Android图形的运作原理。 应用开发者通过三种方…目录
引言
Android图形的关键组件
Android图形的pipeline数据流
BufferQueue是啥 引言
Android提供用于2D和3D图形渲染的API可与制造商的驱动程序实现代码交互下面梳理一下Android图形的运作原理。 应用开发者通过三种方式将图像绘制到屏幕上CanvasOpenGLES Vulkan
Android图形的关键组件
1图像流生产图像流生产方可以生成图形缓冲区以供消耗。相机预览播放器播放视频OpenGL ES画图
2图像流消耗图像流的消耗方是Surfaceflinger该系统服务会消耗当前可见的 Surface并使用窗口管理器中提供的信息将它们合成到屏幕。
另外我们需要知道 SurfaceFlinger 是可以修改所显示部分内容的唯一服务。 SurfaceFlinger 使用 OpenGL 和 Hardware Composer 来合成一组 Surface。
3HWC显示子系统的硬件抽象实现。 HWC可以将某些合成工作委托给硬件混合渲染器以分担 OpenGL 和 GPU 上的工作量。 SurfaceFlinger 只是充当另一个 OpenGL ES 客户端。因此在 SurfaceFlinger 将一个或两个缓冲区合成到第三个缓冲区中的过程中它会使用 OpenGL ES。这会让合成的功耗比通过 GPU 执行所有计算时更低。硬件混合渲染器 HAL 则进行另一半的工作是所有 Android 图形渲染的中心点。 Hardware Composer 必须支持事件其中之一是 VSYNC另一个是支持即插即用 HDMI 的热插拔。
4Gralloc图形缓存分配器分配图像生产方请求的内存。 图1.Surface如何被渲染
从图1可以看到几个关键组件的基本关系情况
1图像流生产方会持有native框架的Surface
2图像流生产方的窗口信息会由WindowManager管理
3图像流消费方从WindowManager获取渲染信息进行渲染通过HAL提供给HWC进行合成
Android图形的pipeline数据流
下面看看Android图形的pipeline数据流 图2.Android图形的数据流
左侧是生成图形缓冲区的渲染器右侧是合成器HWC是混合渲染器。
结合图形的组件架构有4个理解
第一图形生产方生产的缓冲区包括 1)状态栏STATUS BAR 2)系统栏SYSTEM BAR 3)背景渲染器BACKGROUND RENDERER 4)图标/控件渲染器ICONS/WIDGETS RENDERER
第二从图2看出是通过GPU进行渲染并且通过BufferQueue进行生产方和消费方的流转管理。
第三有些图层是可以直接提交给HWC进行合成的有些是通过SurfaceFlinger进行合成然后再提交到HWC进行最终合成的其中Surfaceflinger合成使用的是OpenGLES来进行渲染合成的。
第四生产方消费方组件之间都是通过BufferQueue粘合起来的
BufferQueue是啥
1BufferQueue是Android图形组件之间的粘合剂
2他们是一对队列可以循环调解缓冲区从生产方到消耗方
BufferQueue 可以在三种不同的模式下运行
Synchronous-like mode同步模式如果生产速度快于消费速度那么生产就会停下来等待消费完再进行生产等待可用的缓冲区。这种方式不会丢弃任何缓冲区。 Non-blocking mode非阻塞模式可以理解为异步模式。这个方式下会生成错误而不是等待缓冲区有助于避免出现死锁现象。这种方式页不会丢弃任何缓冲区。 Discard mode舍弃模式。BufferQueue 可以配置为丢弃旧缓冲区而不是生成错误或进行等待。例如如果对纹理视图执行 GL 渲染并尽快绘制则必须丢弃缓冲区。