zoukankan      html  css  js  c++  java
  • 离屏渲染

    一、渲染机制

    CPU将计算好的需要显示的内容提交给GPU,GPU渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照Vsync(垂直脉冲)信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器进行显示。

    image.png

     

    二、GPU屏幕渲染有两种方式

    离屏渲染Off-Screen Rendering 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。离屏渲染结束后,再从离屏切到当前屏幕
    当前屏幕渲染On-Screen Rendering ,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。

    三、以下方式会触发离屏幕渲染

    1.使用系统提供的圆角效果也会触发离屏渲染.

    (masksToBounds = true&&cornerRadius>0才会引发离屏渲染)
     
    2.重写drawRect
     
    3.layer.shadow
    (Shawdow 可以通过指定路径来取消离屏渲染)
     
    4.layer.mask
    (Mask 效果无法取消离屏渲染,使用混合图层的方法来模拟 mask 效果,性能各方面都是和无效果持平。)
     
    5.layer.allowsGroupOpacity
    (GroupOpacity 是指 CALayer 的allowsGroupOpacity属性,UIView 的alpha属性等同于 CALayer opacity属性,
    开启离屏渲染的条件是:layer.opacity != 1.0并且有子 layer 或者背景图。)
    layer.allowsEdgeAntialiasing
    (该属性用于消除锯齿,离屏渲染条件旋转视图并且设置layer.allowsEdgeAntialiasing = true)
     
     
    6.layer.shouldRasterize
    (光栅化会触发离屏渲染,开启 Rasterization=true 后,GPU 只合成一次内容,然后复用合成的结果;合成的内容超过 100ms 没有使用会从缓存里移除,在更新内容时还会产生更多的离屏渲染。对于内容不发生变化的视图,原本拖后腿的离屏渲染就成为了助力)
     

    四、如何检测离屏渲染

    1.模拟器

    模拟器在工作栏上面的Debug -> Color Off-Screen Rendered

    2.真机

    真机在工作栏上面的Debug ->  View Debugging -> Rendering -> Color Off-Screen Rendered Yellow



  • 相关阅读:
    wayland学习笔记(八) wayland为什么要用libffi
    线程安全函数和可重入函数 辨析
    patch的基本使用
    c++ condition_variable的wait 语法糖
    系统启动知识 说道说道(一) 冰山之下
    DDR 带宽计算公式
    wayland学习笔记(七)config的结构分析
    功耗管理篇
    operator=() 重载的问题
    ABC216
  • 原文地址:https://www.cnblogs.com/huangzs/p/10250875.html
Copyright © 2011-2022 走看看