Я разработал программу на Python, которая использует PyOpenGL и GLUT для управления окнами, чтобы показать анимацию.Чтобы анимация работала с максимально возможной частотой кадров, я установил
glutIdleFunc(glutPostRedisplay)
в соответствии с рекомендациями, например, здесь .
Это хорошо работает, я получаю устойчивое значение 60FPS с небольшой загрузкой ЦП.
Однако, как только окно скрывается другим окном, одно ядро ЦП переходит на 100%.
Я подозреваю, что пока окновидно, что скорость, с которой вызывается glutDisplayFunc
, ограничена, поскольку она содержит вызов glutSwapBuffers()
, который ожидает vsync;и что это ограничение не срабатывает, когда оно невидимо.
Я пытался решить проблему, отслеживая видимость (через glutVisibilityFunc
) и помещая следующий код в начало моего glutDisplayFunc
:
if not visible:
time.sleep(0.1)
return
Однако это не дает желаемого эффекта.
Что здесь происходит, и как мне этого избежать?