Я попытался посчитать FPS в цикле рендеринга следующим образом:
while (!glfwWindowShouldClose(window)) {
float current = (float) glfwGetTime();
delta = current - time;
time = current;
std::cout << 1.f / delta << std::endl;
render();
glfwSwapBuffers(window);
glfwPollEvents();
}
...с включенной VSync:
glfwSwapInterval(1);
... но вывод выглядит так:
72.0857
345.182
73.3988
343.092
71.9065
375.564
71.9188
353.294
71.9324
360.212
72.3131
277.364
Таким образом, похоже, что пропускается примерно каждый второй вызов отрисовки. Как проверить, был ли пропущен рисунок в кадре, чтобы я не учитывал его в частоте кадров, что происходит на этих итерациях и почему они пропускаются?
@AlanBirtles Обычно я вывожу только частоту кадров с помощью ImGui, но она такая же
Итак, похоже, что Apple что-то сломала на MacBook M1, и уже есть попытка это исправить:
В качестве временного исправления при переходе на GLFW 3.3 исправляются VSync и счетчик FPS, так что частота кадров остается стабильной на уровне 60.
Использование
std::cout
внутри цикла рендеринга, особенно если вы используете Windows, и тем более использованиеstd::endl
, скорее всего, исказит ваши результаты.