Я использую 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) это не удается. У меня огромное количество очень маленьких интервалов (sub ms) и несколько больших интервалов, но, очевидно, нет кластеризации интервалов вокруг целого числа кадров.
Кстати, я делаю это, потому что очень важно, чтобы кадры доставлялись регулярно и надежно, и, если это не так, я хочу знать об этом.
Я действительно в растерянности, и я думаю, что единственная возможность состоит в том, что что-то изменилось с OS X и драйверами opengl, но Apple затрудняет переход назад к версии ОС, поэтому я подумал, что получу несколько советов, прежде чем я пойду по этой дороге.
Есть идеи?