显示MTKView的当前帧率

9

我知道在SceneKit中,你可以在SKView的一侧启用横幅来查看实时帧率和其他有用的调试信息。但是对于MTKView呢?我似乎找不到这样的属性来启用,或者如何查询当前帧率。(因为我正在渲染一个帧率约为0.5fps的内容)

1个回答

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)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接