Что может сделать ALT-TAB «раздражающим» / медленным / сбойным?


25

Это скорее открытый вопрос, но я надеюсь получить хорошее представление о том, как избежать этой проблемы.

Когда я играю в игры для Windows, я бы хотел использовать ALT-TAB. В некоторых играх нет проблем, в других это не так просто: они могут потребовать ВОЗРАСТ, чтобы переключиться и вернуться обратно. Некоторые даже подвержены сбоям или странному поведению, такому как графическое искажение или заикание звука.

Мне просто интересно, что вызывает такое поведение? Это скорее DirectX или OpenGL? Это вызвано тем, что Игры «умны» и кешируют / стирают кеш при каждом изменении настроек экрана? (Я предполагаю, что они получают какой-то сигнал, когда я ALT-TAB?)

У меня нет никаких собственных проблем, но я хотел бы знать, чего следует избегать, и какой «умный» трюк может вызвать такой ужасный опыт работы с клиентами?


1
Отличный вопрос! Надеюсь, мы получим несколько проницательных ответов, как обычно!

Ответы:


17

В некоторых ситуациях ALT-TAB приведет к потере устройства DirectX. Когда устройство потеряно, все ресурсы графического процессора (вершины, текстуры, шейдеры и т. Д.) Должны считаться недействительными и не могут использоваться снова. Ссылка MSDN здесь .

Эти потерянные ресурсы должны быть освобождены, а затем воссозданы при восстановлении устройства. В большинстве игр восстановление этих ресурсов требует повторной загрузки большого количества данных с диска - часто такая же процедура загрузки, как и в начале игры / уровня.

Что можно сделать, чтобы этого избежать?

  • Вы можете хранить кэш своих данных в оперативной памяти, поэтому передача их обратно в графический процессор будет быстрее, чем перезагрузка с HD. Я считаю, что есть способ заставить DirectX делать это автоматически.
  • Используйте новую версию DirectX. Эта цитата ( источник ) из MSDN на DirectX 9Ex:

Устройства теперь теряются только при двух обстоятельствах; когда аппаратное обеспечение сбрасывается, потому что оно зависает, и когда драйвер устройства останавливается. Когда аппаратное обеспечение зависает, устройство можно сбросить, вызвав ResetEx. Если оборудование зависает, память текстур теряется.


Не могли бы вы предоставить ссылку на эту цитату? Мы обнаруживаем, что устройство также теряется при блокировке рабочего стола.
Kylotan

Я добавил ссылку для цитаты.
CiscoIPPhone

1
изменение поведения DirectX является побочным эффектом изменения модели драйвера. То есть требуется WDDM. Так что это только Vista / Win7.
Bahbar

7

В Direct3D устройство может потеряться, когда вы нажмете ALT-TAB из полноэкранного окна. Если это произойдет, вы должны освободить и восстановить ресурсы и перезагрузить устройство. Это может быть трудно сделать должным образом в зависимости от сложности игры или лени разработчиков (привет Valve!). Я не думаю, что OpenGL страдает от той же проблемы, потому что драйвер отвечает за сохранение контекста OpenGL для вас, но я не уверен.

В StackOverflow есть вопрос о лучших методах поддержки ALT-TAB в приложении DirectX, которое включает полезные ссылки из MSDN и других источников.


3
Вы правы, причина того, что OpenGL не страдает (так сильно) от этого, заключается в том, что драйвер хранит копию всего для вас в Windows. Это может привести к тому, что приложения GL будут использовать больше оперативной памяти, чем приложения DX, но приложение DX с хорошим поведением должно кэшировать все на тот случай, если ему все равно понадобится восстановить данные контекста, так что это сводится к тому, кто несет ответственность за это кэширование.
Бранан

Это правда (об OpenGL).
topright

0

Это может быть доступное количество свободного барана. Если оно слишком низкое, когда ваша игра запускается, Windows скрывает большинство своих служб в области подкачки (т.е. берет большую часть данных, загруженных в ОЗУ, и вместо этого помещает их в специальную область вашего жесткого диска) для вашей игры. иметь как можно больше свободного места в оперативной памяти.

Затем, когда вы нажимаете alt + tab из игры в Windows, эти службы должны быть загружены в ОЗУ, чтобы они работали, поэтому он заберет данные вашей игры из ОЗУ, сохранит их в разделе подкачки и извлечет данные Windows из своп в оперативку.

И, как вы знаете, запись на жесткий диск может занять AGES по сравнению с RAM. То же самое происходит на самом деле, когда вы выходите из тяжелой игры. Вот почему наличие достаточного объема оперативной памяти как для игры, так и для окон может быть действительно более удобным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.