在我的OpenGL CAD应用程序中,GPU在大多数情况下都是空闲的,偶尔会刷新帧。当场景的变焦和平移发生时,我需要GPU立即以有效频率运行。
这是我的问题 - 我的系统GPU需要大约100毫秒来感知活动并从125毫赫兹空闲频率激活到900毫赫兹的活动频率 - 因此我的应用程序的用户将感觉15 fps持续100毫秒,然后在GPU达到正常频率时顺畅地跟随130 fps。
我的问题 - 是否有标准的OpenGL方法来暗示“GPU'在一段时间不活动后渲染第一个新帧之前从空闲速度唤醒?我希望GPU从这个提示唤醒而不是工作负载感知(由于滞后)。
答案 0 :(得分:1)
我认为这个"提示"即使在扩展上也不存在,并且它永远不会存在,因为GPU需要时间来唤醒",这不仅仅是工作负载检测延迟的问题。除非你能提前预测到"醒来"你赢得的GPU无法以这种方式隐藏电源状态开关的延迟。
但是,有多种解决方案/解决方法:
答案 1 :(得分:0)
不直接回答你的问题,而是一个愚蠢的建议(处理如此)
为什么CAD需要130 fps?
我的 CAD 具有使用双缓冲的恒定帧速率~30 fps,因此如果不更改场景,则使用旧缓冲区而不是完全渲染。突然移动或缩放时没有明显的性能影响。
如果您在每次缩放平移增量后重绘,那么这不是一个好方法(特别是在较慢的计算机上),更好的是在视图中的任何更改上设置一个bool _redraw
或 CAD 如果_redraw
设置,则在计时器中重设数据和重绘/重置。这个时间应用程序将闲置大部分非活动时间,并且当开始做东西仍然足够快。如果你的应用程序能顺利完成,那么如果你错过了少量的第一帧就没有问题。