一.渲染的两种模式
- On-Screen Rendering
当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区进行 - Off-Screen Rendering
离屏渲染,指的是GPU在当前的屏幕缓冲区之外新开辟一个缓冲区进行渲染操作
二.何时触发离屏渲染
-
cornerRadius
和masksToBounds
同时作用 - 图层蒙版
- 阴影
- 光栅化
三. 为什么要避免离屏渲染
高级回答:离屏渲染是在GPU上产生的,会触发openGL的多通道渲染管线,造成了额外的开销.有可能会导致cpu+gpu>16.7ms内不能完成一帧的计算,会导致屏幕的卡顿或掉帧.
离屏渲染会开辟新的缓存区,会进行上下文的切换,增加GPU的渲染时间,有可能会导致屏幕卡顿.
四.如何避免离屏渲染
- 使用
UIBezierPath
或者CoreGraph
来绘制圆角
五.tips
iOS9之后,对UIImage使用cornerRadius
和masksToBounds
不会产生离屏渲染了.
网友评论