显示 MTKView 的当前帧率

Posted

技术标签:

【中文标题】显示 MTKView 的当前帧率【英文标题】:Show current frame rate of a MTKView 【发布时间】:2019-08-12 20:03:51 【问题描述】:

我知道在 SceneKit 中,您可以启用 SKView 侧面的横幅来查看实时帧速率和其他有用的调试信息。但是MTKView 呢?我似乎没有找到这样的属性来启用,或者我如何查询当前的帧速率。 (因为我正在渲染帧速率为 0.5fps 左右的东西)

【问题讨论】:

【参考方案1】:

我认为你没有简单的标志。因为您在创建命令缓冲区时控制了完整的渲染管道,所以 Metal 无法知道在哪里注入带有一些自定义文本的渲染通道。

您可以在管道中注入自己的渲染通道(基于 var showDebugInformation = true 之类的标志),但这听起来有点工作。

我可能会在 draw 方法中手动监控帧时间,并在每次绘制时更新标签。粗略的轮廓可能如下所示:

var previousFrameAtTime: Date
let lastFrameTime = CurrentValueSubject<TimeInterval, Never>(.infinity)

func draw(in view: MTKView) 

    lastFrameTime.send(Date().timeIntervalSince(previousFrameAtTime))
    previousFrameAtTime = Date()

    // ...

然后你可以在你的视图中观察到这个值,像这样:

import Combine

class MyViewController: UIViewController 

    let label = UILabel()
    var cancellables: [AnyCancellable] = []

    func subscribeToFrameTime() 
        renderer.lastFrameTime
            .sink  label.text = "\($0 * 1000) ms." 
            .store(in: &cancellables)
    

【讨论】:

以上是关于显示 MTKView 的当前帧率的主要内容,如果未能解决你的问题,请参考以下文章

经验分享使用Windows自带Xbox显示游戏帧率

MTKView 显示广色域 P3 色彩空间

iOS 高刷屏监控 + 优化:从理论到实践全面解析

MTKView 绘图性能

如何在 macOS 上渲染半透明的 MTKView?

学习笔记:帧率转换之三维递归搜索块匹配算法