离屏渲染

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

Off-Screen Rendering

离屏渲染,指的是GPU在当前屏幕缓冲区以为新开辟一个缓冲区进行渲染操作。
在使用圆角、阴影和遮罩等视图功能的时候,图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制,所有就需要在屏幕外的上下文中渲染,即离屏渲染。
离屏渲染之所以耗性能,是因为要创建一个屏幕外的缓冲区,然后再完成渲染。其中创建缓冲区和切换上下文最消耗性能,绘制不是消耗性能的主要原因。
  • 界面的渲染过程
RunLoop有一个60fps的回调,即每隔16.7ms绘制一次屏幕,所以view的绘制必须在这个时间内完成,view内容的绘制是cpu的工作,然后把绘制的内容交给GPU渲染包括多个view的拼接(Compositing),纹理渲染(Texture)等等,最后显示在屏幕上。
但是如果在16.7ms内无法完成绘制,就会出现丢帧情况,一般情况下如果帧率保持在30fps以上,界面的卡顿效果不明显,那么就需要在33.4ms内完成view的绘制,而低于这个帧率就会产生卡顿效果,影响体验。
  • 渲染过程:
UIView 的layer层有一个content,指向一块缓存,即backing store。
UIView 的绘制时会调用drawRect方法,通过context将数据写入backing store。
在 backing store 写入完成后,通过 rending server 交给GPU 去渲染,将backing store 中的bitmap数据显示在屏幕上。
  • 如何触发离屏渲染
    • 圆角(maskToBounds = YES)单独设置一项不会触发离屏渲染。
    • 蒙版
    • 阴影
    • 光栅化
      参考
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 图像显示原理 图像显示的大概流程: 程序运行从内存中读取数据对图片进行解压得到像素数据,若GPU不支持图片的颜色格...
    foreverSun_122阅读 715评论 0 2
  • 相比于当前屏幕渲染,离屏渲染的代价是很高的,这也是iOS移动端优化的必要部分。 OpenGL中,GPU屏幕渲染有以...
    一个人在路上走下去阅读 9,087评论 0 74
  • Core Animation工具用来监测Core Animation性能。它给我们提供了周期性的FPS,并且考虑到...
    F麦子阅读 869评论 0 1
  • 一、概述 OpenGL ES是一套多功能开放标准的用于嵌入系统的C-based的图形库,用于2D和3D数据的可视化...
    湾里有桃树阅读 586评论 0 0
  • GPU渲染机制: CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会...
    寻找最亮的光阅读 4,785评论 1 19

友情链接更多精彩内容