美文网首页OpenGL
三、离屏渲染(Off Screen Rendering)及处理方

三、离屏渲染(Off Screen Rendering)及处理方

作者: 夏天的枫_ | 来源:发表于2020-07-06 22:30 被阅读0次

补充:在iOS中,画圆角并不一定不会发生离屏渲染
APP渲染流程:APP在60FPS的屏幕显示时,GPU会从数据存放帧缓冲区,在60帧时间里,循环读取数据并显示
CoreAnimation 渲染

离屏渲染触发原理

在APP的一个View中,需要进行额外的渲染和合并时,系统会自动开辟Off-Screen Buffer(离屏缓冲区) 和 FrameBuffer(帧缓冲区)组合搭配渲染,最后才显示在屏幕上,这个过程就触发了离屏渲染。如绘制圆角:一个UIButton中,存在多个Layer层,backgroundColor,backgroundImage,border等,需要都绘制圆角时则就会触发离屏渲染。如果仅仅是对backgroundImage or border 单一Layer绘制圆角,则不会触发离屏渲染
劣势:离屏渲染发生时会需要额外的存储空间,在渲染过程中,系统会在离屏缓冲区、帧缓冲区来回切换上下文进行渲染显示,切换过程就会造成性能损耗,且它有大小限制,为屏幕像素点的2.5倍。
优势及使用场景:
1.提高效率,如果效果需要被多次使用,则可以提前渲染到OffScreenBuffer,方便复用;(但其存在时间也很短,如果超过100ms未被使用,则依然会被释放)
2.需要特殊效果,需要使用额外的OffScreen Buffer保存中间状态时,就不得不使用离屏渲染。

画家算法:渲染图层由远及近的一层一层渲染,就会有多个图层。
而苹果是不建议使用多层次图层,会引发性能问题

绘制多图层圆角的两种渲染逻辑
无离屏渲染时逻辑:在图层渲染subLayer①时,完毕后就会将其从帧缓冲区中丢弃。再绘制subLayer②,画完即丢弃,再绘制subLayer③....最后显示。
离屏渲染逻辑:在图层subLayer①渲染时,会将其存放至OffScreenBuffer,读取出来对其进行圆角处理,再subLayer②存放至OffScreenBuffer,对其做圆角处理,同理subLayer③,最后显示在屏幕上。

常见触发离屏渲染情况


常见触发离屏渲染情况.png

推荐了解YYImage的圆角处理方案,避免离屏渲染的发生


YYImage圆角处理
处理方案1.png
处理方案2.png
处理方案3.png

文章推荐

相关文章

  • 离屏渲染

    On-Screen Rendering 在屏渲染 Off——Screen Rendering 离屏渲染 当我们设置...

  • 三、离屏渲染(Off Screen Rendering)及处理方

    补充:在iOS中,画圆角并不一定不会发生离屏渲染APP渲染流程:APP在60FPS的屏幕显示时,GPU会从数据存放...

  • 离屏渲染

    什么是离屏渲染? 离屏渲染(Off-Screen Rendering)顾名思义,指的是GPU在当前屏幕缓冲区以外新...

  • 离屏渲染的理解

    什么是离屏渲染 Off-Screen Rendering意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓...

  • OpenGL之离屏渲染

    什么是离屏渲染 Off-Screen Rendering意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓...

  • 离屏渲染

    On-Screen Rendering Off-Screen Rendering 界面的渲染过程 渲染过程: 如何...

  • iOS 封装了非离屏渲染设置图片和圆角阴影代码

    小Tips:如何知道有没有离屏渲染Off-Screen Rendering?Do:通过模拟器->debug->Co...

  • 图层性能-离屏渲染、光栅化等

    一.离屏渲染 1.在屏渲染、离屏渲染: On-Screen Rendering/在屏渲染:在屏渲染:指的是GPU的...

  • UIImageView添加圆角

    最直接的方法就是使用如下属性设置: 这是离屏渲染(off-screen-rendering),消耗性能的给UIIm...

  • 离屏渲染

    离屏渲染Off-Screen Rendering 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。还...

网友评论

    本文标题:三、离屏渲染(Off Screen Rendering)及处理方

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