O que pode fazer com que o ALT-TAB seja 'irritante' / lento / com falhas?

25

Essa é mais uma pergunta em aberto, mas espero ter uma boa idéia de como evitar o problema.

Ao jogar jogos no Windows, talvez eu queira ALT-TAB. Alguns jogos não têm problemas, outros não são tão fáceis: eles podem levar o AGES para trocar e voltar. Alguns são propensos a bater ou a comportamentos estranhos, como distorção gráfica ou som gaguejante.

Eu só me pergunto o que causa esse comportamento? Isso é mais uma coisa do DirectX ou do OpenGL? É causado pelo fato de os jogos serem 'inteligentes' e fazer cache / limpar o cache sempre que as configurações da tela são alteradas? (Presumo que eles recebam algum tipo de sinal quando ALT-TAB?)

Não tenho nenhum problema, mas gostaria de saber o que evitar e que truque 'inteligente' pode causar esse tipo de experiência horrível para o cliente?

Michael Stum
fonte
11
Ótima pergunta! Espero que possamos obter respostas perspicazes, como sempre!

Respostas:

17

Em algumas situações, o ALT-TAB fará com que o dispositivo DirectX seja perdido. Quando o dispositivo é perdido, todos os recursos da GPU (vértices, texturas, shaders etc.) devem ser considerados inválidos e não podem ser usados ​​novamente. Referência do MSDN aqui .

Esses recursos perdidos devem ser liberados e, em seguida, recriados quando o dispositivo é restaurado. No caso da maioria dos jogos, a restauração desses recursos exige que muitos dados sejam carregados do disco novamente - geralmente o mesmo procedimento de carregamento feito no início do jogo / nível.

O que pode ser feito para evitar isso?

  • Você pode manter um cache de seus dados em memória RAM, para transferi-lo de volta para a GPU será mais rápido que recarregar a partir do HD. Eu acredito que há uma maneira de fazer o DirectX fazer isso automaticamente.
  • Use uma nova versão do DirectX. Esta citação ( origem ) é do MSDN no DirectX 9Ex:

Agora, os dispositivos são perdidos apenas em duas circunstâncias; quando o hardware é redefinido porque está travado e quando o driver do dispositivo está parado. Quando o hardware trava, o dispositivo pode ser redefinido chamando ResetEx. Se o hardware travar, a memória de textura será perdida.

CiscoIPPhone
fonte
Você poderia fornecer um link para essa cotação? Também descobrimos que o dispositivo está perdido quando você bloqueia a área de trabalho.
Kylotan
Eu adicionei o link para a cotação.
CiscoIPPhone
11
a mudança no comportamento do DirectX é um efeito colateral da mudança no modelo de driver. Ou seja, requer WDDM. Portanto, é apenas o Vista / Win7.
Bahbar 26/10/10
7

No Direct3D, um dispositivo pode se perder quando você ALT-TAB sai da janela de tela cheia. Se isso acontecer, você deve liberar e restaurar os recursos e redefinir o dispositivo. Isso pode ser difícil de fazer corretamente, dependendo da complexidade do jogo ou da preguiça dos desenvolvedores (oi Valve!). Eu não acho que o OpenGL sofra do mesmo problema porque o driver é responsável por manter o contexto do OpenGL para você, mas não tenho certeza.

Há uma pergunta no StackOverflow sobre as práticas recomendadas para suporte ao ALT-TAB em um aplicativo DirectX que inclui links úteis do MSDN e de outras fontes.

Firas Assaad
fonte
3
Você está correto, a razão pela qual o OpenGL não sofre (tanto) com isso é porque o driver mantém uma cópia de tudo para você no Windows. Isso pode fazer com que os aplicativos GL usem mais RAM do que os aplicativos DX, mas um aplicativo DX bem-comportado deve colocar tudo em cache, caso precise restaurar seus dados de contexto de qualquer maneira; portanto, é da responsabilidade de quem é esse cache.
Branan 26/10/10
Isso é verdade (sobre o OpenGL).
Topright
0

Pode ser a quantidade disponível de ram livre. Se estiver muito baixo, quando o jogo é executado, o Windows oculta a maioria dos serviços na área de troca (ou seja, pega a maioria dos dados carregados na RAM e os coloca em uma área especial do disco rígido) para o seu jogo para ter o máximo de espaço disponível em RAM possível.

Então, quando você pressiona a tecla Alt + Tab do jogo para o Windows, ele precisa que esses serviços sejam carregados na RAM para funcionar, para que ele retire os dados do jogo da RAM, armazene-os no swap e retire os dados do Windows. a troca para a RAM.

E, como você sabe, gravar no disco rígido pode levar AGES em comparação à RAM. A mesma coisa também acontece quando você sai de um jogo pesado. É por isso que ter espaço suficiente em RAM para um jogo e janelas pode ser realmente mais confortável.

Aurelien Ribon
fonte