美文网首页
iOS开发,初探离屏渲染

iOS开发,初探离屏渲染

作者: 角灯的技术博客 | 来源:发表于2017-10-16 22:53 被阅读25次

一、概念理解

OpenGL中,GPU屏幕渲染有以下两种方式:
On-Screen Rendering

意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。
Off-Screen Rendering

意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

二、离屏渲染的是是非非

相比于当前屏幕渲染,离屏渲染的代价是很高的,主要体现在两个方面:
创建新缓冲区

要想进行离屏渲染,首先要创建一个新的缓冲区。
上下文切换

离屏渲染的整个过程,需要多次切换上下文环境:先是从当前屏幕(On-Screen)切换到离屏(Off-Screen);等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上有需要将上下文环境从离屏切换到当前屏幕。而上下文环境的切换是要付出很大代价的。
三、离屏渲染触发方式
设置了以下属性时,都会触发离屏绘制:
shouldRasterize(光栅化)
masks(遮罩)
shadows(阴影)
edge antialiasing(抗锯齿)
group opacity(不透明)

光栅化是栅格化,像素化的意思,就是把矢量图形转化为像素点的过程.
抗锯齿就是消除图像显示中那些锯齿化图像.具体了解可以看这里
需要注意的是,如果shouldRasterize被设置成YES,在触发离屏绘制的同时,会将光栅化后的内容缓存起来,如果对应的layer及其sublayers没有发生改变,在下一帧的时候可以直接复用。这将在很大程度上提升渲染性能。
而其它属性如果是开启的,就不会有缓存,离屏绘制会在每一帧都发生。

四、另一种特殊的“离屏渲染”

按照之前的说法,如果将不在GPU的当前屏幕缓冲区中进行的渲染都称为离屏渲染,那么就还有另一种特殊的“离屏渲染”方式: CPU渲染

如果我们重写了drawRect方法,并且使用任何Core Graphics的技术进行了绘制操作,就涉及到了CPU渲染。整个渲染过程由CPU在App内 同步地
完成,渲染得到的bitmap最后再交由GPU用于显示。
五、Instruments
Instruments的Core Animation工具中有几个和离屏渲染相关的检查选项:
Color Offscreen-Rendered Yellow

开启后会把那些需要离屏渲染的图层高亮成黄色,这就意味着黄色图层可能存在性能问题。
Color Hits Green and Misses Red

如果shouldRasterize被设置成YES,对应的渲染结果会被缓存,如果图层是绿色,就表示这些缓存被复用;如果是红色就表示缓存会被重复创建,这就表示该处存在性能问题了。
六、如何抉择
现在摆在我们面前得有三个选择:当前屏幕渲染、离屏渲染、CPU渲染,该用哪个呢?这需要根据具体的使用场景来决定。
尽量使用当前屏幕渲染

鉴于离屏渲染、CPU渲染可能带来的性能问题,一般情况下,我们要尽量使用当前屏幕渲染。
离屏渲染 VS CPU渲染

由于GPU的浮点运算能力比CPU强,CPU渲染的效率可能不如离屏渲染;但如果仅仅是实现一个简单的效果,直接使用CPU渲染的效率又可能比离屏渲染好,毕竟离屏渲染要涉及到缓冲区创建和上下文切换等耗时操作。
总之,具体的选择应该由性能测试结果来决定。

相关文章

  • iOS开发,初探离屏渲染

    一、概念理解 OpenGL中,GPU屏幕渲染有以下两种方式:On-Screen Rendering 意为当前屏幕渲...

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

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

  • iOS性能优化之图片圆角

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

  • 离屏渲染

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

  • iOS 离屏渲染初探

    只是针对大量图片的时候 ,对于少量的图片没必要考虑离屏渲染的问题,使用以下代码实现圆角是最方便的了相信这已经是总所...

  • 离屏渲染

    iOS离屏渲染优化(附DEMO) - CocoaChina_让移动开发更简单

  • 离屏渲染的探究

    什么是离屏渲染 作为一个 iOS 开发者,你肯定听说过离屏渲染,什么是离屏渲染呢? 案例 在模拟器上显示一张裁剪的...

  • iOS离屏渲染

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

  • iOS shouldRasterize光栅化--离屏渲染

    参考资料:ios开发中view.layer.shouldRasterize = YES 的使用说明iOS 离屏渲染...

  • iOS离屏渲染解析

    iOS离屏渲染解析

网友评论

      本文标题:iOS开发,初探离屏渲染

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