我的IOS openGL应用程序是否在主线程上被阻止?加速度计滞后

我的IOS openGL应用程序是否在主线程上被阻止?加速度计滞后,ios,opengl-es,3d,Ios,Opengl Es,3d,我有一个IOS游戏,使用加速度计。我的游戏渲染速度很好,每秒60帧,但我的加速度计输入滞后。例如,当我将游戏向左倾斜后,游戏需要一秒钟的时间才能响应。触摸事件也会发生同样的情况,有时滞后约为1秒 我的游戏渲染循环如下所示: procedure RenderFrame switch to "SpaceShips" texture for each bad guy update his location render to OpenGLES

我有一个IOS游戏,使用加速度计。我的游戏渲染速度很好,每秒60帧,但我的加速度计输入滞后。例如,当我将游戏向左倾斜后,游戏需要一秒钟的时间才能响应。触摸事件也会发生同样的情况,有时滞后约为1秒

我的游戏渲染循环如下所示:

procedure RenderFrame

    switch to "SpaceShips" texture

    for each bad guy
        update his location
        render to OpenGLES
    end loop

    update good guy location
    render him to OpenGLES

    switch to "Particles" texture

    for each particle
        update the location
        render to OpenGLES
    end loop

end RenderFrame
对我来说,这听起来类似于这个问题:


这听起来像是我的主线程被阻塞了,我会从并发中受益吗?我可以仅仅通过将整个方法移到另一个后台线程来删除主线程上的块,还是必须对上述方法进行更细粒度的重写以实现并发性?如果可能的话,我希望尽可能减少并发量,以减轻主线程上的阻塞。

为什么不使用工具并找出答案?请尝试系统跟踪工具。对于将渲染操作移动到后台线程的相对轻松的方法,您可以尝试我在此处建议的基于GCD的方法:。我现在已经在几种不同的情况下使用了它,在每种情况下,它不仅释放了用于用户交互的主线程,而且还产生了良好的整体性能改进(特别是在多核设备上)。感谢Brad,我想我理解您现在发布的代码。这似乎并不太坏,但我已经写了我的游戏是C++。从我理解的,我应该能够在目标C和C++中混合,或者你知道它是否能够在C++中调用GCD?@特殊的-GCD使用C API,并且只要你使用LLVM作为编译器,就可以阻止C工作。我知道有几个人使用C++代码,没有任何问题。它可能无法移植到其他平台(您需要在那里找到其他解决方案),但它是一种在iOS上将渲染转移到后台线程的简单而高效的方法。