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

最佳答案

我认为没有适合您的简单标志。由于在创建命令缓冲区时可以控制完整的渲染管道,因此Metal无法知道将自定义文本插入渲染 channel 的位置。

您可以在管道中注入(inject)自己的渲染过程(基于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()

    // ...
}

然后,您可以在 View 中观察此值,如下所示:

import Combine

class MyViewController: UIViewController {

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

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

关于xcode - 显示MTKView的当前帧速率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55289377/

10-12 14:18