0

我有一个看门狗系统服务,它监视 OpenGL 应用程序的崩溃、冻结、CPU/GPU 过热、预定的开/关时间等。当应用程序未运行时,由于这是一个信息亭式部署,我打电话BlockInput()并通电向下显示PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2)。当被监控的应用程序再次运行时,显示会以 取消暂停PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1)

好吧,事实证明,如果 OpenGL 应用程序在显示器处于低功耗模式时启动,当显示器打开时,无论图形驱动程序设置和对wglSwapIntervalEXT(). 如果在启动应用程序之前显示未暂停(有一些延迟以使其有时间实际启动),则 vsync 工作正常。这里有什么解决方法?我需要将显示器空白,以便商场中的随机人在应用程序启动时看不到桌面,但我还需要 vsync,因为我们严重受限于电力并且它产生了巨大的差异(运行高端 NVIDIA 显卡绘图很多果汁)。

垂直同步信号来自显卡,而不是显示器,所以这没有意义。即使显卡在低功耗显示模式下没有发出 vsync 信号,为什么当它重新出现时,OpenGL 不会锁定到该信号,当它SC_MONITORPOWER被发送到 unsuspend 时?我真的需要一个变通方法,因为我怀疑微软和/或 NVIDIA 是否会很快解决这个问题,如果他们甚至意识到这一点(而且我会去尝试联系任何一个傻瓜 - 我'我只是在偏僻的地方的一些可怜的开发人员)。

4

0 回答 0