Apa yang bisa menyebabkan ALT-TAB 'mengganggu' / lambat / glitchy?

25

Ini lebih merupakan pertanyaan terbuka, tetapi saya berharap mendapatkan wawasan yang baik tentang bagaimana menghindari masalah ini.

Saat memainkan Game di Windows, saya mungkin ingin ALT-TAB keluar dari sana. Beberapa permainan tidak memiliki masalah, yang lain tidak begitu mudah: Mereka mungkin membutuhkan AGES untuk beralih dan kembali. Beberapa bahkan rentan terhadap tabrakan atau perilaku aneh seperti distorsi grafis atau suara gagap.

Saya hanya ingin tahu apa yang menyebabkan perilaku ini? Apakah ini lebih seperti DirectX atau OpenGL? Apakah ini disebabkan oleh Game yang 'pintar' dan menyimpan / menghapus cache setiap kali pengaturan layar berubah? (Saya berasumsi mereka mendapatkan semacam sinyal ketika saya ALT-TAB?)

Saya tidak punya masalah sendiri, tetapi saya ingin tahu apa yang harus dihindari dan trik 'pintar' mana yang dapat menyebabkan pengalaman pelanggan yang mengerikan seperti ini?

Michael Stum
sumber
1
Pertanyaan bagus! Semoga kami mendapatkan jawaban yang berwawasan luas, seperti biasa!

Jawaban:

17

Dalam beberapa situasi ALT-TAB akan menyebabkan perangkat DirectX hilang. Ketika perangkat hilang, semua sumber daya GPU (simpul, tekstur, shader dan sebagainya) harus dianggap tidak valid dan tidak dapat digunakan lagi. Referensi MSDN di sini .

Sumber daya yang hilang ini harus dilepaskan, dan kemudian diciptakan kembali ketika perangkat dipulihkan. Dalam kasus sebagian besar gim yang memulihkan sumber daya ini membutuhkan banyak data untuk dimuat dari disk lagi - seringkali prosedur pemuatan yang sama seperti yang dilakukan pada awal gim / level.

Apa yang bisa dilakukan untuk menghindari ini?

  • Anda dapat menyimpan cache data Anda di ram sehingga mentransfernya kembali ke GPU akan lebih cepat daripada memuat ulang dari HD. Saya percaya ada cara untuk membuat DirectX melakukan ini secara otomatis.
  • Gunakan DirectX versi baru. Kutipan ( sumber ) ini dari MSDN di DirectX 9Ex:

Perangkat sekarang hanya hilang dalam dua keadaan; ketika perangkat keras diatur ulang karena menggantung, dan ketika driver perangkat dihentikan. Ketika perangkat keras hang, perangkat dapat diatur ulang dengan memanggil ResetEx. Jika perangkat keras hang, memori tekstur hilang.

CiscoIPPhone
sumber
Bisakah Anda memberikan tautan untuk kutipan itu? Kami menemukan bahwa perangkat hilang ketika Anda mengunci desktop juga.
Kylotan
Saya telah menambahkan tautan untuk penawaran.
CiscoIPPhone
1
perubahan perilaku DirectX adalah efek samping dari perubahan dalam model driver. Artinya, ini membutuhkan WDDM. SO itu hanya Vista / Win7.
Bahbar
7

Di Direct3D, perangkat dapat hilang ketika Anda ALT-TAB keluar dari jendela layar penuh. Jika itu terjadi, Anda harus melepaskan dan memulihkan sumber daya dan mengatur ulang perangkat. Ini bisa sulit dilakukan dengan benar tergantung pada kompleksitas permainan atau kemalasan pengembang (hai Valve!). Saya tidak berpikir OpenGL menderita masalah yang sama karena driver bertanggung jawab untuk menjaga konteks OpenGL untuk Anda, tetapi saya tidak yakin.

Ada pertanyaan tentang StackOverflow tentang praktik terbaik untuk dukungan ALT-TAB dalam aplikasi DirectX yang mencakup tautan berguna dari MSDN dan sumber lainnya.

Firas Assaad
sumber
3
Anda benar, alasan OpenGL tidak menderita (sebanyak) dari ini adalah karena driver menyimpan salinan segalanya untuk Anda di Windows. Hal ini dapat menyebabkan aplikasi GL menggunakan lebih banyak RAM daripada aplikasi DX, tetapi aplikasi DX yang berperilaku baik harus melakukan caching semua jika perlu tetap mengembalikan data konteksnya, jadi itu berarti siapa yang bertanggung jawab atas caching.
Branan
Itu benar (tentang OpenGL).
topright
0

Ini bisa menjadi jumlah ram gratis yang tersedia. Jika terlalu rendah, saat gim Anda berjalan, Windows menyembunyikan sebagian besar layanannya ke dalam area swap (yaitu mengambil sebagian besar data yang dimuat dalam RAM dan meletakkannya di area khusus hard drive Anda) agar permainan Anda untuk memiliki ruang RAM yang tersedia sebanyak mungkin.

Kemudian, ketika Anda alt + tab dari gim ke windows, diperlukan layanan ini untuk dimuat dalam RAM agar dapat bekerja, sehingga akan mengambil data gim Anda dari RAM, menyimpannya di swap, dan menarik data windows dari swap ke RAM.

Dan seperti yang Anda tahu, menulis ke hard drive dapat mengambil USIA dibandingkan dengan RAM. Hal yang sama sebenarnya juga terjadi ketika Anda keluar dari game yang berat. Itu sebabnya memiliki ruang RAM yang cukup untuk gim dan jendela bisa sangat nyaman.

Aurelien Ribon
sumber