首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
iOS渲染概述
返回列表
发新帖
iOS渲染概述
[复制链接]
发表于 2025-12-9 15:05:07
|
显示全部楼层
|
阅读模式
App图形图像的渲染流程
我们在使用UIVIew,Image等组件的时间,是怎么一步步渲染到屏幕上的呢?动画又是怎么实现的?
这里我们先相识几个概念:
1.CPU:CPU重要负责的是逻辑运算,如图像的布局,文本的盘算和排版,图片格式的转换息争码,图像的绘制等。
2.GPU:GPU重要负责图片渲染的运算,它可以把CPU盘算好的表现内容举行纹理渲染,然后把渲染后的内容放入Frame Buffer(帧缓存区)。
注意:GPU相比通用盘算的CPU来讲,其有两个上风:
处理处罚图片盘算的本事要强的多,由于硬件支持T&L(Transform and Lighting,多边形转换与光源处理处罚)
并发本事比CPU也要大 详细对比如下:
3.帧缓存区(双缓冲机制):GPU渲染后的内容会被放到当前屏幕的帧缓存区,不须要额外开发空间,我们知道 iPhone 的屏幕革新率是 60Hz,也就是革新一帧的时间是 16.67 ms, 每隔这段时间视频控制器就会去读一次缓存区的内容来表现。 假如GPU
性能
出现题目,无法在这段时间将更新渲染结果到帧缓存区,那么下一个时间段照旧会出现上一帧的画面,这就是掉帧。
4.视频控制器:视频控制器会读取帧缓冲区中的内容,GPU在开始时会绘制后缓存区中的内容,然后视频控制器读取完内容后,就会去读取后缓存区的内容,然后GPU再绘制前缓存区的内容。也就是说对前后缓存区的读取是瓜代举行。
其根本渲染流程如下:
GPU中的数据从那里来?
对于iOS的UIKit,答案就是OpenGL和Metal
OpenGL是苹果最初的接纳的渲染框架,其具有跨平台、
性能
好,包巨细可控等长处,但是随着图形技能的发展,其他也袒暴露很多题目:
当代 GPU 的渲染管线已经发生变革。
不支持多线程操纵。
不支持异步处理处罚。
因此苹果重新操持了Metal框架,其上风如下:
更高效的 GPU 交互,更低的 CPU 负荷。
支持多线程操纵,以及线程间资源共享本事。
支持资源和同步的控制。
在UIKit中,OpenGL的数据重要从以下三个库得到:
Core Graphics : 基于Quartz的画图引擎,用于运行时绘制图像
Core Image : 处理处罚图像
Core Animation : 核心动画和图层渲染本事
那么我们可以知道iOS平台的渲染框架如下:
这时间你大概会有疑问:我们实际开发中似乎并没有直接调用Core Graphics, Core Animation这些框架,而是使用UIIMageView,UIView这些类,那么UIKit框架又是怎么调用Core框架来渲染的呢?
UIKit实现
在先容UIKit是怎么一步步渲染之前,得先相识UIView和CALayer的区别
UIVIew和CALayer
UIVIew和CALayer体现出了职责分离的头脑,此中,UIView负责触摸事故的处理处罚(继续自
UIResponder
),CALayer负责渲染层(继续自
NSObject
)。之以是如许操持,是由于Mac体系使用的是AppKit,但是无论是UIKit照旧AppKit,底层渲染都是使用CoreAnimation。
在创建UIVIew时,体系会创建一个layer绑定在View的属性上,当我们修改View的圆角、边框等属性时,着实是UIVIew封装了Layer的修改方法,终极的渲染照旧在Layer上,而触摸相应的实现,照旧有UIVIew来完成。
CoreAnimation流水线
终极的绘制都是通过CALayer来完成,那么Core Animation是怎样一步步将CALayer绘制出来呢?
当App须要变更UI的时间,即视图树(也就是UIVIew)发生变革,这时间对应的图层树(也就是Layer)也会跟随变革,CoreAnimation会提交事件来渲染终极的结果
这时间RenderServer会把数据反序列化为渲染树的内容,然后提交给GPU来渲染
GPU收到数据,举行它最善于的图形数据盘算,然后把数据给屏幕
终极,屏幕完成了RGBA在每个像素点上的变更
这里只是一帧的工作,而体系是通过流水线的方式,使得每一帧都能有最新的内容出现,如图:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
浏览过的版块
云原生
Java
Mysql
移动端开发
网络安全
分布式数据库
Oracle
南飓风
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表