Saya memiliki aplikasi D3D11, dan saya ingin menambahkan suport layar penuh yang tepat. Sekarang saya dapat membiarkan DXGI mengalihkan jendela saya ke layar penuh untuk saya, dan saya mendapat kesan bahwa DXGI akan mengurus semua yang diperlukan untuk membuat rantai swap flip depan dan backbuffer alih-alih membukanya.
Namun, membiarkan DXGI melakukan swich tampaknya tidak dapat diandalkan dengan pengaturan multi-monitor - layar sekunder tetap sama sekali hitam setelah pergantian waktu, tanpa alasan atau pola yang jelas untuk itu.
Butuh beberapa kali beralih bolak-balik sebelum saya mendapatkan jendela layar penuh dan sisa desktop yang ditampilkan di layar lain.
Rupanya saya tidak sendirian dengan ini, Battlefield 3 dan WoW tampaknya memiliki masalah serupa bagi banyak orang.
Sekarang, pertanyaan sebenarnya: Saya kira karena perusahaan-perusahaan pengembang game AAA itu tidak dapat menjalankannya, harapan terbesar saya adalah entah bagaimana melakukan peralihan sendiri ke layar penuh.
Apakah ada yang bisa saya lakukan untuk meningkatkan jendela / swapchain ke mode layar penuh buffer-flipping yang tepat?
Jawaban:
Sepengetahuan saya, satu-satunya yang berhasil adalah:
di awal aplikasi Anda dan:
sebelum berhenti. Untuk transisi, lanjutkan seperti biasa. Saya telah mencoba
InvalidateRect(NULL, NULL, true)
setelah beralih ke layar penuh tanpa hasil. Semoga ini membantu.sumber
Anda memang bukan satu-satunya yang menghadapi masalah ini . Hal pertama yang perlu diperiksa: pastikan Anda menggunakan driver / beta / top-notch terbaru untuk kartu video yang Anda gunakan.
Sekarang, saya akan mengatakan bahwa hanya ada kemungkinan kecil bahwa Anda bisa mendapatkan ini berfungsi lebih baik daripada implementasi DXGI otomatis. Masalah seperti ini sangat tergantung pada vendor adaptor, versi driver, dan konfigurasi monitor. Jadi dengan memperbaikinya pada satu mesin, Anda mungkin akhirnya merusaknya lagi.
Saya menyarankan untuk tidak kembali ke zaman gelap DirectX 9 di mana Anda harus melakukan semuanya dengan tangan. Gagasan yang lebih baik adalah mencoba memperbaiki peralihan otomatis. Beberapa jalur untuk diikuti:
Baca dokumentasi (jarang) dengan cermat.
Jika Anda belum melakukannya, cobalah untuk merespons
WM_SIZE
acara yang Anda terima saat beralih dari / ke layar penuh, seperti dijelaskan di sini . Jika Anda melakukannya, pastikan Anda melepaskan semua referensi ke buffer belakang dengan benar sebelum meneleponResizeBuffers
, seperti dijelaskan di sana . Gagal melakukannya dapat menyebabkan masalah setengah aneh seperti ini.Cobalah untuk memulai langsung di layar penuh, dan untuk membuat rantai swap Anda dengan salah satu mode tampilan yang disebutkan . Jika ini berfungsi sepanjang waktu, ini mungkin berarti Anda tidak menggunakan salah satu mode tampilan yang disebutkan saat menangani
WM_SIZE
(atau tidak sepenuhnya, hal-hal seperti kecepatan refresh bisa menjadi penting).Cobalah mondar-mandir dengan efek swap dan jumlah buffer dari deskripsi rantai swap Anda . Anda mungkin harus menggunakan
DXGI_SWAP_EFFECT_SEQUENTIAL
danBufferCount
> = 2. Mungkin driver Anda memiliki dukungan yang buruk untuk opsi yang lebih "eksotis".sumber