代码之家  ›  专栏  ›  技术社区  ›  Taylor

iOS金属双缓冲,每秒120帧

  •  2
  • Taylor  · 技术社区  · 6 年前

    有没有办法在120Hz时得到双缓冲(提升),而不是三缓冲?我正在尝试最小化用户界面延迟。

    当我使用Xcode的iOS游戏模板(它呈现一个旋转的立方体)时,尽管工作量很小,但我仍然可以得到120Hz的三重缓冲。它的双缓冲频率为60Hz。

    复制:

    1. 使用文件新建项目在Xcode中创建新项目
    2. 选择iOS游戏
    3. 选择Swift/金属
    4. gameviewcontroller add mtkview.preferredframespersecond=120中
    5. 产品简介
    6. 选择金属系统痕迹
    7. 观察:三重缓冲(帧为3种颜色):

    从图中可以看出,GPU在双缓冲所需的时间内完成得很好。

    以下是一些背景需要观看的有用视频: https://developer.apple.com/videos/play/wwdc2015/233/.

    复制:

    1. 使用文件新建项目在Xcode中创建新项目
    2. 选择iOS游戏
    3. 选择Swift/金属
    4. GameViewController 添加 mtkView.preferredFramesPerSecond = 120
    5. 产品简介
    6. 选择金属系统痕迹
    7. 观察:三重缓冲(帧为3种颜色):

    Image showing triple buffering in Instruments

    从图中可以看出,GPU在双缓冲所需的时间内完成得很好。

    这里有一个有用的视频,可以观看一些背景: https://developer.apple.com/videos/play/wwdc2015/233/

    1 回复  |  直到 6 年前
        1
  •  2
  •   endomachi    6 年前

    应用程序可以控制抽屉的最大金属数量 CAMetalLayer.maximumDrawableCount . 将此值设置为2将强制进行双缓冲(默认值为3)。请注意,这样做更有可能 -[CAMetalLayer nextDrawable] (或mtkview等价物)将返回nil,强制您丢弃帧。