MTKView清晰显示

时间:2019-08-19 13:41:14

标签: ios opengl-es-2.0 metal metalkit mtkview

我想在应用程序退出活动后立即将MTKView(或GLKView / CAEAGLLayer)的内容设置为黑色。将其设置为透明颜色(例如黑色)并显示它的最快,最可靠的方法是什么?

1 个答案:

答案 0 :(得分:1)

为了在进入背景时清空MTKView,必须在从委托回调返回到applicationDidEnterBackground(_:)对象上的UIApplicationDelegate方法之前渲染空白帧。

仅听UIApplication.didEnterBackgroundNotification是不够的;在通知观察者状态改变之前捕获快照。

这意味着您应该将应用程序已将背景从您的应用程序委托传递到相关的视图控制器的消息传递给相关的视图控制器,并强制它们立即在之前渲染空白帧。从委托方法返回(意味着没有发布通知,也没有向不同线程分派异步)。这是一种将MTKView清除为黑色,并在返回之前等待安排图纸和演示文稿的方法:

func drawBlankAndWait(_ mtkView: MTKView) {
    mtkView.clearColor = MTLClearColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
    let commandBuffer = commandQueue.makeCommandBuffer()!
    guard let renderPassDescriptor = mtkView.currentRenderPassDescriptor else { return }
    let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: renderPassDescriptor)!
    renderEncoder.endEncoding()
    let drawable = mtkView.currentDrawable!
    commandBuffer.present(drawable)
    commandBuffer.commit()
    commandBuffer.waitUntilScheduled()
}

在接到applicationWillEnterForeground(_:)呼叫后,您可以恢复进入背景时可能设置的任何状态,包括视图的暂停状态。