我正在使用DoubleBuffering并将交换间隔设置为1,因此flushBuffers应该阻塞openGL代码,直到交换完成。
因此,我在单独的线程上进行了此设置:
for(i=0 i< numFrames i++) {
// some drawing stuff
[[NSOpenGLContext currentContext] flushBuffer];
glFinish();
// get the time
}
在OS X的早期版本(以及使用不同的硬件)中,这种方法可以正常工作:绝大多数时间我的时间间隔与一帧相对应,偶尔有两个时间间隔。
但是现在(在新硬件以及10.13和10.14上),此操作失败。我有很多非常低的间隔(以毫秒为单位),有些间隔很大,但是在整数帧周围没有明显的间隔聚类。
顺便说一句,我这样做是因为以规则,可靠的方式交付帧至关重要,如果不是,则我想了解一下。
我真的很茫然,我认为唯一的可能性是OS X和opengl驱动程序发生了某些变化,但是Apple很难在OS版本上回退,所以我想我会在我走这条路之前,一些建议。
有什么想法吗?