美文网首页快速入门iOS
大话iOS之“离屏渲染”

大话iOS之“离屏渲染”

作者: o0阿拉斯加的狗0o | 来源:发表于2016-11-16 23:05 被阅读158次

假设一个开发需求,需要你把头像图片设置成圆形,可能你会毫不犹豫的在键盘上啪啪啪的敲出下面的代码:

self.iconView.layer.cornerRadius = self.iconView.height;
self.iconView.layer.masksToBounds = YES;

告诉你很不幸的是,此时你已经触发了离屏渲染

GPU屏幕渲染的方式有两种

  1. <a name="fenced-code-block"> On-Screen Rendering(当前屏幕的渲染)</a>

    GPU的渲染操作是在当前用于显示的屏幕缓冲区进行。

  2. <a name="fenced-code-block"> Off-Screen Rendering(离屏渲染)</a>

    当使用到圆角,阴影,遮罩的时候,图层属性的混合体被指定为在没有预合成之前不能直接在屏幕中绘制,GPU在当前的屏幕缓冲区之外开辟一个缓冲区,渲染到纹理,最后将结果渲染到帧缓冲区。这会导致在两个缓冲区之间进行切换,由于离屏渲染在每一帧都会发生,所以在滚动界面的时候,如果有大量的离屏渲染就会严重影响帧率。

不要小看这个上下文的切换,它对性能的影响是挺大的,所有的内存访问都是比较慢的,CPU/GPU可以很轻松的完成每秒以亿为单位的运算,但是内存只能以百万为单位。

还有一种比较特殊的渲染,就是CPU渲染,如果我们重写了drawRect方法,并且使用任何的Core Graphics的技术进行绘制,就涉及到了CPU渲染,整个渲染过程同步完成,渲染结束得到的bitmap给GPU用来显示。注意的是,Core Graphics通常是线程安全的,可以异步绘制,然后放到主线程进行显示

在苹果公开的资料中提到,涉及到离屏渲染的操作有:mask, shadow, cornerRadius

Instrument中的Core Animation工具有一个Color Offscreen-Rendered Yellow的选项,它会将已经被渲染到屏幕外缓冲区的区域标记为黄色

Instrument 的 Color Offscreen-Rendered Yellow选项.png 被标记出来的离屏渲染的黄色部分.png

相关文章

  • 大话iOS之“离屏渲染”

    假设一个开发需求,需要你把头像图片设置成圆形,可能你会毫不犹豫的在键盘上啪啪啪的敲出下面的代码: 告诉你很不幸的是...

  • iOS离屏渲染

    iOS-离屏渲染详解关于iOS离屏渲染的深入研究关于离屏渲染这两片文章分析的很详细。 渲染过程 根据渲染流水线示意...

  • iOS离屏渲染解析

    iOS离屏渲染解析

  • iOS圆角的离屏渲染,你真的弄明白了吗

    iOS圆角的离屏渲染,你真的弄明白了吗iOS圆角的离屏渲染,你真的弄明白了吗

  • iOS-离屏渲染探索

    iOS项目性能优化时,不得不提到离屏渲染,为了提升性能,我们要求尽量减少离屏渲染的发生。 那,什么是离屏渲染?离屏...

  • iOS离屏渲染的检测和优化

    在iOS离屏渲染介绍了离屏渲染的逻辑和原理,我们知道离屏渲染对于性能会有较大的消耗,那么开发中怎么避免产生离屏渲染...

  • iOS离屏渲染相关值得看的博客

    博客链接 iOS离屏渲染优化 绘制像素到屏幕上 关于iOS离屏渲染的深入研究 https://texturegro...

  • 三、iOS离屏渲染

    iOS离屏渲染 圆角不一定会造成离屏渲染 GPU屏幕渲染方式 On-Screen Rendering 当前屏幕渲染...

  • iOS性能优化之图片圆角

    在Apple官方文档中多次提出开发时,避免触发离屏渲染效果.离屏渲染触发的情况有很多种,具体可参考iOS离屏渲染相...

  • 离屏渲染

    离屏渲染是在iOS开发过程中脱离不了的话题,那么什么是离屏渲染以及哪些情况会导致离屏渲染呢?以及离谱渲染有哪些优势...

网友评论

    本文标题:大话iOS之“离屏渲染”

    本文链接:https://www.haomeiwen.com/subject/wtarpttx.html