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

  • 相关阅读:
    关于蜂窝物联技术 NBIoT 的一些观点
    SSL安全证书-概念解析
    使用 openssl 生成证书
    spring-实现配置文件读取
    spring技术核心概念纪要
    maven项目修改java编译版本的方式
    关于一个双机热备的问题
    关于Java的软引用及弱引用
    MQTT服务器搭建-mosquitto1.4.4安装指南
    hive 限制本地内存使用量
  • 原文地址:https://www.cnblogs.com/minggoddess/p/7569857.html
Copyright © 2011-2022 走看看