iOS开发,初探离屏渲染
来源:互联网 发布:3d室内设计软件 编辑:程序博客网 时间:2024/04/30 03:55
一、概念理解
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渲染的效率又可能比离屏渲染好,毕竟离屏渲染要涉及到缓冲区创建和上下文切换等耗时操作。
总之,具体的选择应该由性能测试结果来决定。
参考推酷上的一篇文章:http://www.tuicool.com/articles/2iYbMfE
- iOS开发,初探离屏渲染
- iOS开发,初探离屏渲染
- iOS 【离屏渲染】
- iOS 离屏渲染
- iOS开发:离屏渲染详解和优化措施
- iOS开发之图形渲染分析、离屏渲染、当前屏幕渲染、On-Screen Rendering、Off-Screen Rendering
- iOS之离屏渲染
- iOS离屏渲染优化
- iOS 离屏渲染研究
- iOS-离屏渲染详解
- ios离屏渲染-详解
- 【iOS 笔记】离屏渲染
- iOS 的离屏渲染
- iOS开发初探(一)
- iOS开发初探(二)
- iOS 离屏渲染的研究
- iOS 离屏渲染的研究(二)
- iOS 离屏渲染的研究(一)
- Vi&Vim使用技巧
- 黑马程序员-OC语言-继承
- ios7 push/pop转场动画
- ffmpeg实例muxer/demuxer小结
- 好吧。。虽然A题能力不行。但是我还是有想法的。。QAQ不知道可不可行。
- iOS开发,初探离屏渲染
- java设计模式-单例模式
- nginx的gzip压缩功能的配置
- 快速排序
- 先验分布、后验分布、共轭先验分布
- beta分布和Dirichlet分布
- kl距离以及零值处理方法
- eclipse项目迁移到android studio(图文版)
- 话痨是怎样炼成的