美文网首页
离屏渲染

离屏渲染

作者: 磊简单 | 来源:发表于2018-09-12 22:31 被阅读0次
    • 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)单独设置一项不会触发离屏渲染。
      • 蒙版
      • 阴影
      • 光栅化
        参考

    相关文章

      网友评论

          本文标题:离屏渲染

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