我知道PaintGL()
函数的调用频率与屏幕的频率相同(比方说每秒60次)。但是如果屏幕上没有显示像素(如果另一个窗口隐藏了OpenGL),则对PaintGL()
的调用不再受限制,而且调用的次数要多得多......哪些使用最大CPU并且很烦人。
那么,有没有办法限制它?
我正在使用MacOS 10.9和Qt Creator。
我对vsync了解不多。事实是我的软件使用了30%的CPU,当它处于forground时,当它被隐藏时,它会上升到95%。
答案 0 :(得分:0)
如果您尚未启用vsync,则帧会尽可能频繁地交换(如果您没有添加人工暂停)。如果你在显卡上推高负荷,很可能你的程序是GPU限制的(CPU没有任何关系,等待GPU完成绘图而无所事事。)
当你的程序不可见时,绘制成本几乎为零,因为无论如何都没有人看到结果(内部由图形驱动程序执行优化)。
所以,回答你的问题是 - 启用vsync。它将锁定缓冲区交换间隔以监控刷新率,因此您的帧速率永远不会高于刷新率(事实上,如果您的显示器处于显示状态,它将锁定到数字60/30/20等。 60赫兹)。这是非常有用的技术,例如消除了屏幕撕裂。