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

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

【问题讨论】:

    标签: xcode debugging metal metalkit


    【解决方案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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 2019-12-24
      • 2023-03-05
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2018-11-12
      相关资源
      最近更新 更多