当窗口不可见时,GLUT动画会导致1个核心的100%利用率

时间:2019-05-11 01:48:14

标签: glut pyopengl

我开发了一个Python程序,该程序使用PyOpenGL和GLUT进行窗口管理以显示动画。为了使动画以最快的帧速率运行,我设置了

glutIdleFunc(glutPostRedisplay)

根据建议,例如here

效果很好,我得到了稳定的60 FPS,CPU负载也不大。

但是,一旦该窗口被另一个窗口隐藏,一个CPU内核就会跳至100%利用率。

我怀疑在窗口可见时,glutDisplayFunc的调用速率是有限的,因为它包含一个等待glutSwapBuffers()并等待vsync的调用。并且该限制在不可见时会失效。

我试图通过跟踪可见性(通过glutVisibilityFunc)并将以下代码放在glutDisplayFunc的开头来解决该问题:

if not visible:
    time.sleep(0.1)
    return

但是,效果不理想。

这里发生了什么,如何避免呢?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法here, 一旦知道,就很明显:当窗口不可见时,将glutPostRedisplay禁用为glutIdleFunc。具体来说,像这样使用glutVisibilityFunc

def visibility(state):
    if state == GLUT_VISIBLE:
        glutIdleFunc(glutPostRedisplay)
    else:
        glutIdleFunc(None)