什么会导致ALT-TAB“烦人” /缓慢/毛躁?


25

这更多是一个开放式问题,但是我希望对如何避免该问题有一些深刻的了解。

在Windows上玩游戏时,我可能想按ALT-TAB键。有些游戏没有问题,另一些游戏却不那么容易:它们可能需要使用AGES才能切换回原来的状态。有些游戏甚至容易崩溃或出现怪异的行为,例如图形失真或声音不稳定。

我只是想知道是什么原因导致这种现象?这是DirectX还是OpenGL?是由于游戏在屏幕设置更改时“聪明”并缓存/清除缓存引起的吗?(我想我在按ALT-TAB键时确实会收到某种信号吗?)

我自己没有任何问题,但是我想知道要避免什么,哪种“聪明”的窍门可能会导致这种可怕的客户体验?


1
好问题!希望我们像往常一样得到一些有见地的答案!

Answers:


17

在某些情况下,ALT-TAB将导致DirectX设备丢失。当设备丢失时,必须将所有GPU资源(顶点,纹理,着色器等)视为无效并且无法再次使用。MSDN参考在这里

这些丢失的资源必须释放,然后在还原设备时重新创建。在大多数游戏中,恢复这些资源需要从磁盘再次加载大量数据-通常与游戏/关卡开始时相同的加载过程。

如何避免这种情况?

  • 您可以将数据缓存保存在ram中,因此将其传输回GPU的速度要比从HD重新加载更快。我相信有一种方法可以使DirectX自动执行此操作。
  • 使用新版本的DirectX。此引号()来自DirectX 9Ex上的MSDN:

现在仅在两种情况下丢失设备:当硬件由于挂起而重置时以及设备驱动程序停止时。硬件挂起时,可以通过调用ResetEx重置设备。如果硬件挂起,纹理内存将丢失。


您能否提供该报价的链接?我们还发现,锁定桌面时设备也丢失了。
Kylotan

我已经添加了报价链接。
CiscoIPPhone

1
DirectX行为的更改是驱动程序模型更改的副作用。也就是说,它需要WDDM。因此,仅Vista / Win7。
巴哈巴(Bahbar)2010年

7

在Direct3D中,当您在全屏窗口之外按ALT-TAB键时,设备可能会丢失。如果发生这种情况,则必须释放并还原资源并重置设备。根据游戏的复杂性或开发人员的懒惰(嗨,Valve!),很难做到这一点。我不认为OpenGL会遇到同样的问题,因为驱动程序负责为您保留OpenGL上下文,但是我不确定。

关于StackOverflow,有一个关于DirectX应用程序中ALT-TAB支持最佳实践的问题,其中包括来自MSDN和其他来源的有用链接。


3
没错,OpenGL之所以不会受到(同样多)的影响,是因为驱动程序在Windows上为您保留了所有内容的副本。这可能导致GL应用程序比DX应用程序使用更多的RAM,但是行为良好的DX应用程序应该缓存所有内容,以防万一需要恢复其上下文数据,因此,缓存由谁来承担。
Branan 2010年

没错(关于OpenGL)。
topright 2010年

0

它可以是可用的可用ram数量。如果它太低,则在您的游戏运行时,Windows会将其大部分服务隐藏在交换区域中(即,它将大部分数据加载到RAM中,然后将其放在硬盘的特殊区域中)以进行游戏具有尽可能多的可用RAM空间。

然后,当您从游戏alt + tab切换到Windows时,它需要将这些服务加载到RAM中才能正常工作,因此它将从RAM中获取游戏数据,将其存储在交换中,并从Windows中提取Windows数据。交换到RAM。

如您所知,与RAM相比,写入硬盘可能要花费AGES。当您退出沉重的比赛时,实际上也会发生同样的事情。这就是为什么拥有足够的RAM空间来同时容纳游戏和Windows的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.