Как работает цикл рендеринга OpenGL и как правильно считать FPS?

Я попытался посчитать 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

Таким образом, похоже, что пропускается примерно каждый второй вызов отрисовки. Как проверить, был ли пропущен рисунок в кадре, чтобы я не учитывал его в частоте кадров, что происходит на этих итерациях и почему они пропускаются?

Использование std::cout внутри цикла рендеринга, особенно если вы используете Windows, и тем более использование std::endl, скорее всего, исказит ваши результаты.

Alan Birtles 18.09.2023 22:01

@AlanBirtles Обычно я вывожу только частоту кадров с помощью ImGui, но она такая же

julcs 18.09.2023 22:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, похоже, что Apple что-то сломала на MacBook M1, и уже есть попытка это исправить:

В качестве временного исправления при переходе на GLFW 3.3 исправляются VSync и счетчик FPS, так что частота кадров остается стабильной на уровне 60.

Другие вопросы по теме