我想将OpenGL绘制的旋转方块传输到另一台设备。不幸的是,当我将应用程序发送到背景时,正方形停止渲染。如苹果在文档中所述,后台运行的应用无权访问GPU进行渲染。
我打开了后台模式功能,以确保应用程序可以在后台执行任务,并使用Timer对象重新绘制正方形。 目前,我正在使用GLKit创建OpenGL逻辑。不幸的是,我对OpenGL的了解并不丰富,因此GLKit是创建旋转方块的最简单方法。
我使用了本教程来创建旋转正方形:https://www.raywenderlich.com/5146-glkit-tutorial-for-ios-getting-started-with-opengl-es
override func viewDidLoad() {
super.viewDidLoad()
setupGL()
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(spinObject), userInfo: nil, repeats: true)
}
@objc
func spinObject() {
let aspect = fabsf(Float(self.view.bounds.size.width) / Float(self.view.bounds.size.height))
let projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0), aspect, 4.0, 10.0)
self.effect.transform.projectionMatrix = projectionMatrix
var modelViewMatrix = GLKMatrix4MakeTranslation(0.0, 0.0, -6.0)
self.rotation += 90 * Float(self.timeSinceLastUpdate)
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, GLKMathDegreesToRadians(self.rotation), 0, 0, 1)
self.effect.transform.modelviewMatrix = modelViewMatrix
}
当我将应用程序发送到后台时,收到以下警告:
Execution of the command buffer was aborted due to an error during execution. Insufficient Permission (to submit GPU work from background) (IOAF code 6)
如上所述,我知道此警告是预期的行为,所以我的问题是:是否可以通过使用CPU而不是GPU来解决此问题?