Android的图形架构

基础概念:
BufferQueue: 将生成图形数据缓冲的模块与接收缓冲数据进行渲染或者进一步处理的模块连接起来。
缓冲的内存分配是通过gralloc 内存的分配者通过HAL接口来实现的。
SurfaceFlinger:从多个源接收缓冲数据然后组合并且发送到显示设备。生产者那边将一个Binder通过WindowManager传递给app,然后数据就可以发送给SurfaceFlinger。当vsync信号到来后,SurfaceFlinger将遍历它的layer来寻找新的buffer数据,如果有新的就获取新的数据否则就继续用老的数据。当收集好所有的buffer数据后,它将向HAL获取组装数据的方式。
Hardware Composer(HAL)根据可用硬件决定组装buffer的最高效的方式。
Surface:生成被SurfaceFlinger消费的buffer queue。当在Surface上渲染的时候,最终是将缓冲发送到消费者如显示设备。
SurfaceHolder:任何与View相关的操作都与SurfaceHolder有关,SurfaceHolder有关的api如设置Surface的大小和格式。
SurfaceView包含了一个Surface和view。SurfaceView的内容是由SurfaceFlinger来组合的,渲染的是由一个单独的线程进行的。
SurfaceTexture包含了一个Surface和一个GLES texture。它们创建了一个BufferQueue。
生产者送入一个新的buffer,通知app,app释放之前持有的buffer,从bufferqueue中获取这个新buffer,然后发出EGL call,来让这个buffer可以给GLES作为一个external texture。
TextureView将一个View和一个SurfacTexture结合起来。TextureView负责响应回调和获取新的数据buffer,内容的更新会引起其他view元素的重绘。即TextureView是与UI层一起绘制的。


Surface生成数据--->SurfaceFlinger组装数据-->交由渲染模块显示


SurfaceTexture:

新数据加入BufferQueue-->生成回调onFrameAvailable()-->调用updateTexImage()释放之前持有的数据,从队列中获取新的数据,并且发出一些EGL call来将新的可用的buffer可供GLES作为oes texture使用-->SurfaceView显示视频画面
External textures(GL_TEXTURE_EXTERNAL_OES)和GL_TEXTURE_2D不太一样。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android图形显示系统可以分为两个主要部分:图形系统和显示系统。图形系统负责处理图形渲染和图形处理的功能,而显示系统则负责将渲染后的图像显示在屏幕上。 在图形系统中,有几个组件相互协作。首先是SurfaceFlinger,它是一个系统级的服务,负责管理和合成所有应用程序的图形窗口。SurfaceFlinger使用帧缓冲区(Frame Buffer)来保存图像数据,并将多个应用程序的图像合成为最终的显示图像。然后是OpenGL ES(Open Graphics Library for Embedded Systems),它是一种用于渲染2D和3D图形的API。OpenGL ES可以通过硬件加速来提供更快的图形渲染性能。最后是Skia,它是一个跨平台的2D图形库,用于处理矢量图形和文字渲染。 在显示系统中,有几个关键组件。首先是Display Manager,它负责管理和配置所有连接到设备的显示器。然后是HWC(Hardware Composer),它是一个硬件抽象层接口,用于将图像数据从帧缓冲区发送到显示器。HWC可以通过与GPU和显示驱动程序的协作来实现图像的硬件加速合成和显示。最后是Surface Control,它是一个用于创建和管理Surface的系统服务,Surface是应用程序窗口的抽象表示。 这就是Android图形显示系统的基本架构。通过图形系统和显示系统的协作,Android可以提供丰富的图形渲染和显示功能,从而实现各种各样的应用程序界面和图形效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值