经典面试题30 - 离屏渲染

经典面试题30 - 离屏渲染_第1张图片

问题

请解释什么是离屏渲染?

解答

离屏渲染是GPU屏幕渲染的一种,一般可以分为三种类型:

  • On-Screen Rendering,意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。
  • Off-Screen Rendering,意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
  • CPU中的离屏渲染,如我们重写了drawRect方法,且使用任何Core Graphics的技术进行了绘制操作,就涉及到了CPU渲染,因为GPU不支持未知的渲染方式。

GPU内置支持的内容包括View的拼接(Compositing)、纹理的渲染(Texture)等。

当前屏幕渲染不需要额外创建新的缓存,也不需要开启新的上下文,相对于离屏渲染性能更好。但是受当前屏幕渲染的局限因素限制(只有自身上下文、屏幕缓存有限等),当前屏幕渲染有些情况下的渲染解决不了的,就使用到离屏渲染。

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

  • 创建新缓冲区
  • 上下文切换

离屏渲染的整个过程,需要多次切换上下文环境:先是从当前屏幕切换到离屏,等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上,而上下文环境的切换是要付出很大代价的。

既然离屏渲染这么耗性能, 为什么有这套机制呢?
因为图层属性的混合体没有预合成之前不能直接在屏幕中绘制,而需要在别的地方做额外的处理预合成。所以就需要屏幕外渲,不论是CPU还是GPU。

由于屏幕渲染很消耗性能,使用不当会造成应用卡顿,从而影响用户体验。
在iOS开发中,设置了以下属性时,就会触发离屏绘制,使用时要特别小心。

  • shouldRasterize(光栅化)
  • masks(遮罩)
  • shadows(阴影)
  • edge antialiasing(抗锯齿)
  • group opacity(不透明)
  • 复杂形状设置等
  • 渐变

更多

经典面试100题 - 持续更新中

获取更多内容请关注微信公众号豆志昂扬:

  • 直接添加公众号豆志昂扬
  • 微信扫描下图二维码;
经典面试题30 - 离屏渲染_第2张图片

你可能感兴趣的:(经典面试题30 - 离屏渲染)