我们的应用仍在IOS上使用OpenGLES2.0。是的,我知道我们应该使用Metal,但是我们的应用程序也可以在Android上运行。虽然大多数情况下它以60 fps的速度运行都非常令人满意,但偶尔会出现故障,在某些情况下,它似乎是在拍摄一帧渲染场景然后转换两帧之间交替进行。 1,2,1,2,1,1,2 ...然后,在不更改渲染内容的情况下,它将跳回到1,1,1,即60fps。延迟是在我们“展示”了最后一个缓冲区之后的第一个glClear中。我猜OpenGL仍在渲染最后一个场景,它必须等待整个帧才能再次同步。也许我们的渲染/更新循环接近或刚好超过整个帧-这将有助于解释延迟,因为它“错过了” vsync。
但是,如果我们有三重缓冲,我希望帧时间是1,2,1,2 ..而不是1,2,2, 1。有没有办法让IOS使用三重缓冲?
目前,我们似乎仅初始化两个“缓冲区”
GLuint viewRenderbuffer;
GLuint viewFramebuffer;
glGenFramebuffers(1,&viewFramebuffer);
glGenRenderbuffers(1,&viewRenderbuffer);
glBindFramebuffer(GL_FRAMEBUFFER,viewFramebuffer);
glBindRenderbuffer(GL_RENDERBUFFER,viewRenderbuffer);
然后我们在每帧渲染完成后称之为
glBindRenderbuffer(GL_RENDERBUFFER,viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
通常我希望在某个地方调用glSwapbuffers,但是我希望它在presentRenderbuffer调用中。我想这取决于驱动程序,然后才能处理双倍或三倍缓冲。
是否有一种方法可以强制执行三重缓冲,或者实际上已经在使用它。
谢谢 肖恩