作品分享
问答交流
发现
任务
客服工单
1、CPU阶段: CPU的盘算重要是通过CoreAnimation来处理处罚,通过OpenGL ES/Metal将数据传递给GPU。 2、GPU阶段: GPU渲染重要是将吸收到的渲染数据举行一系列渲染之后将帧数据存储在帧缓存(Frame Buffer)内里,供视频控制器调用。 3、屏幕体现: 视频控制器从帧缓存中获取到帧数据体如今屏幕上。
程度同步信号:当电子枪换行扫描时会发出一个程度同步信号。 垂直同步信号:当一帧完成绘制后,电子枪规复到原来的位置预备扫描下一帧时体现器会发出一个垂直同步信号。
理想环境下,屏幕革新频率和帧率完全同等,也就是说当屏幕体现完一帧的时候刚好下一帧画面也天生直接体如今屏幕上,但现实上这两个频率并不完全同等,为了办理这个题目,引入的【帧缓存】的概念。
垂直同步信号包管GPU的渲染只有等到体现器发出【垂直同步信号】之后才会举行下一帧的渲染。 双缓存包管体现器会交织读取两个缓存区的内容,相当于是拿空间换时间的一种策略。 利益在于: 不浪费CPU、GPU资源,包管提前渲染好的位图有一个缓存区来生存,如许GPU可以就可以举行下一帧的处理处罚。 镌汰掉帧的出现。
增补: 掉帧指的是重复渲染同一帧数据而不是指某一帧丢掉了不渲染。 为了镌汰【掉帧】的环境,有的会引入【三缓存】+【垂直同步信号】,好比安卓装备。
结论: 满足以下条件的就会发生离屏渲染: clipsToBounds开启,圆角 > 0,contents上有内容 同时修改了contents+backgroundColor 或 contents+border(iOS9之后)
优化: 直接让UI提供带圆角的图片 使用UIBezierPath和CAShapeLayer 使用UIBezierPath和CoreGraphics
设置遮罩的流程如下: 渲染layer的mask纹理 渲染layer的content纹理 归并利用:归并mask 和 content纹理
结论: 满足以下条件的都会触发离屏渲染: 设置了mask + 恣意contents(好比设置UILabel笔墨、配景颜色、图片等)
结论: 阴影的本质和layer类似,都是在layer下一层多添加一层,根据前面提到的【画家算法】无法一次性天生,以是会发生离屏渲染。
优化: 使用UIBezierPath给视图添加一个阴影路径,相当于提前告诉GPU这个阴影的多少形状,如许阴影就可以独立渲染。
光栅化: 光栅化是一种缓存机制,开启后会缓存这个图片的bitmap,如果对应的layer和sublayers没有发生厘革,就可以直接使用缓存而不用GPU再举行渲染,从而进步性能。 注意: 光栅化只能缓存100ms,而且只能存储屏幕巨细2.5倍的数据,缓存空间非常有限。
allowsGroupOpacity: alpha并不是分别应用到每一层上,而是整个layer图层树完成之后,再同一加上alpha,然后和底下其他像素举行融合。 注意: iOS7之后allowsGroupOpacity默以为YES,如许做的缘故原由是为了保持子视图和父视图保持同样的透明度。
allowsGroupOpacity触发离屏渲染的条件: 当视图上有其他子视图 视图View的alpha值在0 ~ 1之间 视图view.layer.allowsGroupOpacity = YES
举报
Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )
GMT+8, 2024-11-21 21:09, Processed in 0.150726 second(s), 35 queries.© 2003-2025 cbk Team.