IOS渲染流程之提交图层数据至RenderThread进程

大致链路

UIView/CALayer---->CoreAnimation./Core Graphics/Core Image---->GPU Drive-->GPU

图层树/视图树

一个UIView(视图)对应一个CALayer(图层),CALayer对应显示的数据其有个content代表Bitamp,渲染流程后的Bitmap被存储在content属性中(这个bitmpa也叫back store)UIView代表视图树对应的CALayer对应图层树

分离UIView和CALayer的目的在于:职责分离,可移植到MAC os上处理。对应于不同的交互UIView(负责响应用户交互,管理视图用于显示正确的图层树)是不同的,而CALayer(图层树)只负责提供Bitmap用于CoreAnimation框架读取组合,CoreAnimation框架可以复用

Core框架处理(组合)

CoreAnimation用于快速组合不同的CALayerr来显示到屏幕上 CoreGraphics用于实时计算,运行时绘制图像的核心图像库,

CoreImage,图像处理分析框架,对已经存在的图像进行处理。运行前处理图像

OPENGL

直接与GPU交互,由GPU的显卡提供商提供,用于2D3D图形渲染。

GPUDrive

链接到GPU

CALayer的content属性

主要职责:提供Bitmap用于CoreAnimatin框架组合显示 纹理就是一个2D图片 该content属性指向一块缓冲区(backing store)就是一个Bitmap纹理。该缓冲区保存的图片叫做寄宿图。

渲染流程基于顶点,基于纹理(直接提供图片):

1.使用图片纹理:contents属性配置

数据类型为id而不是CGImage是为了适配MAC OS系统,MAC OS系统中定义CFImage和NSImage都起作用

2.自己基于顶点来处理数据,手动绘制

顶点的需要自己计算纹理,光照信息用于片段主色器显示颜色

UIView中有一个drawRect方法用于实现自定义绘制,由Core Graphics处理绘制寄宿图, 实现原理:drawRect是CALayer的方法,CALayer中有一个delegete代理的属性,UIView实现了这个代理的协议,因此CALayer请求代理(UIView)得到数据,代理可以设置CALayer的寄宿图content属性

IOS渲染流水线:

各个框架都介绍了提供的数据及处理数据的方式 CoreAnimation用于组合不同的CALayer进行显示

用户更新界面

APP响应用户操作,更新视图树流程:(Application阶段,生成图元信息) 类似于Android的绘制流程 measure,layout,draw

IOS: layout,display,prepare,commit

layout(构建视图)

:添加子视图,调用layoutSubviews,计算视图布局 注意:减少视图层级,视图创建

Display(绘制视图)

Core Grphics进行视图绘制,得到图元信息(对比与Android的canvas在Surface中的内存信息)

prepare(CoreAnimation处理额外的图像解码和转换)
commit(打包发送图元信息):递归将图层信息发送到RenderServer进程,视图树层级越深,效率越低

参考文章:chuquan.me/2018/08/26/...

原文:IOS渲染流程之提交图层数据至RenderThread进程 - 掘金 (juejin.cn)

相关推荐
夏幻灵11 小时前
HTTPS全面解析:原理、加密机制与证书体
ios·iphone
TheNextByte114 小时前
如何在iPhone上恢复已删除的笔记的综合指南
笔记·ios·iphone
rose and war17 小时前
python和jinja版本问题导致的访问报500
python·ios
fendoudexiaoniao_ios17 小时前
iOS 列表拖拽cell排序
ios·swift
2501_9151063217 小时前
当 Perfdog 开始收费之后,我重新整理了一替代方案
android·ios·小程序·https·uni-app·iphone·webview
2501_9159184120 小时前
中小团队发布,跨平台 iOS 上架,证书、描述文件创建管理,测试分发一体化方案
android·ios·小程序·https·uni-app·iphone·webview
家里有只小肥猫20 小时前
uniApp打包ios报错
ios·uni-app
TheNextByte11 天前
将 iPhone数据备份到闪存盘/USB 驱动器的3 种方法
ios·iphone
TheNextByte11 天前
如何在 iPhone 上共享联系人? 【6个有效方法】
ios·iphone
Hubianji_091 天前
[IOS]2026年网络安全、通信技术与计算机科学国际会议(ACCTCS 2026)
计算机网络·安全·web安全·ios·国际会议·国际期刊