zoukankan      html  css  js  c++  java
  • 双缓冲 三缓冲

    双缓冲 buffer: a b(front back)

    三缓冲 buffer: a b c(front back pending)

    cpu 为绘制准备commandbuffer的内容

    gpu 往buffer上画

    显卡的内容呈现到显示器 (这里开了垂直同步需要等垂直同步信号 60 30 20 15.....60hz显示器)

    gpu画完a,要画b时,如果b处于画完了还没有呈现到显示器的阶段,

    双缓存的GPU只能wait,(等垂直同步信号

    三缓存的GPU可以往c(pendingbuffer)上画不用等 ,(提升了GPU的利用率

    在GPU画完a时, 垂直信号没有来,这样并不能swap,整个pipelilne就被阻塞了,

    也就是说这种情况下,你开了垂直同步帧率就会掉过30,变成20,实际关了垂直同步是可以达到28的,但关垂直同步会有tearing,这时就该考虑

    开垂直同步,开三缓冲了)这个理解应该是对的了 references:Real time rendering 3rd)

    假如一次绘制需要34ms, 在开了垂直同步的情况下(不开会撕裂还有别的显示问题)

    双缓存的gpu只能wait FPS掉到20

    三缓存的gpu可以往c上画不用wait

    三缓冲缺点是latency是一帧,延迟的厉害

    backbuffer 里面的内容是画好了 随时等着swap到front的(呈现)

    ===========

    假设有buffer012
    cpu在为commandbuffer准备数据
    gpu拿到cb往buffer0上画画完之后gpu会继续往buffer1上画 只有在同步信号来了之后 才会把buffer里的内容呈现到显示器要是信号还没来 它又不想等就可以继续往buffer2上画

    引入三缓冲通常是为了解决 开了垂直同步就掉帧的问题

    其实讲双缓冲的话 这个延迟的问题更容易理解
    对于buffer01 就是back and front

    gpu要做两件事
    一件是把commandbuffer的内容画到buffer上
    一个是把buffer里的内容送到显示器

  • 相关阅读:
    iOS 单例(Singleton)总结 和第三库引用单例
    iOS OpenURL用法简介
    CGContextRef学习笔记
    iOS 绘图(虚线、椭圆)
    iPhone4s 7.0.3-4 TableView 数据越界 解决方案
    Android Media应用开发
    RTMP & HLS
    Debug tool 学习笔记
    video codec 学习笔记
    matplotlib和numpy 学习笔记
  • 原文地址:https://www.cnblogs.com/minggoddess/p/7569857.html
Copyright © 2011-2022 走看看