双缓冲 三缓冲

双缓冲 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里的内容送到显示器

原文地址:https://www.cnblogs.com/minggoddess/p/7569857.html