Есть несколько причин высокого использования графических процессоров, которые вы видите в этой (казалось бы) простой программе, но самая большая причина в ...
Это не пустой цикл
Рассмотрим, к примеру, однострочный вызов функции, который вы сделали в конце цикла: glfwSwapBuffers(window);
. Это вызов функции, отвечающий за указание графическому процессору сбросить текущий отображаемый кадр и отобразить следующий. Даже при отсутствии реальных объектов для рисования, это все же требует, чтобы графический процессор перерисовывал несколько миллионов пикселей (в зависимости от размера вашего монитора), и поскольку ваш цикл будет только ждать ввода от пользователя, цикл будет выполняться так быстро, как он физически способен; на моем компьютере этот цикл сам по себе будет работать на частоте около 13 кГц.
Конечно, даже если бы вы заполнили этот цикл фактической работой, он все равно работал бы как можно быстрее, и, хотя он, вероятно, будет медленнее, чем 13 кГц, когда у него будет настоящая работа, он ' Вероятно, будет намного быстрее, чем частота обновления вашего монитора.
Если вы включите вертикальную синхронизацию или добавите преднамеренное ожидание, использование графического процессора будет более разумным
Самое простое решение - просто включить вертикальную синхронизацию, то есть графический процессор будет отображаться только тогда, когда монитор готов к следующему кадру, с частотой 60 Гц (или 120 Гц, или 144 Гц, независимо от частоты, с которой работает ваш монитор).
Ваш пост утверждает , что вертикальная синхронизация включена, но у вас уже есть функция, которая сделает это закомментированной. Раскомментируйте glfwSwapInterval(1);
, и вы увидите, что использование графического процессора резко снизится, даже если нет никакого рендеринга, который требуется графическому процессору. Если у вас есть дисплей FPS, вы должны увидеть падение FPS с того места, где оно было, до относительно плоских 60 Гц; или 16,67 мсек, если вы отслеживаете это.