在iOS的应用程序后台渲染OpenGL

时间:2019-09-05 15:18:53

标签: ios swift opengl-es background cpu

我想将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来解决此问题?

0 个答案:

没有答案