iPhone上有帧速率限制吗?

时间:2015-10-31 00:37:49

标签: ios swift opengl-es

我作为测试,在单独的NSThread上的while循环中设置我的opengl游戏的update()和render()函数。它的运行速度恰好为60FPS。这怎么可能?它实际上是我想要的,但它为什么这样做呢?我以为NSThread会尽可能快地运行......?似乎V-synced。

 func setupGL(){
        glThread = NSThread(target: self, selector: "glRun", object: nil);
        glThread.start();
    }


 func glRun(){
        //Start and run Opengl on a separate Thread
        setupLayer();
        setupContext();
        setupRenderBuffer();
        //setupDepthBuffer();
        setupFrameBuffer();
        engine.setupEngine(GLfloat(self.frame.size.width) * GLfloat(scale), screenHeight: GLfloat(self.frame.size.height) * GLfloat(scale));
        //setupDisplayLink();
        print("THREAD STARTED!");
        while(true){
            update()
            render();
            logger.logFrame();
        }
    }

2 个答案:

答案 0 :(得分:1)

这是因为iOS将硬件使用量降低到合理水平。事实是你不需要超过60fps,因为屏幕不会刷新得更快,因此帧速率是有限的。通过这种方式,电池寿命显着延长。

在这种情况下,使用NSThread并不重要,因为限制在OpenGL层中。

您可以通过设置CADisplayLink及其frameInterval值来控制帧速率。

答案 1 :(得分:1)

是的,iOS上有一个帧速率限制。所有iOS设备(截至撰写本文时)每秒最多刷新屏幕60次。例如,请参阅WWDC 2015 Session 233: Advanced Touch Input on iOS,在4分20秒:

  

我们的产品以60赫兹或每秒60次的速度刷新屏幕。

iOS OpenGL ES实现知道这一点,并与窗口服务器的屏幕刷新同步。