显示 MTKView 的当前帧率

jac*_*ujh 8 debugging xcode metal metalkit

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

Clo*_*ddy 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()

    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的视图中观察这个值,如下所示:

import Combine

class MyViewController: UIViewController {

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

    func subscribeToFrameTime() {
        renderer.lastFrameTime
            .sink { label.text = "\($0 * 1000) ms." }
            .store(in: &cancellables)
    }
}
Run Code Online (Sandbox Code Playgroud)