我希望这里有人能够帮助我解决我遇到的问题。
下载项目代码并在iPhone 14 Pro上运行Swift示例代码后,应用程序间歇性崩溃,抛出此错误:
由于执行期间出现错误,命令缓冲区的执行被中止。导致GPU超时错误(00000002:kIOGPUCommandBufferCallbackErrorTimeout)
有时几秒内就会崩溃,有时可能需要10分钟左右,有时甚至更长。
这里有没有人在示例代码或使用 LiDAR 相机时经历过这种崩溃?
我花了很长时间试图解决这个问题,我在网上到处搜索并向苹果提交了(我认为)有关此问题的报告。我无法让 xcode 向我显示发生崩溃的代码行。
我说“我认为”是因为我唯一能找到联系苹果的地方就是通过反馈助手。
任何帮助将不胜感激。
更新
经过无数个小时(或几天),我终于找到了错误所在。
在MetalTextureViewColor.swift文件中,有一个draw方法。错误是在这一行抛出的
编码器.endEncoding*(
出现以下错误
MTLCommandBuffer 执行失败。与编码器关联的命令导致错误
这是整个绘图功能
override func draw(in view: MTKView) {
guard parent.capturedData.colorY != nil && parent.capturedData.colorCbCr != nil else {
print("There's no content to display.")
return
}
guard let commandBuffer = metalCommandQueue.makeCommandBuffer() else { return }
guard let passDescriptor = view.currentRenderPassDescriptor else { return }
guard let encoder = commandBuffer.makeRenderCommandEncoder(descriptor: passDescriptor) else { return }
// Vertex and Texture coordinates data (x,y,u,v) * 4 ordered for triangle strip.
let vertexData: [Float] = [-1, -1, 1, 1,
1, -1, 1, 0,
-1, 1, 0, 1,
1, 1, 0, 0]
encoder.setVertexBytes(vertexData, length: vertexData.count * MemoryLayout<Float>.stride, index: 0)
encoder.setFragmentTexture(parent.capturedData.colorY!, index: 0)
encoder.setFragmentTexture(parent.capturedData.colorCbCr!, index: 1)
encoder.setDepthStencilState(depthState)
encoder.setRenderPipelineState(pipelineState)
encoder.drawPrimitives(type: .triangleStrip, vertexStart: 0, vertexCount: 4)
// error happening on the line below
encoder.endEncoding()
commandBuffer.present(view.currentDrawable!)
commandBuffer.commit()
//commandBuffer.waitUntilCompleted()
}
有什么方法可以捕获此错误并忽略它,然后继续运行应用程序吗?
跟进这个问题,你能解决这个问题吗?